39

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

5 ответов5

45

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.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .