我可以使用以下命令将 mp4 转换为 wavffmpeg
, 通过做这个:
ffmpeg -vn test.wav -i test.mp4
我也可以使用subprocess
做同样的事情,只要我的输入和输出是文件路径。
但如果我想用怎么办ffmpeg
直接在字节或“类似文件”的对象上io.BytesIO()
?
这是一个尝试:
import subprocess
from io import BytesIO
b = BytesIO()
with open('test.mp4', 'rb') as stream:
command = ['ffmpeg', '-i']
proc = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=b)
proc.communicate(input=stream.read())
proc.wait()
proc.stdin.close()
proc.stdout.close()
给我:
---------------------------------------------------------------------------
UnsupportedOperation Traceback (most recent call last)
<ipython-input-84-0ddce839ebc9> in <module>
5 with open('test.mp4', 'rb') as stream:
6 command = ['ffmpeg', '-i']
----> 7 proc = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=b)
...
1486 # Assuming file-like object
-> 1487 c2pwrite = stdout.fileno()
1488
1489 if stderr is None:
UnsupportedOperation: fileno
当然,我可以使用临时文件来汇集字节,但我希望能够避免写入磁盘(因为这一步只是转换管道中的一个链接)。