如果完整性检查遇到错误,我可以让 ffmpeg 停止吗?

Kat*_*ate 10 video ffmpeg

如果遇到错误,有没有办法阻止 ffmpeg 处理?我正在使用 ffmpeg 通过以下方式检查视频完整性:

ffmpeg -v error -i file.avi -f null - 2>error.log
Run Code Online (Sandbox Code Playgroud)

但是,我想扩展它以在发现错误后立即停止该过程。

小智 15

在一个选项中:

-xerror 
Run Code Online (Sandbox Code Playgroud)

命令行选项被记录为完全按照您的意愿行事。

添加该选项,ffmpeg 将在出现流错误时退出(还将退出值设置为 1):

ffmpeg -h full | grep xerror .... -xerror error exit on error
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢,这正是我想要的,我相信这就是答案。不是 slhck 的答案。 (2认同)

slh*_*hck 11

我自己已经想过这个问题,并且ffmpeg没有提供一种简单的方法来做到这一点。根据我在FFmpeg 邮件列表上得到的反馈,您可以使用全局选项

-err_detect explode
Run Code Online (Sandbox Code Playgroud)

但是,此选项似乎并非在所有情况下都有效。请参阅ffmpeg -h full选项列表:

-err_detect        <flags>      .D.... set error detection flags
Run Code Online (Sandbox Code Playgroud)

这些值如下:

可能的值:

  • crccheck: 验证嵌入的 CRC

  • bitstream: 检测比特流规范偏差

  • buffer: 检测不正确的比特流长度

  • explode: 在检测到小错误时中止解码

  • ignore_err: 忽略解码错误,继续解码。如果您想分析视频的内容并因此无论如何都希望对所有内容进行解码,这将非常有用。如果出现错误,此选项不会产生令人愉悦的视频。

  • careful: 考虑违反规范并且在野外没有被视为错误的事情

  • compliant: 将所有不符合规范的情况视为错误

  • aggressive:考虑一个健全的编码器不应该做的错误