Python调用FFmpeg处理含点文件名时提示文件不存在问题求助
解决FFmpeg处理带空格路径时提示“No such file or directory”的问题
你遇到的问题根源是路径包含空格(如“27. Air Space”),且代码中对路径的引号处理错误,导致shell解析命令时把空格后的部分当成独立参数,FFmpeg无法识别完整的文件路径。原代码中手动给路径添加两层双引号的方式会干扰shell的参数解析,这是错误的。
方法一:修正os.system的引号使用
直接在FFmpeg命令中用双引号包裹路径参数,确保shell将整个路径视为一个整体:
import os rootdir = "你的根目录路径" for folder, dirs, files in os.walk(rootdir): for file in files: fullpath = os.path.join(folder, file) # 用os.path.splitext准确替换文件扩展名 actual_filename = os.path.splitext(fullpath)[0] + ".wav" # 用双引号包裹带空格的路径参数 os.system('ffmpeg -i "{}" -acodec pcm_s16le -ar 16000 "{}"'.format(fullpath, actual_filename))
方法二:使用subprocess.run(推荐)
os.system依赖shell解析命令,容易出现参数解析问题。推荐使用subprocess.run,直接传递参数列表,无需手动处理引号,更安全可靠:
import os import subprocess rootdir = "你的根目录路径" for folder, dirs, files in os.walk(rootdir): for file in files: fullpath = os.path.join(folder, file) actual_filename = os.path.splitext(fullpath)[0] + ".wav" # 直接传递参数列表,每个元素作为独立参数 subprocess.run([ 'ffmpeg', '-i', fullpath, '-acodec', 'pcm_s16le', '-ar', '16000', actual_filename ])
额外优化说明
原代码中用replace(".mp4", "")替换扩展名存在风险(比如文件名中包含多个.mp4子串),改用os.path.splitext(fullpath)[0]可以准确获取不带扩展名的文件名,再拼接.wav更稳妥。
内容的提问来源于stack exchange,提问作者Mahdi
相关产品推荐
相关产品推荐

