Wie konvertiert man eine M4A-Sounddatei in MP3?

64

Ich habe versucht, eine .m4aDatei mit dem folgenden Befehl in eine .mp3Datei zu konvertieren ffmpeg:

$ ffmpeg -i music.m4a music.mp3

Leider habe ich eine Null-Byte-Datei als Ausgabe erhalten. Die Ausgabe des Befehls lautet wie folgt:

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

Wie kann ich eine .m4aAudiodatei in ein .mp3Dateiformat konvertieren?

Tom Brito
quelle
1
Installieren Sie avconv und verwenden Sie dieses Skript: gist.github.com/bradenbest/cfba10c9df4b4c0daaab . Sie können die fformatund tformat-Varianten auch so konfigurieren , dass geändert wird, zwischen welchen Audioformaten Sie konvertieren.
Braden Best

Antworten:

51

Das hat bei mir unter Ubuntu 14.04 geklappt:

avconv -i input.m4a ouptut.mp3

Um den avconvBefehl zu erhalten , installieren Sie libav-tools Installieren Sie libav-tools :

sudo apt-get install libav-tools
teknopaul
quelle
16
FFMPEG ist nicht veraltet. AvConv war eine Abzweigung, die beschlossen hat, diese Nachricht einzufügen, als jemand sie unter dem Namen FFMPEG ausführbar nannte
David Davies-Jones,
2
Zu Ihrer Information. Ab dem 18.04 sind libav-tools und avconv nicht mehr in Repos enthalten.
Kevin Bowen
1
Nur die ffmpegdirekte Verwendung , wie in der Frage angegeben, funktioniert für mich mit ffmpeg 4.1.3 unter macOS 10.14.4 einwandfrei.
Radon Rosborough
44

Der einfache Weg dies zu tun ist:

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

Wenn Sie möchten, dass ein Skript dies umschließt , versuchen Sie es mit aac2mp3 , das für Sie funktionieren sollte. (Die Syntax für diese letzte Anweisung wurde von dort abgerufen.) Inline-Code im Folgenden:

#!/bin/bash
#
# $Id: aac2mp3,v 1.2  03/30/2008 10:00 Daniel Tavares ([email protected]) - 
# 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
quelle
1
Got (nach vielen Zeilen Text): Unknown encoder 'libmp3lame' Error! Exiting. Mit apt-get kann ich libmp3lame0und sehen libmp3lame-dev. Ich habe versucht, libmp3lame0 zu installieren, aber nichts hat sich geändert.
Tom Brito
1
ffmpegwurde avconvin neueren Ubuntu / Debian-Versionen durch ersetzt. Siehe askubuntu.com/questions/432542/… und installierelibav-tools
Denilson Sá Maia
Dies funktioniert nicht, da ffmpeg nicht in den Ubuntu-Repos enthalten ist ... und auch keine avconv- oder libav-Tools. Könnte jemand, der für Audio-Software zuständig ist, bitte aufhören, herumzuschleichen und sich auf etwas Stabiles festlegen?
Peter Flynn
'EXT = "mp4"' muss entsprechend der Frage in 'EXT = "m4a"' geändert werden. Ich würde den folgenden erläuternden Text hinzufügen, um das Verständnis zu vereinfachen: '# BEISPIEL: Konvertiert alle Dateien im aktuellen Verzeichnis mit der Erweiterung # "m4a" in "mp3" # bash SCRIPT_NAME -b 256 -v'
Eduardo Lucio
Ab dem 15.04 ist ffmpeg wieder in den Repos: webupd8.org/2014/11/ffmpeg-returns-to-official-ubuntu.html Ab dem 18.04 sind libav-tools und avconv nicht mehr verfügbar.
Kevin Bowen
40

SoundConverter kann dies, ohne in der Befehlszeile herumspielen zu müssen, und ist im Ubuntu Software Center verfügbar:

Installation über das Software Center

soundcoverter Hauptfenster und Einstellungen

Konvertierungsvorgang läuft

undetwas
quelle
Wenn Sie Ihre Dateien von MusicBrainz markiert haben, finden Sie eine andere Lösung: bugs.launchpad.net/soundconverter/+bug/1174949
HDave
3
Christus auf einer Krücke, was für ein Durcheinander. Soundconverter schlug fehl, weil in Python einige Pakete fehlten. Dann öffnete sich ein Installationsfenster für über 20 weitere Pakete, von denen natürlich keines installiert werden konnte, da es natürlich nicht als Root ausgeführt wurde. Jemand muss das Installationsprogramm und die Abhängigkeiten neu schreiben.
Peter Flynn
Programm lädt nicht Ubuntu 14.04
Es gibt derzeit einen Fehler im Soundkonverter in Bezug auf m4a: bugs.launchpad.net/soundconverter/+bug/1512007
krumpelstiltskin
5
Ich versuche zu vermeiden, mit der GUI herumzuspielen: Ich möchte es automatisieren.
Strg-Alt-Delor
16

Ich brauchte eine alternative Lösung, da sich meine Dateien in rekursiven Unterverzeichnissen befanden und ich Leerzeichen in Pfaden hatte.

So entschied ich mich schließlich für:

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

Dann löschte die Originaldateien:

