gpt4 book ai didi

python - 子进程未创建 ffmpeg 命令的输出文件

转载 作者:行者123 更新时间:2023-12-04 22:52:48 27 4
gpt4 key购买 nike

我正在尝试运行一个 ffmpeg 命令来记录我的屏幕并在 python 中创建一个记录的 .mp4 文件。该命令在我的 shell 中运行时有效,但在我使用子进程在 Python 脚本中运行时无效。
问题是使用子进程运行它时,不会创建 output.mp4 文件。
这是命令:timeout 10 ffmpeg -video_size 1920x1080 -framerate 60 -f x11grab -i :0.0+0,0 -f alsa -ac 2 -i pulse -acodec aac -strict experimental output.mp4这是python代码:

os.chdir('/home/user/Desktop/myProject/')

subprocess.run('timeout 5 ffmpeg -video_size 1920x1080 -framerate 60 -f x11grab -i :0.0+0,0 -f alsa -ac 2 -i pulse -acodec aac -strict experimental out.mp4')
是否需要添加额外的配置以便子进程可以写入输出文件?

最佳答案

subprocess.run返回 CompletedProcess目的。您应该将其分配给一个变量,然后打印出命令的所有输出和错误(因为我认为,ffmpeg 给出了一个错误并且根本不尝试写入文件,但您没有看到)。
此外,您必须设置关键字参数 shell为 True,或使用 shlex.split , 否则命令将无法正确格式化。 shlex.split是首选方式,您可以阅读 here :

Providing a sequence of arguments is generally preferred, as it allowsthe module to take care of any required escaping and quoting ofarguments (e.g. to permit spaces in file names).


而且您不想手动将字符串转换为参数列表!
并且无需从外部停止 ffmpeg(您的文件可能无法写入的另一个原因)。使用内置命令行 option -t 为了那个原因。
import shlex
import subprocess
import os

os.chdir('/home/user/Desktop/myProject/')

p = subprocess.run(shlex.split("ffmpeg -video_size 1920x1080 -framerate 60 -f x11grab -i :0.0+0,0 -f alsa -ac 2 -i pulse -acodec aac -strict experimental -t 00:00:05 out.mp4"), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
print(p.stdout)

关于python - 子进程未创建 ffmpeg 命令的输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66075915/

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