Win10下Python3.9带参数启动VLC执行音视频转码失败求助
Python调用VLC执行转码失败的解决方案
错误原因
两种写法的核心问题都是subprocess参数传递规则不符合要求:
- 方法1错误点:
- 将
-I、dummy、输入文件名三个独立参数拼接为同一个字符串传入,VLC无法识别该格式的参数,直接闪退。 - VLC路径没有使用raw字符串,Python会将路径中的反斜杠识别为转义字符,导致路径解析失败。
--sout参数手动添加了多余的双引号,列表传参时subprocess会自动处理参数中的空格和特殊字符,手动加引号会导致VLC收到的参数带额外引号,解析失败。
- 将
- 方法2错误点:
- 将除VLC路径外的所有参数拼接为一个字符串传入,VLC收到完全不符合格式的超长参数,无法解析导致卡住无响应。
正确实现代码
import subprocess as objSubProcess strFileName = "1.m4a" strNewFileName = "1.mp3" # 路径前加r标记为raw字符串,避免反斜杠被识别为转义字符 g_strVLCPath = r"C:\Program Files\VideoLAN\VLC\vlc.exe" # 每个独立参数单独作为列表元素,禁止拼接多个参数到同一字符串 cmd_list = [ g_strVLCPath, "-I", "dummy", strFileName, # 不需要手动加引号,f字符串中需要用双大括号转义原参数中的大括号 f"--sout=#transcode{{vcodec=none,acodec=mp3,ab=128,channels=2,samplerate=8000,scodec=none}}:std{{access=file{{no-overwrite}},mux=mp3,dst={strNewFileName}}}", "vlc://quit" ] # 执行命令,添加capture_output参数可捕获VLC输出用于排查错误 run_result = objSubProcess.run(cmd_list, capture_output=True, text=True) # 如需排查问题可取消注释以下两行,打印VLC的输出信息 # print("VLC标准输出:", run_result.stdout) # print("VLC错误输出:", run_result.stderr)
补充说明
如果你的输入/输出文件路径包含空格,不需要手动加引号,直接将完整路径作为列表的独立元素传入即可,subprocess会自动处理空格问题。
内容的提问来源于stack exchange,提问作者Sandeep S D
相关产品推荐
相关产品推荐

