【发布时间】:2021-05-18 21:56:47
【问题描述】:
我正在尝试编写一个 Bash 脚本,该脚本将从 youtube 下载音轨并将其转换为 Apple 铃声格式,即 .m4r。我使用的工具是youtube-dl 和ffmpeg。前者似乎工作正常,但我对后者有一个奇怪的问题。当我尝试以参数方式传递文件名时,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
【问题讨论】:
-
显示完整的脚本。
-
@llogan 添加了完整的可重现脚本
-
stackoverflow.com/questions/39403187/… 解释如何使用标准输出,以便您可以从 youtube-dl 管道传输到 ffmpeg
标签: bash audio ffmpeg youtube-dl