tav*_*ndo 6 python terminal ffmpeg popen pandas
我正在使用 ffmpeg 的 extract_mvs 文件来生成一些文本信息。我会在终端中使用这样的命令:
/extract_mvs input.mp4 > output.txt
Run Code Online (Sandbox Code Playgroud)
我想将此命令与Popenpython 中的或其他子进程一起使用,以便将数据直接传递到 Pandas 数据帧而不是实际生成文本文件,而不是 output.txt。
这个想法是多次自动化,所以,我试图避免生成许多 .txt 文件,从而避免open()一个一个地生成它们。
我想到了这样的事情:
import subprocess
cmd = ['./extract_mvs', 'input.mp4']
a = subprocess.Popen(cmd, stdout=subprocess.PIPE)
df = pd.read_csv(a.communicate()[0], sep=',')
Run Code Online (Sandbox Code Playgroud)
但后来我收到一个错误: OSError: Expected file path name or file-like object, got <class 'bytes'> type
它可以固定和扩展以便直接从子进程读取到熊猫吗?
我找到了一种解决方法,使用Keith 的部分答案和此处找到的答案,将信息从字符串传递到 Pandas 数据帧。
最终的工作代码是:
import sys
import subprocess
import pandas as pd
cmd = ['./extract_mvs', 'input.mp4']
a = subprocess.Popen(cmd, stdout=subprocess.PIPE)
if sys.version_info[0] < 3:
from StringIO import StringIO
else:
from io import StringIO
b = StringIO(a.communicate()[0].decode('utf-8'))
df = pd.read_csv(b, sep=",")
Run Code Online (Sandbox Code Playgroud)