无法从Python执行FFmpeg命令,命令行中可正常运行
解决Python中执行FFmpeg命令因管道符|报错的问题
问题根源:Windows cmd中|是管道命令的特殊符号,用os.system传递命令时,cmd会将adelay=3000|2000里的|解析为管道,把2000当成独立命令执行,导致报错。
以下是两种可行的解决方法:
方法一:使用subprocess模块(推荐)
用subprocess.run并将命令拆分为参数列表,避免shell解析特殊字符,这也是Python官方推荐替代os.system的方式:
import subprocess subprocess.run([ 'ffmpeg', '-i', 'video.mp4', '-i', 'sound.mp3', '-c:v', 'copy', '-filter_complex', '[1:a] adelay=3000|2000 [delayed]; [0:a] [delayed] amix [out]', '-map', '0:v', '-map', '[out]', 'video2.mp4' ], check=True)
方法二:转义管道符后使用os.system
如果坚持用os.system,需要用Windows cmd的转义符^处理|,同时用双引号包裹-filter_complex的参数内容:
import os os.system('cmd /c ffmpeg -i video.mp4 -i sound.mp3 -c:v copy -filter_complex "[1:a] adelay=3000^|2000 [delayed]; [0:a] [delayed] amix [out]" -map 0:v -map "[out]" video2.mp4')
内容的提问来源于stack exchange,提问作者StudentProgrammer
相关产品推荐
相关产品推荐

