在bash

时间:2017-01-28 20:39:58

标签: bash ffmpeg

我有一个名为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'

1 个答案:

答案 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

这个修复了保持/超出文件名,并消除解析器错误。