使用 FFmpeg 将所有 *flac 转换为 *.mp3 的 Bash 脚本?

Kev*_*ong 35 bash ffmpeg shell-script

我想将特定文件夹中的所有 *.flac 转换为 *.mp3。

这是我尝试过的,但不起作用:

# change to the home directory
cd ~/music
# convert all *.flac files
ffmpeg -i *.flac -acodec libmp3lame *.mp3
# (optional: check whether there are any errors printed on the terminal)
sleep 60
Run Code Online (Sandbox Code Playgroud)

如何达到我的目标?

Lew*_*ond 62

一个简单的 1 衬里解决方案: find -name "*.flac" -exec ffmpeg -i {} -acodec libmp3lame -ab 128k {}.mp3 \;

http://lewisdiamond.blogspot.ca/2012/01/converting-flac-to-mp3.html

请注意,这将在给定目录中递归应用。也就是说,如果你从你的 Music 文件夹运行它,它会转换子文件夹中的所有 flas 并在它旁边生成一个 .mp3。您也可以在没有 ffmpeg 的情况下直接使用 flac 和 lame(即读取 w/flac,管道到 lame,输出到文件 .mp3),如链接中所示。

  • 这个命令很棒 - 但是;您最终会得到名为 *.flac.mp3 的文件。使用你的命令,我想出了这个...... `find -name "*.flac" -exec bash -c 'ffmpeg -i "{}" -y -acodec libmp3lame -ab 128k "${0/.flac} .mp3"' {} \;` (21认同)
  • 是的,正如我在博客中所解释的,我喜欢添加 .mp3 的这一方面,因为它告诉我这些文件来自无损源,应该可以在我的硬盘驱动器上的某个位置找到。 (3认同)
  • 是的你可以。您还可以使用 ls 管道传输到 xargs 或 for 循环。我只是假设(可能是错误的)递归搜索更符合 OP 的需要(即更改我的音乐库中的所有 .flac)。 (2认同)

mkc*_*mkc 42

尝试这个:

for i in *.flac ; do 
    ffmpeg -i "$i" -acodec libmp3lame "$(basename "${i/.flac}")".mp3
    sleep 60
done
Run Code Online (Sandbox Code Playgroud)

  • 我通过将 `$(basename "${i/.flac}").mp3` 更改为 `"$(basename "${i/.flac}").mp3"`(在它周围加上引号)解决了空间问题 (6认同)

小智 8

如果文件名中有一些空格:

for a in *.flac; do
  f="${a[@]/%flac/mp3}"
  ffmpeg -i "$a" -qscale:a 0 "$f"
done
Run Code Online (Sandbox Code Playgroud)