【问题标题】:Getting the right file extension after converting multiple files with FFMPEG使用 FFMPEG 转换多个文件后获取正确的文件扩展名
【发布时间】:2019-10-02 18:27:42
【问题描述】:

我有一个将*.flac 转换为*.mp3 的脚本。转换按原样进行,但文件始终以扩展名 *.flac.mp3 而不是 *.mp3 结尾。

find . -name "*.flac" -exec ffmpeg -i {} -vsync 0 -codec:a libmp3lame -qscale:a 0 -map_metadata 0 -id3v2_version 3 {}.mp3 \;

我已经尝试将${i%.*}.mp3 放在输出字段中,但这只会导致创建一个名为.mp3 的文件,扩展名之前根本没有任何内容。

我做错了什么?

【问题讨论】:

  • 您使用的程序是find 而不是bash。你不能告诉find去解释bash的参数扩展。
  • @ceving bash 标签仍然相关,因为解决方案可能包括调用 shell。
  • 另外,macos 标签是相关的,因为它暗示了 find 的版本。

标签: bash macos find


【解决方案1】:

{}find 找到的完整文件名,包括.flac 扩展名。要对其进行操作,您可以在-exec 中调用一个shell:

find . -name '*.flac' \
    -exec bash -c '
        for f; do
            ffmpeg -i "$f" -vsync 0 -codec:a libmp3lame -qscale:a 0 \
                -map_metadata 0 -id3v2_version 3 "${f%.flac}".mp3
        done
    ' _ {} +

这使用-exec <cmd> {} + 语法运行<cmd> 一次1 并附加所有文件;命令本身的形式是

bash -c 'for f; do <something>; done' _

for f 循环遍历作为参数提供的所有文件; _ 是一个虚拟参数,在bash -c 中用作$0


1更准确地说,“在尊重命令行长度限制的情况下,尽可能少用几次”。

【讨论】:

  • 非常感谢!这正是我一直试图做的。我不认为我自己会弄明白,但是当我看到你的答案时我明白了。
猜你喜欢
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
相关资源
最近更新 更多