FFMPEG: Конвертируйте файлы m4a в mp3 без значительной потери информации / качества. Автоматизированный битрейт

37522
user3728501

У меня есть загруженные аудиофайлы (около 1000), которые я хочу преобразовать из m4a в mp3, чтобы использовать их для воспроизведения на проигрывателе компакт-дисков с USB-портом.

Я попытался сделать что-то простое, например: ffmpeg -i FILE.m4a FILE.mp3но это, кажется, снижает битрейт до очень низкого значения, а это не то, что я хочу.

Точно так же я не хочу конвертировать, используя постоянный битрейт, такой как 320k, потому что некоторые файлы, которые я конвертирую, имеют размер 320k m4a, а некоторые имеют низкое качество, как 96k m4a.

Кажется, не имеет смысла форсировать 320k, так как некоторые файлы станут во много раз больше, чем нужно. Точно так же нет смысла уничтожать все мои файлы с разрешением 320 КБ, преобразовав их в нечто гораздо меньшее, чем 96 КБ. (На данный момент файлы конвертируются примерно в 50к.)

Кто-нибудь знает, как я могу это сделать? Что я действительно хочу сделать, так это сказать ffmpeg, чтобы он конвертировал все файлы m4a в каталоге в mp3, сохраняя при этом текущее качество звука настолько, насколько это возможно. (Конечно, при преобразовании файлов с потерями в форматы с потерями могут возникнуть некоторые дополнительные потери.)

Спасибо за вашу помощь. Если это невозможно, существует ли какой-либо сценарий, который может определить требуемое качество при индивидуальном преобразовании файлов?

PS: Я работаю на Intel Mac, но у меня есть Ubuntu Box.

37

5 ответов на вопрос

43
LordNeckbeard

VBR

You can use the -qscale:a option in ffmpeg to create a variable bitrate (VBR) MP3 output. From FFmpeg Wiki: Encoding VBR (Variable Bit Rate) mp3 audio:

Control quality with -qscale:a (or the alias -q:a). Values are encoder specific, so for libmp3lame the range is 0-9 where a lower value is a higher quality. 0-3 will normally produce transparent results, 4 (default) should be close to perceptual transparency, and 6 usually produces an "acceptable" quality. The option -qscale:a is mapped to the -V option in the standalone lame command-line interface tool.

You'll have to experiment to see what value is acceptable for you. Also see Hydrogen Audio: Recommended LAME Encoder Settings.

Encoding multiple files

You can use a Bash "for loop" to encode all files in a directory:

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

Get ffmpeg

It's recommended to use a recent build of ffmpeg if possible. See the FFmpeg Download page for links to builds for OS X, Linux, and Windows. You can also follow a guide to compile FFmpeg.

Хорошо, спасибо, команды сработали, но я не думаю, что он делает то, что хотел. Я установил -q: 0, что делает то, что я ожидал для более качественных m4a (производящих большие файлы с более высокой скоростью vbr), но файлы более низкого качества, я думаю, все еще преобразуются в большие файлы, с vbr около 250-260 кб / с. Я бы ожидал, что файлы размером около 96 КБ в формате m4a будут преобразованы в аналогичный битрейт с помощью lame encoder в режиме vbr. Я предполагаю, что я не совсем понял, как работает режим кодирования vbr? user3728501 10 лет назад 1
19
T.Todua

use FFmpeg (there are many GUI versions too)

  1. MP3 is already discontinued (in 2017), obsolete codec. Internet has already switched to AAC (more efficient and quality codec):

    ffmpeg -i filenameee.m4a -acodec copy output.aac 
  2. However, if you still wish to use MP3 (because it is supported by more devices still):

    ffmpeg -i filenameee.m4a -acodec libmp3lame -ab 256k output.mp3 
Поскольку вопрос касается качества, возможно, будет полезно, если конвертировать в 256 КБ вместо 128. VessoVit 8 лет назад 4
@VessoVit спасибо, я обновил T.Todua 6 лет назад 0
3
user205987

This worked for me:

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

Используя существующие ответы в качестве основы, я написал скрипт 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 "$" 2> >(grep bitrate) | sed 's/^.*bitrate://g' | sed 's/[^0-9]*//g') bitrate="$K" new_filename=$(echo "$" | sed 's/.m4a$/.mp3/g') ffmpeg -y -i "$" -acodec libmp3lame -ab "$" "mp3s/$" done 
0
Kaiser Lima

Если вы работаете с частотой 48 кГц и по крайней мере 24-битным во входном файле (из файлового редактора i.ex.), вы -q:a 0будете воспроизводить 20 кГц не с таким большим файлом, как flac ... Но с низким качеством звука, если только вы не уменьшите шум от высоких частот (шипение) путем сглаживания или уменьшения носа аудиоредакторы, созданные в преобразованиях, которые будут воспроизводиться, затем будут использовать файл данных в качестве неслышимого ВЧ, но дорогого шума.

Похожие вопросы