Bagaimana cara mengkonversi file suara m4a ke mp3?

65

Saya mencoba mengonversi .m4afile ke .mp3file menggunakan ffmpegdengan perintah berikut:

$ ffmpeg -i music.m4a music.mp3

Sayangnya, saya mendapatkan file berukuran nol byte yang dikembalikan sebagai output. Output dari perintah adalah sebagai berikut:

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

Bagaimana saya bisa mengkonversi .m4afile suara ke .mp3format file?

Tom Brito
sumber
1
Instal avconv dan gunakan skrip ini: gist.github.com/bradenbest/cfba10c9df4b4c0daaab . Anda juga dapat mengonfigurasi fformatdan tformatvars untuk mengubah format audio apa yang Anda konversi.
Braden Best

Jawaban:

51

Ini bekerja untuk saya di Ubuntu 14.04:

avconv -i input.m4a ouptut.mp3

Untuk mendapatkan avconvperintah, instal libav-tools Instal libav-tools :

sudo apt-get install libav-tools
teknopaul
sumber
16
FFMPEG tidak ditinggalkan. AvConv adalah garpu yang memutuskan untuk memasukkan pesan itu ketika seseorang memanggilnya dengan nama yang dapat dieksekusi FFMPEG
David Davies-Jones
2
FYI. Pada 18.04, libav-tools dan avconv tidak lagi termasuk dalam repo.
Kevin Bowen
1
Hanya menggunakan ffmpegsecara langsung, seperti yang ditentukan dalam pertanyaan, berfungsi baik untuk saya dengan ffmpeg 4.1.3 di macOS 10.14.4.
Radon Rosborough
46

Cara sederhana untuk melakukannya adalah:

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

Jika Anda ingin skrip membungkusnya, coba aac2mp3 , yang seharusnya cocok untuk Anda. (Sintaks untuk pernyataan terakhir itu ditarik dari sana.) Kode sebaris termasuk di bawah ini:

#!/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
pengguna26700
sumber
1
Punya (setelah banyak baris teks): Unknown encoder 'libmp3lame' Error! Exiting. Dengan apt-get saya bisa melihat libmp3lame0dan libmp3lame-dev. Saya mencoba menginstal libmp3lame0, tetapi tidak ada yang berubah.
Tom Brito
1
ffmpegtelah digantikan oleh avconvdi rilis Ubuntu / Debian yang lebih baru. Lihat askubuntu.com/questions/432542/... dan installibav-tools
Denilson Sá Maia
Ini tidak berfungsi karena ffmpeg tidak ada dalam repo Ubuntu ... dan juga avconv atau libav-tools. Mungkinkah siapa pun yang bertanggung jawab atas perangkat lunak audio tolong berhenti menginjakkan kaki dan menetap di sesuatu yang stabil?
Peter Flynn
'EXT = "mp4"' perlu diubah ke 'EXT = "m4a"' sesuai dengan pertanyaan. Saya akan menambahkan teks penjelas berikut ini untuk mempermudah pemahaman: '# CONTOH: Akan mengonversi semua file di direktori saat ini dengan ekstensi # "m4a" menjadi "mp3" # bash SCRIPT_NAME -b 256 -v'
Eduardo Lucio
Pada 15.04, ffmpeg kembali ke repo: webupd8.org/2014/11/ffmpeg-returns-to-official-ubuntu.html Pada 18.04, libav-tools dan avconv tidak lagi tersedia.
Kevin Bowen
40

SoundConverter dapat melakukan ini tanpa harus dipusingkan pada command-line, dan itu tersedia di Pusat Perangkat Lunak Ubuntu:

Instal melalui pusat perangkat lunak

jendela utama dan penutup soundcoverter

konversi sedang berlangsung

andrewsomething
sumber
Jika Anda memiliki file yang ditandai oleh MusicBrainz, kemudian temukan solusi lain: bugs.launchpad.net/soundconverter/+bug/1174949
HDave
3
Kristus di atas tongkat penyangga, sangat berantakan. Soundconverter gagal karena Python kehilangan beberapa paket, kemudian muncul jendela pemasang untuk lebih dari 20 paket, tidak ada yang bisa diinstal, tentu saja, karena tidak berjalan sebagai root, tentu saja. Seseorang harus menulis ulang installer dan dependensinya.
Peter Flynn
Program tidak memuat Ubuntu 14.04
saat ini ada bug di soundconverter yang terkait dengan m4a: bugs.launchpad.net/soundconverter/+bug/1512007
krumpelstiltskin
5
Saya mencoba untuk tidak bermain-main dengan gui: Saya ingin mengotomatiskannya.
ctrl-alt-delor
16

Saya membutuhkan solusi alternatif karena - file saya duduk di subdirektori rekursif - saya punya spasi di jalur.

Jadi saya akhirnya setuju untuk:

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

