我有一个名为automateutube
的脚本,我在VIM中编辑并使用{{1}}在终端中执行此脚本从一个名为songs.txt的文件中提取youtube链接并从youtube下载视频然后提取音频。
songs.txt文件看起来像这样
sh ./automateutube.sh
这只是一堆链接,每行一个。
脚本看起来像这样
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"
应该是格式为“filename.mp3”但是因为它是一个youtube链接的值,没有附加“.mp3”。
这适用于第一行
"$p"
因为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"
但我仍然收到错误。有什么想法吗?
解析错误,预计至少有3个参数,字符串'om / watch中只给出1个?v = sOAHOxbMOJY'
答案 0 :(得分:0)
因此,在使用评论中的建议进行一些实验之后,我来到了这个,这是有效的。
#!/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
这个修复了保持/超出文件名,并消除解析器错误。