如何将实时批量图像转换并压缩为mp4视频文件?

时间:2015-06-28 16:42:10

标签: c# .net winforms video ffmpeg

在我硬盘上的目录中我有很多图片:screenshot000001.bmp,screenshot000002.bmp .... screenshot001200.bmp

我想做两件事:

  1. 使用cmd(命令提示符)进行测试,并将图像压缩并转换为mp4视频文件。

  2. 在我的程序中实时获取截图并将其保存到硬盘中以压缩它们并实时构建mp4视频文件。

  3. 对于第一部分,我尝试输入cmd:

    ffmpeg -f image2 -i screenshot%d.bmp -vcodec libx264 -b 800k video.avi
    

    但我得到的是两个错误:

    [image2 @ 0000000004766380]找不到包含路径的文件&截机%d.bmp'和 索引在0-4范围内 截图%d.bmp:没有这样的文件或目录

    我将ffmpeg.exe复制到图像所在的目录中。 E:\截图

    对于第二部分,我将如何实时截取屏幕截图:

    启动计时器的按钮点击事件:

    private void button1_Click(object sender, EventArgs e)
            {
                timer1.Start();
            }
    

    然后在tick事件中:

        ScreenShot shot = new ScreenShot();
        public static int counter = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {
            counter++;
            shot.GetScreenShot(@"e:\screenshots\", "screenshot");
            if (counter == 1200)
            {
                timer1.Stop();
            }
        }
    

    这一行拍摄.GetScreenShot(@" e:\ screenshots \"," screenshot");将屏幕截图保存到硬盘。 在每次截屏后,我想实时压缩和构建mp4视频文件。

    我试过这个并且遇到了错误:

    ffmpeg -f image2 -i screenshot%06d.bmp -vcodec libx264 -b 800k video.avi
    

    错误讯息:

    ffmpeg version N-73165-gf1e1730 Copyright (
      built with gcc 4.9.2 (GCC)
      configuration: --enable-gpl --enable-vers
    isynth --enable-bzlib --enable-fontconfig -
    le-iconv --enable-libass --enable-libbluray
    enable-libdcadec --enable-libfreetype --ena
    ibilbc --enable-libmodplug --enable-libmp3l
    le-libopencore-amrwb --enable-libopenjpeg -
    able-libschroedinger --enable-libsoxr --ena
    ble-libtwolame --enable-libvidstab --enable
     --enable-libvorbis --enable-libvpx --enabl
    e-libx264 --enable-libx265 --enable-libxavs
    ble-decklink --enable-zlib
      libavutil      54. 27.100 / 54. 27.100
      libavcodec     56. 45.100 / 56. 45.100
      libavformat    56. 38.102 / 56. 38.102
      libavdevice    56.  4.100 / 56.  4.100
      libavfilter     5. 18.100 /  5. 18.100
      libswscale      3.  1.101 /  3.  1.101
      libswresample   1.  2.100 /  1.  2.100
      libpostproc    53.  3.100 / 53.  3.100
    [bmp @ 0000000002f77ce0] bad magic number
        Last message repeated 3 times
    [image2 @ 0000000002f76380] decoding for st
    [image2 @ 0000000002f76380] Could not find
     bmp, none): unspecified size
    Consider increasing the value for the 'anal
    screenshot%06d.bmp: could not find codec pa
    Input #0, image2, from 'screenshot%06d.bmp'
      Duration: 00:00:02.88, start: 0.000000, b
        Stream #0:0: Video: bmp, none, 25 fps,
    Please use -b:a or -b:v, -b is ambiguous
    Codec AVOption b (set bitrate (in bits/s))
    vi) has not been used for any stream. The m
    e (e.g. a video option with no video stream
    some encoder which was not actually used fo
    Output #0, avi, to 'video.avi':
    Output file #0 does not contain any stream
    

1 个答案:

答案 0 :(得分:0)

尝试将screenshot%d.bmp更改为screenshot%06d.bmp

我注意到,你正在使用Windows和.NET,但是如果你不介意安装node.js,那么它有很好的工具来处理转换过程,node-fluent-ffmpeg可以处理许多输出选项对你而言。

<强>更新

好吧,这是使用视频编码器的悲惨现实 - 现在有更多问题,大多数都在错误消息中描述:

尝试使用-b:v代替-b来表示视频比特率。

[bmp @ 0000000002f77ce0] bad magic number

很难说这意味着什么,但我注意到ffmpeg在图像格式方面非常挑剔。如果你可以尝试将转换(ImageMagic)运行到图像并将格式更改为PNG或JPEG,它可能会更好。