我正在尝试使用 ffmpeg 批量下载多个视频。站点地址和保存名称的列表按以下格式存储在文本文件中。
"site",filename.mp4
我的代码正在循环遍历文件并尝试逐行下载。
#!/bin/bash
while IFS=, read dl nm
do
echo $dl
echo $nm
/usr/bin/ffmpeg -loglevel error -protocol_whitelist file,http,https,tcp,tls,crypto -i $dl -c copy $nm
done < $1
预期的输出是在每个循环上 ffmpeg 将下载每行指示的文件,然后继续循环的下一个迭代。
相反,ffmpeg 输出错误消息
"site": No such file or directory
当我直接在终端中运行相同的命令并将站点名称和保存名称直接插入到命令中时,它可以正常工作。
查看似乎与此相关的其他帖子,我尝试附加
< /dev/null
到 ffmpeg 调用结束,但它仍然具有相同的效果。
答案1
您的脚本存在一些问题,因为您在文件中使用带有下载 URL/位置的引号。
也就是说,当您按照自己的方式拥有文件时, $nm`$dl
仍然"site" and
如您所期望的那样。
为此,您需要更改文件,以便站点下载位置没有引号,然后需要$dl
在脚本中设置引号。
所以你最终会得到这样的结果:
输入文件列表:
site,foobar.baz
脚本:
#!/bin/bash
while IFS=, read dl nm
do
echo $dl
echo $nm
/usr/bin/ffmpeg -loglevel error -protocol_whitelist file,http,https,tcp,tls,crypto -i "$dl" -c copy $nm
done < $1
如果您的文件名中包含空格,您可能还想用$nm
引号引起来,但这取决于您的决定。