使用图像文件作为输入的ffmpeg输入选项的说明


34

我有一些图像,我想用ffmpeg制作动画gif。这些图像的名称为:

837_1.png
838_1.png
...

我试图弄不懂ffmpeg 的-i命令行选项,但是我遇到了一些问题而崩溃了。

如果我未指定任何内容,则要求我替换文件:

ffmpeg -i * -vcodec libx264 out.mp4

ffmpeg version 1.2.1 Copyright (c) 2000-2013 the FFmpeg developers
  built on Jul 26 2013 20:18:03 with Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/1.2.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=cc --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
  libavutil      52. 18.100 / 52. 18.100
  libavcodec     54. 92.100 / 54. 92.100
  libavformat    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
Input #0, image2, from '358_1.png':
  Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: png, rgb24, 550x550, 25 tbr, 25 tbn, 25 tbc
File '359_1.png' already exists. Overwrite ? [y/N]

并且,如果我尝试使用Internet中最常用的格式(%d)之一。.ffmpeg找不到文件:

fmpeg -i '%3d_1.png' -vcodec libx264 out.mp4

ffmpeg version 1.2.1 Copyright (c) 2000-2013 the FFmpeg developers
  built on Jul 26 2013 20:18:03 with Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/1.2.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=cc --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
  libavutil      52. 18.100 / 52. 18.100
  libavcodec     54. 92.100 / 54. 92.100
  libavformat    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
[image2 @ 0x7f963a006600] Could find no file with with path '%3d_1.png' and index in the range 0-4
%3d_1.png: No such file or directory

所以..这是一个问题,如何在ffmpg中使用-i命令行选项?

为了清楚起见,我使用的是Mac OSX 10.8,ffmpeg版本1.2.1,zsh 4.3.11

Answers:


47

没有任何其他选择,ffmpeg的解image2复用器将查找以0开头的序列。它还将检查该索引,默认范围为5(这就是为什么它会抱怨0到4范围内没有索引的原因)。根据文档,如果要从任意索引(例如837)开始,则必须设置开始编号。

ffmpeg -start_number 837 -i '%3d_1.png' -c:v libx264 out.mp4

PNG到H.264转换中的色彩空间

由于PNG文件使用RGB颜色空间表示像素,因此转换为H.264的最终结果将是YUV 4:4:4(非子采样)。最终的视频可能无法在所有播放器上播放,尤其是任何非基于FFmpeg的播放器。您的播放器只会显示黑框,否则可能会崩溃。要解决此问题,请将像素格式更改为YUV 4:2:0:

ffmpeg -start_number 837 -i '%3d_1.png' -c:v libx264 -pix_fmt yuv420p out.mp4

为了控制质量,请使用-crf选项。有关更多信息,请参见x264编码指南

为什么*全局不起作用

不要使用*作为输入选项。Shell会在ffmpeg看到它之前将其扩展到当前目录中的所有文件,因此该命令将扩展为ffmpeg -i file1 file2 … filen。由于所有输入文件都ffmpeg需要该-i选项,因此它将file2 … filen代替输出文件并覆盖它们。不好。


非常完整的答案!您还对动画gif有一些建议吗?
nkint

对于动画GIF,您希望更新到ffmpeg 2.0版及更高版本,因为它们大大提高了视觉质量。在下载页面有一些链接到静态生成的OS X.对于年龄较大的ffmpeg,请参阅:ffmpeg的转换的FLV视频为.gif与可怕的品质
slhck

实际上,它不仅检查+ 0..4,而且检查8,16,32,64等。这在使用HTTP URL时很明显。但是,image2无法识别出这200 OK与“找到文件”等效,因此它不会停止搜索。
MSalters

1
即使尝试实施您的建议,我也会遇到同样的事情。我的文件被命名为DSCxxxxx.jpgwhere xxxxx是一个以零开头的5位数字(请注意,我没有下划线)。尽管如此,运行后,ffmpeg -r 30 -start_number 04606 -i DSC%d.jpg out.mp4我仍然收到与上面原始帖子相同的错误
匿名

@jphollowed您是否将文件名模式放在引号中?
slhck

29

可以通过指定-pattern_type glob选项启用通配符:

ffmpeg -pattern_type glob -i '*.png' -vcodec libx264 out.mp4

2
更好的方法:)
古斯塔夫

3
只有这个对我有用。没有办法得到这个xxx%d.pngxxx%3d.png'xxx%d.png''xxx%3d.png'东西的工作
yPhil

尝试以下操作后,我得到相同的错误:[image2 @ 0x2552560] Could find no file with path '*.jpg' and index in the range 0-4 *.jpg: No such file or directory
匿名

选择了模式类型'glob',但此libavformat构建不支持globbing [使用Windows ffmpeg] [oof,本应向下滚动一个答案]
Katastic Voyage

7

注意:模式globing在Windows下不起作用(并且可能永远不会由于在Windows下的libavfilter中缺少对globbing的支持。)因此,如果在Windows下执行此操作,则必须重命名文件,以便按顺序编号并没有差距。

您可以使用简单的Powershell命令行重命名它们:

dir *.jpg | %{$x=0} {Rename-Item $_ -NewName “Base$x”; $x++ }

这将返回file1.jpg file2.jpg...... file10.jpg这,如果你按字母顺序排序竟又file1.jpgfile10.jpg...file2.jpg
STIB

那不是Base $ x.jpg吗?照原样,您的重命名了我的所有文件,并杀死了文件扩展名。
Katastic Voyage

5

使用PowerShell重命名的更好方法(保留顺序):

dir *.jpg | %{$x=0} {Rename-Item $_ -NewName "Base$($x.tostring('000000')).jpg"; $x++ }

是否dir总是返回按字母顺序排序的文件?将a添加sort-object到混合物中会更安全吗?
stib
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.