使用 ffmpeg 从 png 文件制作电影

rho*_*ron 11 video linux png ffmpeg video-conversion

我有 277 个 800x600 png 文件,文件名格式为 island_sizes-CSH(II)-###.png,其中 ### 是一个以 084 开头并以 360 结尾的数字。

我正在做

ffmpeg -i island_sizes-CSH\(II\)-*.png output.mpg -y
Run Code Online (Sandbox Code Playgroud)

但它不起作用:

ffmpeg -f image2 -i island_sizes-CSH\(II\)-*.png video.mpg -y
ffmpeg 版本 1.2.1 版权所有 (c) 2000-2013 FFmpeg 开发人员
  建于 2013 年 5 月 10 日 15:14:14,使用 gcc 4.4.6 (GCC) 20120305 (Red Hat 4.4.6-4)
  配置:--prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --enable-shared --enable-runtime-cpudetect --enable- gpl --enable-version3 --enable-postproc --enable-avfilter --enable-pthreads --enable-x11grab --enable-vdpau --disable-avisynth --enable-frei0r --enable-libopencv --enable- libdc1394 --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions - fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --disable-stripping
  libavutil 52. 18.100 / 52. 18.100
  libavcodec 54. 92.100 / 54. 92.100
  libav格式 54. 63.104 / 54. 63.104
  libavdevice 54. 3.103 / 54. 3.103
  libavfilter 3. 42.103 / 3. 42.103
  libswscale 2. 2.100 / 2. 2.100
  libswresample 0. 17.102 / 0. 17.102
  libpostproc 52. 2.100 / 52. 2.100
输入 #0, image2, from 'island_sizes-CSH(II)-084.png':
  持续时间:00:00:00.04,开始:0.000000,比特率:N/A
    流 #0:0:视频:png、rgba、800x600 [SAR 3937:3937 DAR 4:3]、25 tbr、25 tbn、25 tbc
[png @ 0x1468c20] ff_frame_thread_encoder_init 失败
输出 #0、image2 到“island_sizes-CSH(II)-085.png”:
    流 #0:0:视频:png、rgba、800x600 [SAR 1:1 DAR 4:3]、q=2-31、200 kb/s、90k tbn、25 tbc
输出 #1,图像 2,到“island_sizes-CSH(II)-086.png”:
    流 #1:0:视频:png、rgba、800x600 [SAR 1:1 DAR 4:3]、q=2-31、200 kb/s、90k tbn、25 tbc
...
输出 #274、image2 到“island_sizes-CSH(II)-359.png”:
    流 #274:0:视频:无、rgba、800x600 [SAR 1:1 DAR 4:3]、q=2-31、200 kb/s、90k tbn、25 tbc
输出 #275、image2 到“island_sizes-CSH(II)-360.png”:
    流 #275:0:视频:无、rgba、800x600 [SAR 1:1 DAR 4:3]、q=2-31、200 kb/s、90k tbn、25 tbc
输出 #276,mpeg,到“video.mpg”:
    流 #276:0:视频:无、yuv420p、800x600 [SAR 1:1 DAR 4:3]、q=2-31、200 kb/s、90k tbn、25 tbc
流映射:
  流 #0:0 -> #0:0 (png -> png)
  流 #0:0 -> #1:0 (png -> png)
...
  流 #0:0 -> #274:0 (png -> png)
  流 #0:0 -> #275:0 (png -> png)
  流 #0:0 -> #276:0 (png -> mpeg1video)
打开输出流的编码器时出错 #218:0 - 可能不正确的参数,例如比特率、速率、宽度或高度

slh*_*hck 24

这是将多个图像作为输入传递给ffmpeg. 请查看有关创建视频幻灯片image2demuxer 选项的 FFmpeg Wiki 指南。

您需要告诉它使用三位数字作为序列号,并从 84 开始,即

ffmpeg -start_number 84 -i island_sizes-CSH\(II\)-%03d.png output.mpg
Run Code Online (Sandbox Code Playgroud)

一些进一步的提示:

  • MPEG-1 作为视频编解码器不是最佳的,并且在大文件时给您带来糟糕的质量。除非您希望兼容旧设备或计算机(或没有任何编解码器的 Windows XP),否则请使用 MPEG-4 Part 10 编码器(H.264),例如libx264

    ffmpeg -i … -c:v libx264 out.mp4
    
    Run Code Online (Sandbox Code Playgroud)

    有关 x264 选项(如何更改质量等)的教程,请查看x264 编码指南

  • PNG 文件使用 RGB 像素格式,普通视频编解码器不支持该格式。使用 MPEG-1 没有关系,但使用 MPEG-4 编解码器它会,因为它ffmpeg会自动将像素格式转换为非二次采样的 YUV。在这种情况下,您需要将其转换为色度子采样格式,例如 YUV 4:2:0,否则您的视频可能无法在大多数应用程序中播放:

    ffmpeg -i … -c:v libx264 -pix_fmt yuv420p out.mp4
    
    Run Code Online (Sandbox Code Playgroud)