Как преобразовать звуковой файл m4a в mp3?

65

Я попытался преобразовать .m4aфайл в .mp3файл, используя ffmpegследующую команду:

$ ffmpeg -i music.m4a music.mp3

К сожалению, я получил файл нулевого байта, возвращенный как вывод. Вывод команды выглядит следующим образом:

FFmpeg version 0.6-4:0.6-2ubuntu6.2, Copyright (c) 2000-2010 the FFmpeg developers
  built on Sep 16 2011 17:11:24 with gcc 4.4.5
  configuration: --extra-version=4:0.6-2ubuntu6.2 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-vaapi --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
  WARNING: library configuration mismatch
  libavutil   configuration: --extra-version=4:0.6-2ubuntu6.2 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-vaapi --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
  libavcodec  configuration: --extra-version=4:0.6-2ubuntu6.2 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-vaapi --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
  libavformat configuration: --extra-version=4:0.6-2ubuntu6.2 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-vaapi --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
  libavdevice configuration: --extra-version=4:0.6-2ubuntu6.2 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-vaapi --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
  libavfilter configuration: --extra-version=4:0.6-2ubuntu6.2 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-vaapi --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
  libswscale  configuration: --extra-version=4:0.6-2ubuntu6.2 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-vaapi --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
  libpostproc configuration: --extra-version=4:0.6-2ubuntu6.2 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-vaapi --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
  libavutil     50.15. 1 / 50.15. 1
  libavcodec    52.72. 2 / 52.72. 2
  libavformat   52.64. 2 / 52.64. 2
  libavdevice   52. 2. 0 / 52. 2. 0
  libavfilter    1.19. 0 /  1.19. 0
  libswscale     0.11. 0 /  0.11. 0
  libpostproc   51. 2. 0 / 51. 2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'music.m4a':
  Metadata:
    major_brand     : M4A 
    minor_version   : 0
    compatible_brands: M4A mp42isom
  Duration: 00:00:03.41, start: 0.000000, bitrate: 66 kb/s
    Stream #0.0(und): Audio: aac, 44100 Hz, mono, s16, 63 kb/s
Output #0, mp3, to 'music.mp3':
    Stream #0.0(und): Audio: 0x0000, 44100 Hz, mono, s16, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
Encoder (codec id 86017) not found for output stream #0.0

Как я могу преобразовать .m4aзвуковой файл в .mp3формат файла?

Том Брито
источник
1
Установите avconv и используйте этот скрипт: gist.github.com/bradenbest/cfba10c9df4b4c0daaab . Вы также можете настроить параметры vars fformatи tformatv для изменения форматов аудио, которые вы конвертируете.
Брэден Бест

Ответы:

51

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

avconv -i input.m4a ouptut.mp3

Чтобы получить avconvкоманду, установите libav-tools Установите libav-tools :

sudo apt-get install libav-tools
teknopaul
источник
16
FFMPEG не считается устаревшим. AvConv был форком, который решил поместить это сообщение, когда кто-то назвал его по имени исполняемого файла FFMPEG
Дэвид Дэвис-Джонс
2
FYI. С 18.04 libav-tools и avconv больше не включаются в репозитории.
Кевин Боуэн
1
Просто использование ffmpegнапрямую, как указано в вопросе, прекрасно работает для меня с ffmpeg 4.1.3 на macOS 10.14.4.
Радон Росборо
46

Простой способ сделать это:

ffmpeg -v 5 -y -i input.m4a -acodec libmp3lame -ac 2 -ab 192k output.mp3

Если вы хотите, чтобы скрипт обернул это, попробуйте aac2mp3 , который должен работать для вас. (Синтаксис для этого последнего оператора был извлечен оттуда.) Встроенный код включен ниже:

