来自 pngs 的 ffmpeg ... PNGS 子集出错?

ffmpeg from pngs... Error with subset of PNGS?

我有大约 1200 张 png 正在转换成电影。其中一些缺失:即 - _00003.png、_00005.png 存在,但 1、2 和 4 不存在。

以下命令适用于其他数据集,但不适用于我当前的 png 集:

ffmpeg -i pngs/_*.png -y -vcodec mpeg4 -pix_fmt yuv420p -r 25 -filter:v 'setpts=1.2*PTS' p3SN.mp4

我收到这个错误:

Output #61, image2, to 'pngs/_00096.png':
  Metadata:
    encoder         : Lavf57.83.100
    Stream #61:0: Video: png, rgba, 3240x2160 [SAR 3937:3937 DAR 3:2], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
    Metadata:
      encoder         : Lavc57.107.100 png
Output #62, image2, to 'pngs/_00097.png':
  Metadata:
    encoder         : Lavf57.83.100
    Stream #62:0: Video: png, rgba, 3240x2160 [SAR 3937:3937 DAR 3:2], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
    Metadata:
      encoder         : Lavc57.107.100 png
[png @ 0x7fae93170e00] ff_frame_thread_encoder_init failed
Error initializing output stream 63:0 -- Error while opening encoder for output stream #63:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!

在图像 _00097.png。如果我删除它,它会稍后发生 (105)。

我通过查看图像的尺寸等检查了这些图像,这个范围内的所有图像看起来都一样(我用 _0009?.png 检查了所有图像)。

知道为什么会这样吗?

这是有问题的文件(中间)和一个 before/after:

您的命令将用第一个输入覆盖所有输入文件。这是一个示例,说明在使用 -y 时为什么要小心,它会在不询问您的情况下自动覆盖文件。

您需要告诉 ffmpeg 使用 glob pattern:

ffmpeg -y -pattern_type glob -framerate 25/1.2 -i "pngs/_*.png" -vcodec mpeg4 -pix_fmt yuv420p -r 25 p3SN.mp4
  • 我相信 glob 模式选项在 Windows 上不起作用,但如果它具有与 Linux cat 命令等效的命令,您可以通过管道输出:cat *.png | ffmpeg -i - output.mp4
  • 如果需要,您可以使用 -framerate-r 代替 setpts。