Kemudian dihapus file aslinya:

find . -type f -name '*.m4a' -exec bash -c 'rm "$0"' '{}' \;
perajin
sumber
3
Bagi saya, ini adalah jawaban teratas. Poin kecil - penghapusan dapat diekspresikan lebih ringkas sebagai:find . -type f -name '*.m4a' -delete
Mark Slater
2
Saya memodifikasi perintah dengan menambahkan -y dan -b: a 256k untuk memastikan program tidak berhenti untuk meminta izin untuk menimpa file-file mp3 yang ada, dan untuk kualitas yang lebih baik (walaupun saya tidak mengenali perbedaan antara output standar dari 128kbit / s (yang hanya setengah dari bitrate m4a asli saya): find. -type f -name '* .m4a' -exec bash -c 'avconv -i "$ 0" -y -b: a 256k " $ {0 /% m4a / mp3} "'' {} '\;
Ben
1
Perintah ini dapat digunakan dengan sukses dengan mengganti 'ffmpeg' untuk 'avconv'.
Kevin Bowen
9

Saya membuat skrip untuk melakukan ini.

Persyaratan saya adalah:

  • Harus mempertahankan tag sebanyak mungkin
  • Harus mempertahankan sampul album jika ada
  • Harus berukuran 320K mp3s

Bekerja pada semua file m4a dalam direktori, dan mengeluarkan Mp3 mengkilap baru ke folder yang dibuat skrip yang disebut Mp3. Peringatan; skrip ini akan menimpa Mp3 yang ada di folder keluaran jika memiliki nama yang sama. Juga menggunakan file 'metadata.txt' dan 'metadata2.txt' sebagai file temp.

Anda harus menginstal avconv jika belum ada.

Saya tidak tahu cara mempertahankan tag 'Tahun' menjadi tag ID3v1, jadi saya tidak mengaktifkan opsi itu.

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

Simpan sebagai 'convert.b', lalu jalankan skrip dengan mengetik:

% bash convert.b
K0D4
sumber
Inilah yang saya cari.
Rom098
skrip pembunuh, ubah avconvke ffmpegdan yang berhasil. Harap perbarui jawabannya untuk menyertakan penjelasan untuk berbagai perintah!
George Udosen
5

Terkadang avconv dan ffmpeg tidak bekerja dengan sangat bersih, jadi:

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

selalu bekerja untukku.

Eamonn Kenny
sumber
1

Anda mungkin memerlukan paket libav tidak terbatas di repositori medibuntu. Secara pribadi saya akan mengkompilasi ffmpeg terbaru dengan semua codec, semudah 123 http://ubuntuforums.org/showthread.php?t=786095

duffydack
sumber
1
Jika Anda tidak ingin mengkompilasi ffmpeg: sudo apt-get install libavcodec-extra-53
z7sg
1

Di L-Ubuntu saya, libav-toolstidak tersedia. Saya menginstal winff:

sudo apt-get install winff

yang menyediakan alat grafis untuk mengkonversi file audio dan video dari dan ke berbagai format.

Hanya mencoba: bekerja baik untuk .m4ake .mp3:-)

Kalau tidak, ini vlcjuga tidak baik memainkan .m4afile:

sudo apt-get install vlc

FraSchelle
sumber
0

Script Nautilus

Skrip Nautilus ini memungkinkan pengguna untuk mengonversi file yang dipilih seperti file m4a - melewatkan file mp3 atau non-audio - ke format mp3 di lokasi yang sama menggunakan ffmpeg . File mp3 baru akan memiliki bitrate variabel tertinggi dan mempertahankan sebagian besar tag, kecuali tahun .

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

Saya tahu pertanyaan ini agak lama, tetapi saya pikir orang masih melihat pertanyaan ini (seperti saya), jadi saya membagikan apa yang saya temukan yang bekerja untuk saya dan memiliki UI yang bagus: fre: ac ( https: //www.freac .org / ). Untuk menggunakannya di ubuntu cukup unduh biner untuk ubuntu, dekompres dan jalankan file calle freac, itu saja. Nikmati!

Rodrigo E. Principe
sumber
0

Pertanyaan lama, tapi saya tidak melihat solusi yang sangat sederhana: Gunakan VLC

Dalam VLC Anda dapat memuat .m4a berkas dan mengubahnya menjadi .mp3 sangat easyllie.

  1. Buka VLC (tidak perlu memuat file apa pun)

  2. Klik Media atau tekan CTRL + R

  3. Klik pada Conver / Save

  4. Pada Profil pilih MP3

  5. Pilih tujuan

  6. Klik Mulai dan tunggu. Untuk mengetahui apakah ia melakukan sesuatu atau tidak, lihat bilah waktu.

Saya harap ini akan bermanfaat bagi seseorang.

iDon'tKnoware
sumber