#!/bin/bash
#
# $Id: aac2mp3,v 1.2  03/30/2008 10:00 Daniel Tavares (dantavares@gmail.com) - 
# Based on Script -  rali Exp $
#
#
# Convert one or more AAC/M4A files to MP3.  Based on a script example
# I found at: http://gimpel.gi.funpic.de/Howtos/convert_aac/index.html
#
ME=`basename ${0}`
FFMPEG="/usr/bin/ffmpeg"
EXT="mp4"
BITRATE="128"
do_usage() {            # explanatory text
 echo "usage: ${ME} [-b nnn] [-e ext] [-f] [-c] [-r] [-v] [-h] [file list]"
 echo "       Convert music from AAC format to MP3"
 echo "  -m /path/app  Specify the location of ffmpeg(1)"
 echo "  -b nnn        bitrate for mp3 encoder to use"
 echo "  -e ext        Use .ext rather than .m4a extension"
 echo "  -f            Force overwrite of existing file"
 echo "  -c            Delete original AAC|M4A file(s)"
 echo "  -v            Verbose output"
 echo "  -h            This information"
 echo ""
 echo "For recursive directory, use: find -name '*.${EXT}' -exec ${ME} "{}" [args]     \;"
 exit 0
 }
do_error() {
 echo "$*"
 exit 1
 }
file_overwrite_check() {
 if [ "$FORCE" != "yes" ]
 then
   test -f "${1}" && do_error "${1} already exists."
 else
   test -f "${1}" && echo "  ${1} is being overwritten."
 fi
 }
create_mp3() {  # use ffmpeg(1) to convert from AAC to MP3
 file_overwrite_check "${2}"
 test $VERBOSE && echo -n "Converting file: ${1}"
 ${FFMPEG} -v 5 -y -i "${1}" -acodec libmp3lame -ac 2 -ab ${BITRATE}k "${2}";
 if [ $? -ne 0 ]
 then
   echo ""
   echo "Error!"
   do_cleanup
   do_error "Exiting"
 fi
 test $VERBOSE && echo ".  OK"
 }
do_cleanup() {  # Delete intermediate and (optionally) original file(s)
 test ${RMM4A} && rm -f "${1}"
 test $VERBOSE && echo ".  OK"
 }
do_set_bitrate() {
 test $VERBOSE && echo -n "Setting bitrate to: $1 kbps"
 BITRATE=$1
 test $VERBOSE && echo ".  OK"
 }
GETOPT=`getopt -o l:m:b:e:cfhrv -n ${ME} -- "$@"`
if [ $? -ne 0 ]
then
 do_usage
fi
eval set -- "$GETOPT"
while true
do
 case "$1" in
   -m) FFMPEG=$2 ; shift ; shift ;;
   -b) do_set_bitrate $2 ; shift ; shift ;;
   -e) EXT=$2 ; shift ; shift ;;
   -f) FORCE="yes" ; shift ;;
   -c) RMM4A="yes" ; shift ;;
   -v) VERBOSE="yes" ; shift ;;
   -h) do_usage ;;
   --) shift ; break ;;
    *)  do_usage ;;
 esac