find . -type f -name '*.m4a' -exec bash -c 'rm "$0"' '{}' \;
Handwerker
quelle
3
Für mich ist dies die beste Antwort. Ein kleiner Punkt - die Streichung kann prägnanter ausgedrückt werden als:find . -type f -name '*.m4a' -delete
Mark Slater
2
Ich habe den Befehl durch Hinzufügen von -y und -b: a 256k geändert, um sicherzustellen, dass das Programm nicht anhält, um nach der Erlaubnis zum Überschreiben vorhandener MP3-Dateien zu fragen, und um eine bessere Qualität zu erzielen (obwohl ich keinen Unterschied zwischen der Standardausgabe erkannte von 128 kbit / s (das war nur die Hälfte der Bitrate, die meine ursprüngliche m4a hatte): find. -type f -name '* .m4a' -exec bash -c 'avconv -i "$ 0" -y -b: a 256k " $ {0 /% m4a / mp3} "'{}' \;
Ben
1
Dieser Befehl kann erfolgreich verwendet werden, indem 'avconv' durch 'ffmpeg' ersetzt wird.
Kevin Bowen
9

Ich habe ein Skript dafür erstellt.

Meine Anforderungen waren:

  • Muss so viele Tags wie möglich verwalten
  • Muss das Albumcover behalten, falls vorhanden
  • Muss 320K mp3s sein

Funktioniert mit allen M4A-Dateien in einem Verzeichnis und gibt die neuen, glänzenden Mp3s in einem Ordner aus, den das Skript mit dem Namen Mp3 erstellt. Warnung; Dieses Skript überschreibt vorhandene MP3s im Ausgabeordner, wenn sie denselben Namen haben. Verwendet auch die Dateien 'metadata.txt' und 'metadata2.txt' als temporäre Dateien.

Sie müssen avconv installieren, falls es noch nicht existiert.

Ich konnte nicht herausfinden, wie ich das 'Year'-Tag in ID3v1-Tags beibehalten kann, daher habe ich diese Option nicht aktiviert.

#!/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

Speichern Sie es unter dem Namen "convert.b" und führen Sie das Skript aus, indem Sie Folgendes eingeben:

% bash convert.b
K0D4
quelle
Genau das suche ich.
Rom098
Killer-Skript, ändern Sie die avconvzu ffmpegund das hat den Job gemacht. Bitte aktualisieren Sie die Antwort, um Erklärungen für die verschiedenen Befehle zu erhalten!
George Udosen
5

Manchmal funktionieren avconv und ffmpeg nicht so sauber, also:

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

funktioniert immer bei mir

Eamonn Kenny
quelle
1

Sie benötigen wahrscheinlich die uneingeschränkten libav-Pakete im medibuntu-Repository. Persönlich würde ich das neueste ffmpeg mit allen Codecs kompilieren, so einfach wie 123 http://ubuntuforums.org/showthread.php?t=786095

Duffydack
quelle
1
Wenn Sie ffmpeg nicht kompilieren möchten: sudo apt-get install libavcodec-extra-53
z7sg
1

Auf meinem L-Ubuntu libav-toolswar das nicht verfügbar. Ich habe installiert winff:

sudo apt-get install winff

Mit diesem grafischen Tool können Sie Audio- und Videodateien aus und in viele verschiedene Formate konvertieren.

Gerade versucht: es funktioniert für feine .m4abis .mp3:-)

Ansonsten vlcgelingt es auch hervorragend, .m4aDateien abzuspielen:

sudo apt-get install vlc

FraSchelle
quelle
0

Nautilus-Skript

Dieses Nautilus-Skript ermöglicht es dem Benutzer, ausgewählte Dateien wie M4A- Dateien - MP3- oder Nicht-Audio-Dateien überspringen - mit ffmpeg in das MP3- Format am selben Ort zu konvertieren . Die neuen MP3-Dateien haben die höchste variable Bitrate und behalten mit Ausnahme des Jahres die meisten Tags bei .

#!/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
Sadi
quelle
0

Ich weiß, dass diese Frage ein bisschen alt ist, aber ich denke, die Leute sehen diese Frage immer noch (wie ich). Deshalb teile ich, was ich gefunden habe, das für mich funktioniert hat und eine schöne Benutzeroberfläche hat: fre: ac ( https: //www.freac .org / ). Zur Verwendung in Ubuntu einfach die Binärdatei für Ubuntu herunterladen, dekomprimieren und die Datei calle ausführen, fertig freac. Genießen!

Rodrigo E. Principe
quelle
0

Alte Frage, aber ich sehe keine sehr einfache Lösung: Verwenden Sie VLC

In VLC können Sie eine .m4a- Datei laden und sehr einfach in .MP3 konvertieren.

  1. Open VLC (keine Datei muss geladen werden)

  2. Klicken Sie auf Medien oder drücken Sie STRG + R

  3. Klicken Sie auf Konvertieren / Speichern

  4. Auf Profil wählen MP3

  5. Ziel aussuchen

  6. Klicken Sie auf Start und warten Sie. Um zu wissen, ob es etwas tut oder nicht, schauen Sie auf die Zeitleiste.

Ich hoffe, dass dies für jemanden nützlich sein wird.

iDon'tKnoware
quelle