Bash脚本将目录中的所有flv文件转换为mp3

Bash脚本将目录中的所有flv文件转换为mp3,bash,ffmpeg,whitespace,Bash,Ffmpeg,Whitespace,这是到目前为止我的代码 #!/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文件名中拾取空格,并抛出一个错误,表示它不在目录

这是到目前为止我的代码

#!/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文件名中拾取空格,并抛出一个错误,表示它不在目录中。如何使其使用整个文件名,而不是空格前的第一个单词?

尝试以下方法:

`ffmpeg -i "${I}" -acodec copy  "${I/%.flv/.mp3}"`
试试这个:

`ffmpeg -i "${I}" -acodec copy  "${I/%.flv/.mp3}"`

使用引号。不要使用反引号

ffmpeg -i "${I}" -acodec copy  "${I%.flv}".mp3

使用引号。不要使用反引号

ffmpeg -i "${I}" -acodec copy  "${I%.flv}".mp3

调用短脚本,一次完成转换和重命名:

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

重命名是可能需要安装的perl包的一部分。

调用一个短脚本,一次完成转换和重命名:

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

重命名是可能需要安装的perl包的一部分。

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。这将命令输出和命令错误输出导入到遗忘中。然后脚本就开始工作了

我们还应该注意到,程序输出看起来奇怪地杂乱无章,多个文件同时压缩。结果将是正确的


[编辑:注意我的-y,这会使FFMPEG覆盖现有的MP3文件]

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。这将命令输出和命令错误输出导入到遗忘中。然后脚本就开始工作了

我们还应该注意到,程序输出看起来奇怪地杂乱无章,多个文件同时压缩。结果将是正确的


[编辑:注意我的-y,这会使FFMPEG覆盖现有的MP3文件]

它可以工作,但现在发生了一件更令人费解的事情…它会转换两个文件,然后停止。嗯。。。不知道。我会撒一些
echo
语句,看看到底是什么问题。它可以工作,但现在发生了一件更令人费解的事情…它转换两个文件,然后停止。嗯。。。不知道。我会撒一些
echo
语句,看看到底是什么问题。