done
test -f $FFMPEG || do_error "$FFMPEG not found. Use \"-m\" switch."
if [ $# -eq 0 ]
then                    # Convert all files in current directory
 for IFILE in *.${EXT}
 do
   if [ "${IFILE}" == "*.${EXT}" ]
   then
     do_error "Not found ${EXT} in this folder."
   fi
   OUT=`echo "${IFILE}" | sed -e "s/\.${EXT}//g"`
   create_mp3 "${IFILE}" "${OUT}.mp3"
   do_cleanup "${IFILE}" 
 done
else                    # Convert listed files
 for IFILE in "$*"
 do
   test -f "${IFILE}" || do_error "${IFILE} not found."  
   OUT=`echo "${IFILE}" | sed -e "s/\.${EXT}//g"`    
   create_mp3 "${IFILE}" "${OUT}.mp3"
   do_cleanup "${IFILE}"    
 done    
fi   
exit 0
user26700
источник
1
Got (после многих строк текста): Unknown encoder 'libmp3lame' Error! Exiting. С apt-get я могу видеть libmp3lame0и libmp3lame-dev. Я пытался установить libmp3lame0, но ничего не изменилось.
Том Брито
1
ffmpegбыл заменен avconvв более новых выпусках Ubuntu / Debian. Смотрите askubuntu.com/questions/432542/… и устанавливайтеlibav-tools
Денилсон Са Майя
Это не работает, потому что ffmpeg отсутствует в репозиториях Ubuntu ... и не являются avconv или libav-tools. Может ли тот, кто отвечает за аудио-программное обеспечение, прекратить кататься и остановиться на чем-то стабильном?
Питер Флинн
'EXT = "mp4" "необходимо изменить на" EXT = "m4a" "в зависимости от вопроса. Я бы добавил следующий пояснительный текст, чтобы облегчить понимание: '# ПРИМЕР: преобразует все файлы в текущем каталоге с расширением # "m4a" в "mp3" # bash SCRIPT_NAME -b 256 -v'
Эдуардо Лучио
По состоянию на 15.04 ffmpeg вернулся в репозитории: webupd8.org/2014/11/ffmpeg-returns-to-official-ubuntu.html С 18.04 libav-tools и avconv больше не доступны.
Кевин Боуэн
40

SoundConverter может сделать это без необходимости возиться с командной строкой, и он доступен в программном центре Ubuntu:

Установить через центр программного обеспечения

Главное окно звукового обложки и префы

конверсия в процессе

andrewsomething
источник
Если у вас есть файлы, помеченные MusicBrainz, то найдите другое решение: bugs.launchpad.net/soundconverter/+bug/1174949
HDave
3
Христос на костылях, какой беспорядок. Soundconverter потерпел неудачу, потому что в Python отсутствовали некоторые пакеты, затем он открыл окно установщика для более чем 20 пакетов, ни один из которых он не мог установить, конечно, потому что он, конечно, не работал от имени пользователя root. Кто-то должен переписать установщик и зависимости.
Питер Флинн
Программа не загружает Ubuntu 14.04
в настоящее время существует ошибка в soundconverter, связанная с m4a: bugs.launchpad.net/soundconverter/+bug/1512007
krumpelstiltskin
5
Я пытаюсь избежать возни с графическим интерфейсом: я хочу автоматизировать это.
Ctrl-Alt-Delor
16

Мне нужно было альтернативное решение, потому что - мои файлы находились в рекурсивных подкаталогах - у меня были пробелы в путях.

Так что я в итоге остановился на:

 find . -type f -name '*.m4a' -exec bash -c 'avconv -i "$0" "${0/%m4a/mp3}"' '{}' \;

Затем удалили исходные файлы:

find . -type f -name '*.m4a' -exec bash -c 'rm "$0"' '{}' \;
крафтером
источник
3
Для меня это лучший ответ. Небольшой момент - удаление можно выразить более кратко, как:find . -type f -name '*.m4a' -delete
Марк Слейтер
2
Я изменил команду, добавив -y и -b: 256k, чтобы убедиться, что программа не останавливается, чтобы запросить разрешение на перезапись существующих mp3-файлов, и для лучшего качества (хотя я не распознал разницу между стандартным выводом 128 кбит / с (что было только половиной битрейта, который был у моего оригинального m4a): find. -type f -name '* .m4a' -exec bash -c 'avconv -i "$ 0" -y -b: 256k " $ {0 /% m4a / mp3} "'' {} '\;
Бен
1
Эту команду можно успешно использовать, заменив «ffmpeg» на «avconv».
Кевин Боуэн
9

Я создал скрипт для этого.

Мои требования были:

  • Необходимо поддерживать как можно больше меток
  • Должен сохранить обложку альбома, если существует
  • Должно быть 320K mp3s

Работает со всеми файлами m4a в каталоге и выводит новые блестящие Mp3 в папку, которую создает сценарий под названием Mp3. Предупреждение; этот скрипт перезаписывает существующие Mp3 в выходной папке, если они имеют одинаковые имена. Также использует файлы «metadata.txt» и «metadata2.txt» в качестве временных файлов.

Вам нужно будет установить avconv, если он еще не существует.

Я не мог понять, как сохранить тег 'Year' в тегах ID3v1, поэтому я не включил эту опцию.

#!/bin/bash
files=*.m4a
#create output folder if it doesnt exist
if [ ! -d Mp3 ]; then
        mkdir Mp3
fi

for file in $files; do
        mp3File=${file/%m4a/mp3}
        avconv -y -i "${file}" -f ffmetadata metadata.txt
        sed -e 's/^date=\(.*\)$/TYER=\1/' -e 's/^major_brand=.*$//' -e 's/^minor_version=.*$//' -e 's/^creation.*$//' -e 's/^compatible.*$//' -e 's/^encoder=.*$//' <metadata.txt >metadata2.txt
        avconv -y -i "${file}" -i metadata2.txt -ab 320k -map_metadata 1 -id3v2_version 3 "Mp3/${mp3File}"
done

Сохраните его как «convert.b», а затем запустите скрипт, набрав:

% bash convert.b
K0D4
источник
Это именно то, что я ищу.
Rom098
убийца сценарий, изменить , avconvчтобы ffmpegи сделал работу. Пожалуйста, обновите ответ, чтобы включить объяснение различных команд!
Джордж Удосен
5

Иногда avconv и ffmpeg работают не так чисто, поэтому:

sudo apt-get install faad lame
faad myfile.m4a -w | lame - myfile.mp3

у меня всегда работает

Имонн Кенни
источник
1

Возможно, вам нужны неограниченные пакеты libav в хранилище medibuntu. Лично я бы скомпилировал последнюю версию ffmpeg со всеми кодеками, всего лишь 123 http://ubuntuforums.org/showthread.php?t=786095

duffydack
источник
1
Если вы не хотите компилировать ffmpeg: sudo apt-get установите libavcodec-extra-53
z7sg
1

На моем L-Ubuntu libav-toolsне было доступно. Я установил winff:

sudo apt-get install winff

который предоставляет графический инструмент для конвертирования аудио и видео файлов из разных форматов

Только что попробовал: он прекрасно работает .m4aс .mp3:-)

В противном случае vlcтакже отлично справляется с воспроизведением .m4aфайлов:

sudo apt-get install vlc

FraSchelle
источник
0

Наутилус Скрипт

Этот скрипт Nautilus позволяет пользователю конвертировать выбранные файлы, такие как файлы m4a - пропуская любые mp3 или не аудио файлы - в формат mp3 в том же месте, используя ffmpeg . Новые mp3-файлы будут иметь самый высокий переменный битрейт и сохранят большинство тегов, кроме года .

#!/bin/sh
#Nautilus Script to convert selected file(s) - excluding any non-audio and MP3 file(s) - to MP3 format at highest quality with VBR (Variable Bit Rate)
OLDIFS=$IFS
IFS="
"
for filename in $@; do
filetype="$(file -bi "$filename" | awk -F "; " '{print $1}' | awk -F "/" '{print $1}')"
if [ "$filetype" != audio ]; then
echo "Skip non-audio file"
else
filesubtype="$(file -bi "$filename" | awk -F "; " '{print $1}' | awk -F "/" '{print $2}')"
if [ "$filesubtype" != mpeg ]; then
file_name_in=$(basename "$filename")
file_name_out="$(basename "$filename" | sed 's/\.[^.]*$//').mp3"
ffmpeg -loglevel quiet -y -i "$file_name_in" -acodec libmp3lame -aq 0 "$file_name_out"
fi
fi
done
IFS=$OLDIFS
/usr/bin/canberra-gtk-play --id="dialog-information" &
notify-send "Selected file(s) converted to MP3 format, excluding any non-audio and MP3 file(s)" -i gtk-dialog-info -t 5 -u normal
Сади
источник
0

Я знаю, что этот вопрос немного устарел, но я думаю, что люди все еще видят этот вопрос (как и я), поэтому я делюсь тем, что я нашел, что сработало для меня и имеет приятный интерфейс: fre: ac ( https: //www.freac). .org / ). Для использования в Ubuntu просто загрузите двоичный файл для Ubuntu, распакуйте и запустите файл calle freac, вот и все. Наслаждайтесь!

Родриго Э. Принсипи
источник
0

Старый вопрос, но я не вижу очень простого решения: используйте VLC

В VLC вы можете загрузить файл .m4a и преобразовать его в .MP3 очень легко.

  1. Откройте VLC (нет необходимости загружать любой файл)

  2. Нажмите на медиа или нажмите CTRL + R

  3. Нажмите на Конвертировать / Сохранить

  4. В профиле выберите MP3

  5. Выберите пункт назначения

  6. Нажмите на Пуск и подождите. Чтобы узнать, делает ли он что-то или нет, посмотрите на панель времени.

Я надеюсь, что это будет полезно для кого-то.

iDon'tKnoware
источник