对图像文件作为输入的ffmpeg输入选项进行说明

Modified on: Sat, 16 Mar 2019 03:20:03 +0800

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

837_1.png 838_1.png ...

我正在尝试取消ffmpeg的-i命令行选项,但我遇到了一些问题。

如果我没有指定任何内容,请让我替换文件:

837_1.png
838_1.png
...

如果我尝试在互联网上使用最常用的格式之一(%d).. ffmpeg找不到文件:

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]

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

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

作者:nkint

最佳答案

没有任何其他选项,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编码指南

为什么* glob不起作用

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

作者:slhck

相关问答

添加新评论