我有一个名为automateutube的脚本,我在VIM中编辑,并在终端中使用sh ./automateutube.sh执行。这个脚本从名为songs.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“,但实际上它采用的是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个参数
发布于 2017-01-29 08:56:22
因此,在使用评论中的建议进行了一些实验之后,我得出了这个结论,它是有效的。
#!/bin/sh
while read -r 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"
SUBSTRING=$(echo "$p"| cut -c33-50)
ffmpeg -i "$x" -acodec libmp3lame -ac 2 -ab 128k -vn -y "$SUBSTRING.mp3" </dev/null
rm "$x"
done <songs.txt这样做修复的是将/保留在文件名之外,并消除解析器错误。
https://stackoverflow.com/questions/41914600
复制相似问题