gpt4 book ai didi

python - FFMPEG 和 Pythons 子进程

转载 作者:太空狗 更新时间:2023-10-29 20:43:03 24 4
gpt4 key购买 nike

我正在尝试为 FFMPEG 编写一个图形用户界面。我正在使用 pythons 子进程为我想要的每个转换创建一个 ffmpeg 进程。这工作正常,但我也想要一种获取转换进度的方法,无论它是否失败等。我想我可以通过访问进程的标准输出来做到这一点:

调用 subprocess.Popen()

# Convert - Calls FFMPEG with current settings. (in a seperate
# thread.)
def convert(self):
# Check if options are valid
if self.input == "" or self.output == "":
return False

# Make the command string
ffmpegString = self.makeString()

# Try to open with these settings
try:
self.ffmpeg = subprocess.Popen(ffmpegString, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
except OSError:
self.error.append("OSError: ")
except ValueError:
self.error.append("ValueError: Couldn't call FFMPEG with these parameters")

# Convert process should be running now.

并读取stdout:

convert = Convert()
convert.input = "test.ogv"
convert.output = "test.mp4"
convert.output_size = (0, 0)

convert.convert()

while 1:
print convert.ffmpeg.stdout.readline()

这有效,但是 ffmpeg 的状态没有显示。我假设它与 ffmpeg 刷新它的方式有关。有没有办法访问它?

最佳答案

只需将 ,universal_newlines=True 添加到您的 subprocess.Popen 行。

cmd="ffmpeg -i in.mp4 -y out.avi"
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,universal_newlines=True)
for line in process.stdout:
print(line)

现在你在循环中得到了一行:

frame= 1900 fps=453 q=18.6 Lsize=    3473kB time=00:01:16.08 bitrate= 373.9kbits/s

使用 time= 值来确定进度百分比。

关于python - FFMPEG 和 Pythons 子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1455532/

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