我希望以下循环遍历m4a文件和webm文件。目前,我使用了两个不同的循环,另一个循环只是替换了该循环中的所有m4a。ffmpeg输出的文件也应该删除m4a扩展名(如果它是m4a文件)和webm扩展名(如果它是webm文件)。并将其替换为mp3。(与m4a一样)。我不知道该怎么做,我认为它与正则表达式有关,但是我不知道如何真正使用它们,也没有找到一个好的教程/文档,所以如果您有的话,也请链接它。
for i in *.m4a ; do echo "Converting file $converted / $numfiles : $i" ffmpeg -hide_banner -loglevel fatal -i "$i" "./mp3/${i/.m4a}.mp3" mv "$i" ./done converted=$((converted + 1)) done
mklement0.. 5
请尝试以下操作:
for i in *.m4a *.webm; do echo "Converting file $converted / $numfiles : $i" ffmpeg -hide_banner -loglevel fatal -i "$i" "./mp3/${i%.*}.mp3" mv "$i" ./done converted=$((converted + 1)) done
您可以使用for
具有多模式(水珠),如下所示:*.m4a *.webm
将扩大到令牌的一个列表for
遍历。
您可能需要shopt -s nullglob
在循环之前添加,这样在没有匹配文件的情况下,它不会与未展开的模式一起输入。
${i%.*}.mp3
使用参数扩展 -专门%
用于最短后缀的删除-从文件名中删除所有现有扩展名,然后追加.mp3
。
请注意,以上技术使用的是模式,而不是正则表达式。虽然关系密切,但存在根本差异;模式更简单,但局限性更大;参见模式匹配。
PS:您可以简化converted=$((converted + 1))
为(( ++converted ))
。
请尝试以下操作:
for i in *.m4a *.webm; do echo "Converting file $converted / $numfiles : $i" ffmpeg -hide_banner -loglevel fatal -i "$i" "./mp3/${i%.*}.mp3" mv "$i" ./done converted=$((converted + 1)) done
您可以使用for
具有多模式(水珠),如下所示:*.m4a *.webm
将扩大到令牌的一个列表for
遍历。
您可能需要shopt -s nullglob
在循环之前添加,这样在没有匹配文件的情况下,它不会与未展开的模式一起输入。
${i%.*}.mp3
使用参数扩展 -专门%
用于最短后缀的删除-从文件名中删除所有现有扩展名,然后追加.mp3
。
请注意,以上技术使用的是模式,而不是正则表达式。虽然关系密切,但存在根本差异;模式更简单,但局限性更大;参见模式匹配。
PS:您可以简化converted=$((converted + 1))
为(( ++converted ))
。