FFMPEG 转换永远运行

FFMPEG 转换永远运行

我正在运行使用 ffmpeg 将图像 + 音频转换为视频的 Web 应用程序,有时有人会上传某些内容,这会导致 ffmpeg 永远在 100% CPU 上运行,直到整个驱动器被填满。

当有人上传一些损坏或奇怪的文件时就会发生这种情况,或者最近我发现当有图像而不是音频时也会发生这种情况(与-loop有关)

ffmpeg -loop 1 -r 1 -i image.jpg -i image2.jpg -vcodec libx264 -acodec copy -xerror -preset ultrafast -r 1 -shortest out.mp4

我知道我可以验证用户输入,但这不应该发生。哪个 ffmpeg 查询可以阻止这种情况,但也会提供相同的文件?

我尝试添加 -stimeout 或 -timeout,但没有作用。

答案1

在给定的命令中,

ffmpeg -loop 1 -r 1 -i image.jpg -i image2.jpg -vcodec libx264 -acodec copy -xerror -preset ultrafast -r 1 -shortest out.mp4

由于没有进行映射分配,ffmpeg 将第一个视频输入映射到输出。由于已设置循环选项,因此它是一个无休止的流。这-shortest没有效果,因为第二幅图像没有自动映射,因此其持续时间(0.04 秒)无关紧要。

解决方法是添加一个有限的虚拟音频流,创建方式如下 -ffmpeg -f lavfi -t 1 -i anullsrc=cl=mono dummy.m4a

ffmpeg -loop 1 -r 1 -i image.jpg -i image2.jpg -i dummy.m4a -vcodec libx264 -acodec copy -xerror -preset ultrafast -r 1 -shortest out.mp4

这并不能解决“奇怪”文件的问题。


还有一个-timelimit seconds示例,-timelimit 600用于在 10 分钟后退出 ffmpeg。但是,这使用系统调用setrlimit,并且据我所知,Windows 本身不支持,所以我现在无法测试它。

相关内容