如何批量修改文件扩展名

如何批量修改文件扩展名

我有一堆 mp3 文件,我想在有声读物的终端中将其扩展名更改为 m4bs。我想转换/更改每个 mp3 的名称。我很确定我只需更改文件扩展名就可以了。我在网上查了一下,有几种方法可以做到这一点,但我不太明白这些步骤。所以我在 Ubuntu 的终端中尝试了:

for i in *.mp3; do mv -- "$i" "ren-$i.m4b"; done

但这只是将 .m4b 附加到每个 .mp3 文件的末尾。

我也尝试过:

for file in /path/to; do mv $file $(basename -s mp3 $file)m4b ; done,

但我无法让它工作,因为我不确定这是哪个路径。如果我在 mp3 所在的文件夹中,那么“/path/to”应该指什么?我一直收到错误“mv:无法统计‘/mybook’:没有这样的文件或目录”

我还尝试使用 ffmpeg 进行转换:

ls | grep "mp3" | awk '{printf "file |%s|\n", $0}' | sed -e "s/|/\'/g" > list.txt \
  && ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp3 \
  && ffmpeg -i output.mp3 output.m4a \
  && mv output.m4a output.m4b

但这只是将所有 mp3 合并为一个文件并将其转换为 m4b,而我想将文件夹中的所有单独文件转换为 m4b。

是否有我可以使用的简单命令或脚本?

如果我在终端的当前文件夹中?谢谢

答案1

mp3 和 m4b 使用不同类型的编码,与文件扩展名无关。m4b 是基于 MPEG-4 容器格式的有声读物文件。它通常使用 AAC 编码进行压缩,与 .m4a 文件几乎相同。mp3 的全称是 MPEG-1 Audio Layer 3,是一种用于对数字音频(最常见的是音乐)进行编码的数据压缩格式。

要将多个文件从 .mp3 转换为 m4b,您需要安装 ffmpeg sudo apt install ffmpeg。运行以下命令:

for file in *.mp3; do name=`echo "$file" | cut -d'.' -f1`; echo "$name"; ffmpeg -i "$file" -b:a 320k "${name}.m4a"; done
for file in *.m4a; do 
    mv -- "$file" "${file%.m4a}.m4b"
done

-b:a 320k第一个命令中的选项用于输出比特率为 320kbit/s 的格式。您可以将比特率从 320k(最大比特率)更改为任何其他较小的比特率。m4b 文件的播放效果与 m4a 文件完全相同,尽管扩展名不同。

要将多个文件的扩展名从 mp3 重命名为 m4b,请打开终端并使用cd包含 mp3 文件的目录更改目录。然后运行以下命令将所有 mp3 文件的文件扩展名从 .mp3 更改为 .m4b,而不更改文件的编码。

for file in *.mp3; do 
    mv -- "$file" "${file%.mp3}.m4b"
done

答案2

我找到了一种可行的方法。

for f in ./*.mp3; do ffmpeg -i "$f" -vn -b:a 96k "${f%.mp3}.m4b"; done

有人告诉我,我需要通过,-vn因为出于某种原因,它默认尝试将 mp4 写入 m4b,但显然这会失败并使-vn视频无效。

相关内容