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

45

У меня есть загруженные аудиофайлы (около 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.

user3728501
источник

Ответы:

51

VBR

Вы можете использовать эту -qscale:aопцию ffmpegдля создания MP3-выхода с переменным битрейтом (VBR). Из FFmpeg Wiki: Кодирование VBR (переменная скорость передачи битов) mp3 аудио :

Контроль качества с помощью -qscale:a(или псевдонима -q:a). Значения зависят от кодировщика, поэтому для libmp3lame диапазон составляет 0-9, где более низкое значение является более высоким качеством. 0-3 обычно дает прозрачные результаты, 4 (по умолчанию) должно быть близко к прозрачности восприятия, а 6 обычно дает «приемлемое» качество. Опция -qscale:aсопоставлена ​​с -Vопцией в автономном инструменте интерфейса командной строки.

Вам придется поэкспериментировать, чтобы увидеть, какое значение для вас приемлемо. Также см. Hydrogen Audio: Рекомендуемые настройки LAME Encoder .

Кодирование нескольких файлов

Вы можете использовать Bash «for loop» для кодирования всех файлов в каталоге:

$ 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 .

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

Используйте 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
    
T.Todua
источник
4
Поскольку вопрос касается качества, возможно, будет полезно, если конвертировать в 256
КБ
3

Это сработало для меня:

ffmpeg -i testing.m4v -b:a 192K -vn testing.mp3
user205987
источник
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
jbowman
источник
0

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

Кайзер лима
источник