ffmpeg:如何防止出现错误时等待

ffmpeg: how to prevent wait in case of error

我使用ffmpeg为images/videos添加水印,使用如下命令行:

ffmpeg -y -f mjpeg -i input -i /tmp/watermark.png -filter_complex "..." -f mjpeg output

问题是,如果输入文件 不是 jpeg 文件,进程将 HANG 而不是退出并报错:

Press [q] to stop, [?] for help
[mjpeg @ 0x126dc60] dqt: len 28602 is too large
Error while decoding stream #0:0: Invalid data found when processing input
frame=    0 fps=0.0 q=0.0 size=       0kB time=-577014:32:22.77 bitrate=  -0.0kbits/s speed=N/A

在我的情况下,文件没有扩展名,我必须指定 -f。如果我弄错了文件类型,这是一个可以接受的错误,我会在发现此类问题后立即修复。然而,如果 ffmpeg 在没有返回父进程的情况下挂起,这对我来说 不是 好,因为我有一个非常大的文件队列要处理,我不希望任何错误阻止处理任务。

如果您知道程序处理文件需要多少时间,您可以使用 linux timeout 命令,在这段时间后取消任何程序的执行。

您也可以在 ffmpeg 命令中使用 -t option 来限制处理时间,但我认为第一个选项更好。