到目前为止,这是我的代码。
#!/bin/bash
#James Kenaley
#Flv to Mp3 directory converter
find /home/downloads -iname "*.flv" | \
while read I;
do
`ffmpeg -i ${I} -acodec copy ${I/%.flv/.mp3}`
echo "$I has been converted"
done
但是它在flv文件的名称中拾取了空格并抛出一个错误,说它不在目录中。如何使它使用整个文件名而不是空格前的第一个单词?
答案 0 :(得分:2)
试试这个:
`ffmpeg -i "${I}" -acodec copy "${I/%.flv/.mp3}"`
答案 1 :(得分:2)
ffmpeg在分叉线程中运行,因此简单的批处理可以提供奇怪的行为。如果您在建议的批处理循环中运行ffmpeg,您应该控制命令和命令错误输出,以便它不会干扰。
如果你运行这个并且正在正确地转换所有其他项目,但是其余的错误,请尝试在循环中使用此ffmpeg调用:
ffmpeg -y -i "${I}" -acodec mp3 -ar 22050 -f wav "${I/%.3gp/.mp3}" > /dev/null & 2> /dev/null
注意> dev / null& 2 - ; / dev / null结尾。这会将命令输出和命令错误输出管理为遗忘。然后脚本工作。
还应该注意,程序输出看起来很奇怪,多个文件同时压缩。结果是正确的。
[编辑:注意 - 我有,这使得FFMPEG覆盖现有的MP3文件]
答案 2 :(得分:0)
使用引号。并且不要使用反引号。
ffmpeg -i "${I}" -acodec copy "${I%.flv}".mp3
答案 3 :(得分:0)
调用短脚本,在一次传递中进行转换和重命名:
adhoc.sh:
$file="$1"
ffmpeg -i "$file" -acodec copy "${file/%.flv/.mp3}"
称之为:
find /home/downloads -iname "*.flv" -exec ./adhoc.sh {} ";" -ls
或转换:
find /home/downloads -iname "*.flv" -exec ffmpeg -i {} -acodec copy {}.mp3 ";" -ls
稍后重命名:
rename 's/.flv.mp3/.mp3/' /home/downloads/*.flv.mp3
Rename是可能需要安装的perl包的一部分。