加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 通过目录递归并转换音乐

发布时间:2020-12-16 01:47:17 所属栏目:安全 来源:网络整理
导读:我正在编写一个快速脚本来浏览大量音乐,将所有m4as转换为mp3.他们中的大多数已经是mp3,但我希望所有这些都是mp3.这是我到目前为止所拥有的: for f in *.m4a; do ffmpeg -i "$f" -acodec libmp3lame -ab 320 "${f%.m4a}.mp3"; done 它是否在一个层面上,如何
我正在编写一个快速脚本来浏览大量音乐,将所有m4as转换为mp3.他们中的大多数已经是mp3,但我希望所有这些都是mp3.这是我到目前为止所拥有的:

for f in *.m4a; do ffmpeg -i "$f" -acodec libmp3lame -ab 320 "${f%.m4a}.mp3"; done

它是否在一个层面上,如何将此ffmpeg集成到find命令中以递归方式执行?

谢谢您的帮助!

解决方法

如果你想在子文件夹中循环,你可以使用globstar shell可选行为,请参见 Pattern Matching section of the reference manual和 Shopt Builtin section of the reference manual:

shopt -s globstar
for f in **/*.m4a; do ffmpeg -i "$f" -acodec libmp3lame -ab 320 "${f%.m4a}.mp3"; done

使用发现它有点棘手,因为你使用的是Shell Parameter Expansion.对于名字中带有空格或其他有趣符号的文件,这种可能性是100%安全的:

find . -name '*.m4a' -type f -exec bash -c 'ffmpeg -i "$0" -acodec libmp3lame -ab 320 "${0%.m4a}.mp3"' {} ;

如果你有大量的文件,第二种可能性可能会更快,因为已知bash globbing对于大量文件来说非常慢.

在find的-exec语句中,我正在使用bash -c’…’.在这种情况下,在要执行的字符串之后给出的每个参数都将被设置为位置参数,从0开始索引,因此代码中出现的$0

ffmpeg -i "$0" -acodec libmp3lame -ab 320 "${0%.m4a}.mp3"

希望这可以帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读