【问题标题】:Inconsistent behaviour of ffmpeg -i flagffmpeg -i 标志的行为不一致
【发布时间】:2021-05-18 21:56:47
【问题描述】:

我正在尝试编写一个 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) 语法来做到这一点,但都失败了。我只找到了一种使它起作用的方法,即对 paths 的值进行硬编码,但这违背了我的脚本的全部目的。

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

【问题讨论】:

标签: bash audio ffmpeg youtube-dl


【解决方案1】:

~ 更改为 $HOME

请参阅ShellCheckSC2088: Tilde (~) does not expand in quotes, use $HOME 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多