You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何终止Python启动的FFmpeg进程?进程无法正常退出问题

FFmpeg 进程无法通过写入"q"到STDIN正常退出的问题

向FFmpeg发送SIGTERM信号后,进程会以非零状态码退出,因此尝试通过向STDIN写入"q"的方式优雅终止进程,但该方案在当前场景下无效。

当前实现代码

主进程启动FFmpeg

stop_file_fd, _ = tempfile.mkstemp()
with os.fdopen(stop_file_fd, 'w+') as stop_file_fp:
    p = subprocess.Popen((
        'ffmpeg', '-hide_banner', '-loglevel', 'error',
        '-i', m3u8_playlist_url, '-c:v', 'copy', '-c:a', 'copy', '-f', 'flv',
        rtmp_endpoint,
    ), stdin=stop_file_fp)

    launch_another_thread(p, stop_file_fp)

    p.communicate()

子线程终止逻辑

stop_file_fp.write('q')
os.fsync(stop_file_fp.fileno())
stop_file_fp.seek(0)

执行上述操作后,FFmpeg看似停止了数据传输,但进程并未退出。

后续尝试结果

  • 使用p.stdin.write(b'q'):客户端主动触发停止时有效,但通过Ctrl+C终止服务器时,FFmpeg停止处理数据但进程仍存活。
  • 尝试'q'.encode("GBK")写入STDIN,结果与上述情况一致。

内容的提问来源于stack exchange,提问作者andre487

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:02:56