使用 ffmpeg 将 png 序列转换为 x264

apd*_*dnu 6 png ffmpeg x264

我正在尝试将一系列 png 转换为 mp4 视频。我正在使用 ffmpeg,并希望使用 H.264 编解码器对视频进行编码。使用命令

ffmpeg -y -r 30 -b 1800k -i _tmp%04d.png -vcodec libx264 out.mp4
Run Code Online (Sandbox Code Playgroud)

我收到以下警告消息

Incompatible pixel format 'bgra' for codec 'libx264', auto-selecting format 'yuv420p'
Run Code Online (Sandbox Code Playgroud)

我的理解是 png 中有一个 alpha 通道,x264 编码器无法处理。有没有办法解决这个问题?例如,有没有办法让编码器忽略 alpha 通道(我的 png 实际上没有任何透明元素)?

我知道我可以预先批量转换 png 以去除 alpha 通道,但是图像序列是由另一个程序生成的,并且每次制作视频时都必须预处理图像将不是最佳选择。

编辑:使用命令从每一帧中剥离 alpha 通道后

convert in.png -background white -flatten +matte out.png
Run Code Online (Sandbox Code Playgroud)

ffmpeg 给出警告信息

Incompatible pixel format 'pal8' for codec 'libx264', auto-selecting format 'yuv420p'
Run Code Online (Sandbox Code Playgroud)

所以仍然没有骰子。

Lou*_*eru 0

我正在考虑使用AVISynth框架服务来解决这个问题,但看起来 ffmpeg 现在对 AVISynth 具有本机支持。这意味着您可以使用 AVISynth 脚本作为输入。

因此,使用脚本sequence.avs,您可以执行以下操作:
ffmpeg -i sequence.avs -vcodec libx264 out.mp4

其中sequence.avs是:
ImageSource("_tmp%04d.png", start=0, end=1, fps=30).ConvertToYV12()

注意:可选的开始和结束参数反映了我使用两个图像进行了测试,_tmp0000.png_tmp0001.png

另请参阅:更多颜色格式。ImageSource文档