You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本执行FFmpeg命令时参数转义问题求助

解决Bash脚本中FFmpeg subtitles参数的引号问题

方法1:使用参数数组(推荐)

这是最可靠的方式,能清晰定义每个命令参数,彻底避免引号嵌套导致的解析混乱:

# 定义参数数组,每个元素对应FFmpeg的一个参数
ffmpeg_cmd=(
  -y
  -i "video.mp4"
  -vf "subtitles=subtitles.srt:force_style='argument1,argument2,argument3'"
  "out.mp4"
)

# 执行命令,@符号确保数组元素作为独立参数传递
"${ffmpeg_cmd[@]}"

数组中-vf的参数整体用双引号包裹,内部force_style的单引号直接保留,Bash会将整个-vf的值作为单个完整参数传递给FFmpeg,不会额外添加或转义引号。

方法2:直接转义单引号

如果不想用数组,可以通过'\''的组合转义内部单引号(原理是临时关闭当前单引号、插入一个单引号、重新打开单引号):

ffmpeg -y -i video.mp4 -vf 'subtitles=subtitles.srt:force_style='\''argument1,argument2,argument3'\''' out.mp4

注意:开启set -x调试时,Bash会显示类似'subtitles=subtitles.srt:force_style='\''arguments'\'''的输出,这只是Bash的调试格式化显示,实际传递给FFmpeg的参数是正确的,不会包含那些转义符号。如果FFmpeg仍报错,需检查参数本身的格式,而非Bash的引号处理。

常见误区说明

  • 尽量避免用bash -c执行,除非你能正确传递所有参数(比如bash -c 'ffmpeg "$@"' _ "${ffmpeg_cmd[@]}"),但这会增加复杂度,不如直接用数组直观。
  • 不要直接拼接字符串作为命令,这种方式极易因特殊字符、空格等导致参数解析错误。

内容的提问来源于stack exchange,提问作者Michal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:52:10