【发布时间】:2017-01-29 08:57:26
【问题描述】:
我有一个名为 automateutube 的脚本,我在 VIM 中编辑它并在终端中使用 sh ./automateutube.sh 执行此脚本从名为 song.txt 的文件中提取 youtube 链接并从 youtube 下载视频,然后提取音频。
songs.txt 文件如下所示
https://www.youtube.com/watch?v=IxQOlZ3pqtI
https://www.youtube.com/watch?v=IxQOlZ3pqtI
https://www.youtube.com/watch?v=IxQOlZ3pqtI
https://www.youtube.com/watch?v=IxQOlZ3pqtI
只是一堆链接,每行一个。
脚本如下所示
#!/bin/bash
while read p; do
x=/tmp/.youtube-dl-$(date +%y.%m.%d_%H.%M.%S)-$RANDOM.flv
youtube-dl --audio-quality 160k --output=$x --format=18 "$p"
ffmpeg -i $x -acodec libmp3lame -ac 2 -ab 128k -vn -y "$p"
rm $x
done <songs.txt
现在第一部分执行。它下载视频并开始解包。
失败的是第二部分。 ffmpeg -i $x -acodec libmp3lame -ac 2 -ab 128k -vn -y "$p"
这是因为"$p" 应该采用“filename.mp3”格式但是因为它是 p 采用 youtube 链接的值,没有附加“.mp3”。
这适用于第一行
youtube-dl --audio-quality 160k --output=$x --format=18 "$p"
因为"$p" 应该是那里的链接形式。
现在我尝试在
中添加三行a="$.mp3"
b="$p"
c=$b$a
并制作ffmpeg -i $x -acodec libmp3lame -ac 2 -ab 128k -vn -y "$p"
转入ffmpeg -i $x -acodec libmp3lame -ac 2 -ab 128k -vn -y "$c"
但我仍然收到错误消息。有什么想法吗?
解析错误,至少需要 3 个参数,字符串 'om/watch?v=sOAHOxbMOJY' 中只给出了 1 个
【问题讨论】:
-
所以文件名应该是
https://www.youtube.com/watch?v=IxQOlZ3pqtI.mp3? -
另外你认为
$".mp3"会做什么? -
为什么还有美元呢?此外,您不能在文件名中使用正斜杠...可能也有助于发布您收到的错误消息。
-
...您能否构建一个复制器,让人们看到您的错误而不需要需要
youtube-dl、ffmpeg等?并显示您的实际错误;不要只是说您“遇到错误”,而是要详细提供。回复:构建复制器,请参阅stackoverflow.com/help/mcve -
(顺便说一句:
bash -x yourscript是你的朋友——观察实际运行的命令将帮助你找出不符合预期的第一个地方)。