【问题标题】:appending a string constant selectively within a while loop in bash在bash的while循环中选择性地附加一个字符串常量
【发布时间】: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-dlffmpeg 等?并显示您的实际错误;不要只是说您“遇到错误”,而是要详细提供。回复:构建复制器,请参阅stackoverflow.com/help/mcve
  • (顺便说一句:bash -x yourscript 是你的朋友——观察实际运行的命令将帮助你找出不符合预期的第一个地方)。

标签: bash ffmpeg


【解决方案1】:

所以在使用 cmets 的建议进行了一些实验后,我得出了这个结论。

#!/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

此修复的内容是在文件名中保留 /,并消除解析器错误。

【讨论】:

  • 您可以将SUBSTRING=$(echo "$p"| cut -c33-50) 行替换为SUBSTRING="${p:32:18}" 以避免创建执行命令的子shell。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-15
  • 2013-07-06
  • 2015-12-14
  • 2017-01-20
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多