FFMPEG:将m4a文件转换为mp3,而不会丢失大量信息/质量。自动比特率


44

我有大量音频文件(大约1000个),我想将其从m4a转换为mp3,以便可以在具有USB端口的CD播放器上播放它们。

我尝试做一些简单的事情,例如:ffmpeg -i FILE.m4a FILE.mp3但这似乎将比特率降低到非常低的值,这不是我想要的。

同样,我也不想使用恒定的比特率进行转换,例如320k,因为我正在转换的某些文件为320k m4a,而某些文件的质量却低至96k m4a。

强制使用320k似乎没有任何意义,因为某些文件的大小将比所需大小大很多倍。同样,将所有320k文件转换为比96k低得多的文件也没有意义。(目前,文件已转换为大约50k。)

有人知道我该怎么做吗?我真正想做的是告诉ffmpeg将目录中的所有m4a文件都转换为mp3,同时尽可能保持当前的音频质量。(当然,从有损文件格式转换为有损文件格式可能会带来一些额外的损失。)

谢谢你的帮助。如果这不可能,那么是否存在某种脚本可以在逐个转换文件时检测到所需的质量?

PS:我正在使用Intel Mac,但是也有Ubuntu盒子。

Answers:


51

VBR

您可以使用中的-qscale:a选项ffmpeg来创建可变比特率(VBR)MP3输出。来自FFmpeg Wiki:编码VBR(可变比特率)mp3音频

-qscale:a(或别名-q:a)控制质量。值是特定于编码器的,因此对于libmp3lame,范围是0-9,其中值越小表示质量越高。0-3通常会产生透明的结果,4(默认值)应接近感知透明,而6通常会产生“可接受的”质量。该选项-qscale:a映射到-V独立的Lame命令行界面工具中的选项。

您将不得不尝试看看什么值可以接受。另请参见《氢音频:推荐的LAME编码器设置》

编码多个文件

您可以使用Bash的“ for循环”对目录中的所有文件进行编码:

$ mkdir newfiles
$ for f in *.m4a; do ffmpeg -i "$f" -codec:v copy -codec:a libmp3lame -q:a 2 newfiles/"${f%.m4a}.mp3"; done

得到 ffmpeg

ffmpeg如果可能,建议使用最新版本。请参阅FFmpeg下载页面,以获取指向OS X,Linux和Windows的内部版本的链接。您还可以按照指南编译FFmpeg


1
好的,谢谢,命令起作用了,但是我认为它不能满足我的要求。我将-q:a设置为0,这与我期望的高质量m4a(生成具有更高vbr速率的大文件)的预期效果相同,但我认为低质量的文件仍会转换为大文件,其中vbr约为250-260 kb / s。我曾希望将m4a格式的大约96k的文件在vbr模式下使用lame编码器转换为相似的比特率。我假设我不太了解vbr编码模式的工作原理?
user3728501 2014年

19

使用FFmpeg(也有很多GUI版本)

  1. MP3已于2017年停产,已经过时。互联网已经切换到AAC(更高效,更优质的编解码器):

    ffmpeg -i filenameee.m4a -acodec copy output.aac
    
  2. 但是,如果您仍然希望使用MP3(因为仍有更多设备支持它):

    ffmpeg -i filenameee.m4a -acodec libmp3lame -ab 256k output.mp3
    

4
由于问题是关于质量,也许这将是有益的,如果转换到256K,而不是128
VessoVit

3

这对我有用:

ffmpeg -i testing.m4v -b:a 192K -vn testing.mp3

1

使用现有答案作为基础,我编写了一个bash脚本,该脚本应完全按照问题在Ubuntu计算机上进行的要求(在16.04上进行了测试)。您需要安装软件包avprobe中的libav-tools软件包。您可以avprobe使用以下命令进行安装

sudo apt-get install libav-tools

注意:最好在运行此脚本的任何文件夹中进行备份,并尽最大努力运行之前阅读并了解其操作。

我还没有对YMMV进行非常严格的测试。

#!/bin/bash

mkdir "mp3s"
for f in *.m4a;
do
    bitrate=$(avprobe "${f}" 2> >(grep bitrate) | sed 's/^.*bitrate://g' | sed 's/[^0-9]*//g')
    bitrate="${bitrate}K"
    new_filename=$(echo "${f}" | sed 's/.m4a$/.mp3/g')
    ffmpeg -y -i "${f}" -acodec libmp3lame -ab "${bitrate}" "mp3s/${new_filename}"
done

0

如果您以48 KhZ的速度工作,并且输入文件中至少有24位(来自文件编辑器i.ex.),则-q:a 0不会在flac这么大的文件上重现20 kHz的声音。但是除非降低噪音,否则质量较低的音频从高频(嘶嘶声)中通过抖动或降低鼻子的音频编辑器(在转换中创建)进行复制,然后将其用作无法听见的HF数据文件,但噪声很高。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.