gpt4 book ai didi

python - ffmpeg 结果到临时文件

转载 作者:行者123 更新时间:2023-12-04 23:05:35 24 4
gpt4 key购买 nike

我是 python 和 ffmpeg 的新手。我有以下问题要问。

如果我从命令行运行以下命令并且它可以工作。

ffmpeg -i  1.flv  temp_filename

如果我把它放在一个程序中
   temp_file_handle, temp_filename = tempfile.mkstemp('.flv')

command = "ffmpeg -i " + newvideo.location + " "+ temp_filename

out = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
res = out.communicate()

生成的视频没有写入 tem_filename。为什么?

最佳答案

您最好创建一个临时目录,以便 ffmpeg可以为您创建输出文件。它可能无法运行,因为 mkstemp创建文件,而不仅仅是文件名。

使用以下上下文管理器,它会在你完成后清理:

import os
import shutil
import tempfile
from contextlib import contextmanager

@contextmanager
def tempfilename(extension):
dir = tempfile.mkdtemp()
yield os.path.join(dir, 'tempoutput' + extension)
shutil.rmtree(dir)

此外,如果不使用 shell=True 来传递参数会容易得多。开关和命令作为列表。这是上面的上下文管理器,命令拆分为列表:
with tempfilename('.flv') as temp_filename:
command = ["ffmpeg", "-i", newvideo.location, temp_filename]
out = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

这样,shell 就不会误解 location 中的特殊字符。和 temp_filename论据。上下文管理器提供文件名而不创建它,但仍会自行清理。

关于python - ffmpeg 结果到临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12608755/

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