如何在python中运行ffmpeg命令;vscode



我想运行这个命令

for /R %f IN (/*.mp4) DO ffmpeg -i "%f" -f wav -bitexact -acodec pcm_s16le -ar 22050 -ac 1 %~nf.wav

在这个脚本中,如下所示:

import os
from datetime import date
today = date.today()
today = today.strftime('%m-%d-%Y')
dir_name = f"C:/Users/lucan/Automatically/{today}/"
def extract(user):
test = os.listdir(dir_name)
command = "for /R %f IN (/*.mp4) DO ffmpeg -i "%f" -f wav -bitexact -acodec pcm_s16le -ar 22050 -ac 1 %~nf.wav"
os.system(command)
for item in test:
if item.endswith(".wav"):
os.remove(os.path.join(dir_name, item))

extract("businessbarista")

当我这样做时,这是我得到的错误消息:

命令=";对于/R%f IN(/*.mp4(DO ffmpeg-i"%f"-f wav-位精确-acodec pcm_s16le-ar2250-ac1%~nf.wav";TypeError:必须是实数,而不是str

命令在命令提示符下运行良好,但在powershell中运行不好。你能帮我弄清楚出了什么问题吗?

为什么要混合Python&批处理脚本?

如果我理解循环语法的批处理脚本,那么以下内容在Python中应该是等效的:

from glob import glob
import subprocess as sp
from os import path
# FFmpeg command (missing input & output)
cmd = ['ffmpeg','-i',None,'-f','wav','-bitexact','-acodec','pcm_s16le','-ar','22050','-ac','1']
# likely equivalent to 'for /R %f IN (/*.mp4) DO '
for input in glob("**/*.mp4",recursive=True): 
cmd[3] = input
output = path.splitext(input)[0] + '.wav'
sp.run([*cmd,output])

此片段扫描当前文件夹及其所有子文件夹,列出其中的所有mp4文件并返回相对路径。例如CCD_ 1。然后os.path.splitext()删除文件扩展名以形成输出文件路径。

您在" "中有" ",这会产生问题。

它将其视为两个字符串"first" %f "second"

您必须用' '替换一对" ",就像' " " '" ' ' "一样。

或者你必须像使用mp4video.mp41 一样使用

command = 'for /R %f IN (/*.mp4) DO ffmpeg -i "%f" -f wav -bitexact -acodec pcm_s16le -ar 22050 -ac 1 %~nf.wav'

相关内容

  • 没有找到相关文章

最新更新