【问题标题】:Deal with missing frames when creating video with ffmpeg使用 ffmpeg 创建视频时处理丢失的帧
【发布时间】:2021-10-28 05:13:30
【问题描述】:

我正在尝试从数千张由视觉脚本进行后期处理的图像组合成一个视频。这个过程并不完美,我会有几帧失败(比如 10K 中有 20 帧)。我的问题是我使用类似的命令

ffmpeg -framerate 30 -start_number 11 -i image-%d.jpeg -vf "crop=trunc(iw/2)*2:trunc(ih/2)*2" movie.mp4

因此,一旦偶然发现失败的图像,它就会失败,因为它会在文件夹中丢失,例如

Could not open file : image-727.jpegtrate=4305.2kbits/s speed=1.54x     
image-%d.jpeg: Input/output error

我该如何解决这个问题?我想避免重新编号这么多文件。对于给定的运行,我可以有多达 100K。

提前致谢。

【问题讨论】:

    标签: bash file ffmpeg runtime-error


    【解决方案1】:

    image demuxer 使用全局模式类型:

    ffmpeg -framerate 30 -pattern_type glob -i '*.jpeg' -vf "crop=trunc(iw/2)*2:trunc(ih/2)*2" movie.mp4
    

    因为您的文件名似乎没有任何零填充,您可能需要添加sort

    cat $(find . -name '*.jpeg' -print | sort -V) | ffmpeg -framerate 30 -i - -vf "crop=trunc(iw/2)*2:trunc(ih/2)*2" movie.mp4
    

    【讨论】:

    • 感谢您的快速回复。我尝试了这个命令,我得到了这个神秘的错误pipe:: Invalid data found when processing input我不确定什么是无效的。
    • 我也尝试运行排序,我得到了很多二进制垃圾而不是文件列表,以便我错过了什么?
    • @TheCodeNovice 第一个命令中有错字。我更新了答案。带有sort 的版本预计会为您提供二进制数据,而不是列表。二进制数据正在通过管道传输到 ffmpeg。如果您想要一个简单的列表来验证文件顺序,只需运行 find . -name '*.jpeg' -print | sort -V
    • - 感谢您查看此内容...排序本身可以工作,但 ffmpeg 仍然不喜欢通过管道传输的数据。如果我输入 -f image2 这应该告诉 ffmpeg 我正在管道 jpegs 我得到一个不同的错误`找不到路径为 'pipe:' 的文件和索引在 0-4 管道:: 没有这样的文件或目录@ 987654329@cat $(find .-name '*.jpeg' -print | sort -V) | ffmpeg -f image2 -framerate 30 -i - -vf "crop=trunc(iw/2)*2:trunc(ih/2)*2" movie.mp4`。目录中唯一的东西是图像
    • @TheCodeNovice 复制并粘贴控制台输出中的所有文本。使用 pastebin 网站并在评论中提供链接。
    猜你喜欢
    • 2019-01-11
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 2020-12-27
    • 2021-11-27
    • 1970-01-01
    • 2016-08-09
    • 2020-05-11
    相关资源
    最近更新 更多