首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在bash的while循环中有选择地追加字符串常量

在bash的while循环中有选择地追加字符串常量
EN

Stack Overflow用户
提问于 2017-01-29 04:39:58
回答 1查看 111关注 0票数 0

我有一个名为automateutube的脚本,我在VIM中编辑,并在终端中使用sh ./automateutube.sh执行。这个脚本从名为songs.txt的文件中提取youtube链接,并从youtube下载视频,然后提取音频。

songs.txt文件如下所示

代码语言:javascript
复制
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

它只是一堆链接,每行一个。

脚本如下所示

代码语言:javascript
复制
#!/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"应该是以链接的形式存在的。

现在,我已经尝试在

代码语言:javascript
复制
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个参数

EN

回答 1

Stack Overflow用户

发布于 2017-01-29 08:56:22

因此,在使用评论中的建议进行了一些实验之后,我得出了这个结论,它是有效的。

代码语言:javascript
复制
#!/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

这样做修复的是将/保留在文件名之外,并消除解析器错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41914600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档