使用 ffmpeg 将 png 序列转换为 x264

使用 ffmpeg 将 png 序列转换为 x264

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

ffmpeg -y -r 30 -b 1800k -i _tmp%04d.png -vcodec libx264 out.mp4

我收到以下警告信息

Incompatible pixel format 'bgra' for codec 'libx264', auto-selecting format 'yuv420p'

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

我知道我可以预先批量转换 png 以剥离 alpha 通道,但是图像序列是由另一个程序生成的,每次制作视频时都必须对图像进行预处理,这不是最理想的。

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

convert in.png -background white -flatten +matte out.png

ffmpeg 给出警告信息

Incompatible pixel format 'pal8' for codec 'libx264', auto-selecting format 'yuv420p'

所以还是没有骰子。

答案1

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

因此,有了脚本,序列.avs,你可以这样做:
ffmpeg -i sequence.avs -vcodec libx264 out.mp4

在哪里序列.avs是:
ImageSource("_tmp%04d.png", start=0, end=1, fps=30).ConvertToYV12()

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

另请参阅:更多颜色格式。 这图像源文档。

相关内容