在Bash中通过变量传递FFmpeg多选项报错,如何解决?
解决FFmpeg通过变量传递多选项的报错问题
你的问题出在shell对参数的解析逻辑上:当你用"$FFMPEG_ARGS"包裹变量时,shell会把整个字符串当作单个完整参数传给ffmpeg,导致ffmpeg把-nostdin -hide_banner -nostats -loglevel error识别成一个不存在的长选项,自然报错。
推荐两种可靠的解决方法:
方法1:使用Bash数组(最安全)
用数组存储每个独立的选项,能完美处理带特殊字符的参数:
# 用数组定义多个选项,每个元素是一个独立参数 FFMPEG_ARGS=(-nostdin -hide_banner -nostats -loglevel error) # 用"${数组名[@]}"展开,每个元素会被当作单独参数传递 ffmpeg "${FFMPEG_ARGS[@]}" -y -i "$SOURCE" "$OUTPUT"
方法2:去掉变量的双引号(仅适用于无特殊字符的场景)
如果你的选项里没有空格、引号等特殊字符,可以直接去掉变量的双引号,让shell自动拆分参数:
FFMPEG_ARGS="-nostdin -hide_banner -nostats -loglevel error" # 不包裹双引号,shell会按空格拆分参数 ffmpeg $FFMPEG_ARGS -y -i "$SOURCE" "$OUTPUT"
⚠️ 注意:这种方式有局限性,如果参数包含空格或特殊字符(比如带空格的文件名),会导致参数拆分错误,因此优先推荐数组方案。
内容的提问来源于stack exchange,提问作者theprof86
相关产品推荐
相关产品推荐

