ffmpeg -i 标志的不一致行为

Inconsistent behaviour of ffmpeg -i flag

我正在尝试编写一个 Bash 脚本,该脚本将从 youtube 下载音轨并将其转换为 Apple 铃声格式,即 .m4r。我使用的工具是 youtube-dlffmpeg。前者似乎工作正常,但我对后者有一个奇怪的问题。当我尝试以参数方式传递文件名时,shell 打印找不到该文件或目录。

我对这两个命令使用相同的方法来解包用户输入(或我的默认值),但它似乎只适用于 youtube-dl

无效示例并打印上面的文本。显然,所有文件实际上都在那里并且可以访问

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

所以,我尝试用 '' 字符串,$(command) 语法来做,但都失败了。我只找到了一种使其工作的方法,即对 路径 的值进行硬编码,但这违背了我脚本的全部目的。

youtube-dl -i --extract-audio --audio-format m4a -o $filepath_interim  --audio-quality 0 $video_link
ffmpeg -i ~/Downloads/ringtone.m4a -acodec copy -f ipod -ss $offset  -t $length ~/Downloads/ringtone.m4r

我想弄清楚为什么会一直发生这种情况,无论它是特定于 ffmpeg 的,还是我只是缺少有关 $ 名称展开的一些知识。

最小工作示例。 运行 与 bash 或打包在脚本和 运行 中。如果您到 bash 的路径不同,请更改 shebang:

#!/usr/local/bin/bash
# initialise
filepath_interim="~/Downloads/ringtone.m4a"
filepath_out="~/Downloads/ringtone.m4r"
video_link="https://www.youtube.com/watch?v=dQw4w9WgXcQ"
offset=0
length=30

# main part
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

~更改为$HOME

有关详细信息,请参阅 ShellCheck and SC2088: Tilde (~) does not expand in quotes, use $HOME