You need to enable JavaScript to run this app. Bash脚本中ffmpeg -i参数传入变量路径无法识别文件的异常问题
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本中ffmpeg -i参数传入变量路径无法识别文件的异常问题

问题成因

这个问题和ffmpeg本身特性无关,是Bash的波浪号展开规则导致的:

  • 波浪号~只有在未被引号包裹、或者处于字符串开头且未被引号包裹时,才会被Bash自动展开为当前用户的家目录绝对路径
  • 你的代码里把~写在了双引号内部赋值给变量,Bash不会做展开,实际传递给ffmpeg的是字面量~/Downloads/ringtone.m4a,而非你期望的家目录下的真实路径
  • youtube-dl内置了对~路径的额外解析逻辑,所以即使收到带~的字面路径也能正常定位文件,但ffmpeg没有做这层兼容,只会按字面路径查找文件,因此触发找不到文件的报错
解决方案

1. 修正路径变量的写法

两种可选方案,优先推荐第二种兼容性更强:

  • 方案1:变量赋值时不要将~包裹在引号内
filepath_interim=~/Downloads/ringtone.m4a
filepath_out=~/Downloads/ringtone.m4r
  • 方案2:用$HOME代替~,$HOME在双引号内也可以正常展开
filepath_interim="$HOME/Downloads/ringtone.m4a"
filepath_out="$HOME/Downloads/ringtone.m4r"

2. 优化命令的变量引用

给所有变量包裹双引号,避免路径/参数包含空格、特殊字符时被Bash错误拆分:

youtube-dl -i --extract-audio --audio-format m4a -o "$filepath_interim" --audio-quality 0 "$video_link"
ffmpeg -i "$filepath_interim" -acodec copy -f ipod -ss "$offset" -t "$length" "$filepath_out"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 04:57:06