我正在嘗試將文件或麥克風流轉換為 22050 采樣率并將速度更改為雙倍。我可以使用帶有以下代碼的終端來做到這一點;#ffmpeg -i test.mp3 -af asetrate=44100*0.5,aresample=44100,atempo=2 output.mp3但我不能用 python 子進程運行這個終端代碼。我嘗試了很多事情,但每次都失敗了。一般來說,我正在采用請求的輸出格式“asetrate”或“aresample”或“atempo”不適合輸出格式錯誤。無效的論點。我如何運行它并使用管道獲取流?song = subprocess.Popen(["ffmpeg.exe", "-i", sys.argv[1], "-f", "asetrate", "22050", "wav", "pipe:1"],
stdout=subprocess.PIPE)
2 回答

臨摹微笑
TA貢獻1982條經驗 獲得超2個贊
你的兩個命令是不同的。嘗試:
song = subprocess.Popen(["ffmpeg", "-i", sys.argv[1], "-af", "asetrate=22050,aresample=44100,atempo=2", "-f", "wav", "pipe:1"],
-af
用于音頻過濾器。-f
是手動設置復用器/輸出格式

猛跑小豬
TA貢獻1858條經驗 獲得超8個贊
ffmpeg將所提供的任何內容解釋-af為單個參數,然后它將在內部解析為單獨的參數,因此在傳遞之前將它們分開Popen不會達到同樣的效果。
使用終端的初始示例應使用Popenas創建
subprocess.Popen([
'ffmpeg', '-i', 'test.mp3', '-af', 'asetrate=44100*0.5,aresample=44100,atempo=2',
'output.mp3',
])
因此,對于您使用管道的實際示例,請嘗試以下操作:
song = subprocess.Popen(
["ffmpeg.exe", "-i", sys.argv[1], "-f", "asetrate=22050,wav", "pipe:1"],
stdout=subprocess.PIPE
)
然后,您將需要調用song.communicate()以獲取由ffmpeg.exe.
添加回答
舉報
0/150
提交
取消