问题描述
当ffmpeg作为子进程在Linux(特别是在Raspberry Pi 4B上)下运行时,是否可以完全终止ffmpeg?我有一个.NET Core 3.1应用程序,它使用以下命令生成ffmepg,该命令应将h.264流编码为MP4文件:
ffmpeg -framerate 24 -i - -b:v 2500k -c copy video.mp4
在任意一段时间后,我想终止ffmpeg,但是我尝试执行的所有操作都被忽略或导致ffmpeg立即退出-它从未将MOOV块写入MP4文件的末尾,从而导致文件损坏无法播放。我意识到生成该块可能需要一段时间,并且我尝试将进程搁置最长60秒,这比在同一设备上以交互方式从h.264到MP4编码所需的时间长得多。作为记录,我知道如何创建一个大多数都可以播放的“碎片化” MP4(使用-movflags
开关等),但是我正在尝试生成正确的MP4。
我尝试发送带有或不带有各种CR + LF组合键的 Q 密钥,我在类似的问题中已经提到过,但是我认为这只是Windows的事情。
我已经尝试了每个Unix信号以及两个信号的组合。我在某个地方(我认为是ffmpeg站点本身)看到SIGINT
应该发送两次,但这没有任何作用。在另一篇SO帖子中,有人建议发送SIGQUIT
,该操作也无济于事。有趣的是,发送SIGINT
后跟SIGQUIT
是实际上终止进程的唯一组合,但是它立即结束并显示以下输出:
Error writing trailer of /media/ramdisk/video.mp4: Immediate exit requested
frame= 236 fps= 29 q=-1.0 Lsize= 28928kB time=00:00:09.79 bitrate=24201.9kbits/s speed= 1.2x
video:29167kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Exiting normally,received signal 2.
我在两者之间尝试了很长的延迟,直到SIGQUIT
响应为止,什么都没有发生,如上所示。奇怪的是,有时它说的是received signal 3
而不是2。
我必须缺少一些技巧。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)