gpt4 book ai didi

python - 在 python 中启动和停止 ffmpeg 管道

转载 作者:行者123 更新时间:2023-12-04 23:16:55 26 4
gpt4 key购买 nike

我正在尝试在我的 Python 脚本中启动和停止 ffmpeg 管道。我可以让它在命令上启动管道,使用子进程,但它绑定(bind)了脚本,因此它不再接收命令。我需要改变什么来防止这种情况发生?

我在用着:

    pipeline= "ffmpeg -f video4linux2 -video_size 640x480 -framerate 15 -input_format yuyv422 -i /dev/video7 -f alsa  -i hw:0,0 -map 0:0 -map 1:0  -b:v 120k -bufsize 120k -vcodec libx264 -preset ultrafast  -acodec aac -strict -2  -f flv -metadata streamName=myStream tcp://192.168.1.20:6666 "

p = subprocess.Popen(pipeline, shell=True,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = p.communicate()[0]

最佳答案

您的代码的问题是 p.communicate()读取数据直到到达文件结尾。我的想法是使用 multiprocessing模块。

例子:

import subprocess
import multiprocessing

def ffmpeg():
pipeline = 'ffmpeg ...'
p = subprocess.Popen(pipeline, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
out = p.communicate()[0]

proc = multiprocessing.Process(target=ffmpeg)

这基本上将您的代码移动到函数 ffmpeg并创建一个新进程来运行它。

您现在可以使用以下命令开始该过程: proc.start()并使用 proc.terminate() 终止它.

有关详细信息,请查看 multiprocessing 的文档.

编辑:
multiprocessing可能有点矫枉过正。见 J.F. 塞巴斯蒂安的评论。

关于python - 在 python 中启动和停止 ffmpeg 管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26024552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com