วิธีแปลงไฟล์เสียง m4a เป็น mp3


64

ฉันพยายามแปลง.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 นอกจากนี้คุณยังสามารถกำหนดค่าfformatและtformatvars เพื่อเปลี่ยนรูปแบบเสียงที่คุณแปลงได้
Braden ที่ดีที่สุด

คำตอบ:


51

สิ่งนี้ใช้ได้กับฉันใน Ubuntu 14.04:

avconv -i input.m4a ouptut.mp3

ในการavconvรับคำสั่งให้ติดตั้งlibav-tools ติดตั้งเครื่องมือ libav :

sudo apt-get install libav-tools

16
FFMPEG ไม่ได้ถูกปฏิเสธ AvConv เป็นทางแยกที่ตัดสินใจที่จะใส่ข้อความนั้นเมื่อมีคนเรียกมันด้วยชื่อปฏิบัติการ FFMPEG
David Davies-Jones

2
FYI ตั้งแต่ 18.04, เครื่องมือ libav และ avconv ไม่รวมอยู่ใน repos อีกต่อไป
Kevin Bowen

1
เพียงใช้ffmpegโดยตรงตามที่ระบุในคำถามใช้งานได้ดีกับฉันด้วย ffmpeg 4.1.3 บน macOS 10.14.4
Radon Rosborough

44

วิธีง่ายๆในการทำคือ:

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

1
ได้ Unknown encoder 'libmp3lame' Error! Exiting(หลังจากหลายบรรทัด): ด้วย apt-get ฉันสามารถดูและlibmp3lame0 libmp3lame-devฉันพยายามติดตั้ง libmp3lame0 แต่ไม่มีอะไรเปลี่ยนแปลง
Tom Brito

1
ffmpegถูกแทนที่โดยavconvใน Ubuntu / Debian ที่ใหม่กว่า ดูaskubuntu.com/questions/432542/และติดตั้งlibav-tools
Denilson Sá Maia

สิ่งนี้ไม่ทำงานเนื่องจาก ffmpeg ไม่ได้อยู่ใน repos ของ Ubuntu ... และไม่มี avconv หรือ libav-tools ใครก็ตามที่รับผิดชอบซอฟต์แวร์ด้านเสียงโปรดหยุดการเดินไปรอบ ๆ
ปีเตอร์ฟลินน์

'EXT = "mp4"' จะต้องเปลี่ยนเป็น 'EXT = "m4a"' ตามคำถาม ฉันจะเพิ่มข้อความอธิบายต่อไปนี้เพื่อให้เข้าใจง่ายขึ้น: '# ตัวอย่าง: จะแปลงไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันด้วยนามสกุล # "m4a" เป็น "mp3" # bash SCRIPT_NAME -b 256 -v'
Eduardo Lucio

ตั้งแต่ 15.04, ffmpeg กลับมาอยู่ใน repos: webupd8.org/2014/11/ffmpeg-returns-to-official-ubuntu.htmlตั้งแต่ 18.04, libav-tools และ avconv จะไม่สามารถใช้งานได้อีกต่อไป
Kevin Bowen

40

SoundConverterสามารถทำสิ่งนี้ได้โดยไม่ต้องวุ่นวายกับ command-line และมันมีอยู่ใน Ubuntu Software Center:

ติดตั้งผ่านศูนย์ซอฟต์แวร์

หน้าต่างหลักของ soundcoverter และ prefs

ความคืบหน้าการแปลง


หากคุณมีไฟล์ของคุณติดแท็ก MusicBrainz แล้วหาวิธีแก้ปัญหาอื่น: bugs.launchpad.net/soundconverter/+bug/1174949
HDave

3
คริสร์กับไม้ยันรักแร้ Soundconverter ล้มเหลวเนื่องจาก Python ขาดแพ็คเกจบางตัวจากนั้นจะเปิดหน้าต่างตัวติดตั้งสำหรับแพ็คเกจมากกว่า 20 ชุดซึ่งแน่นอนว่ามันไม่สามารถติดตั้งได้เพราะมันไม่ได้ทำงานเหมือนรูท มีคนต้องการเขียนตัวติดตั้งและการอ้างอิงใหม่
Peter Flynn

โปรแกรมไม่โหลด Ubuntu 14.04

ขณะนี้มีข้อผิดพลาดใน soundconverter ที่เกี่ยวข้องกับ m4a: bugs.launchpad.net/soundconverter/+bug/1512007
krumpelstiltskin

5
ฉันพยายามหลีกเลี่ยงการยุ่งกับ gui: ฉันต้องการทำให้เป็นอัตโนมัติ
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
Mark Slater

2
ฉันแก้ไขคำสั่งโดยเพิ่ม -y และ -b: a 256k เพื่อให้แน่ใจว่าโปรแกรมจะไม่หยุดขออนุญาตเขียนทับไฟล์ mp3 ที่มีอยู่และเพื่อคุณภาพที่ดีขึ้น (แม้ว่าฉันไม่รู้จักความแตกต่างระหว่างเอาต์พุตมาตรฐาน ของ 128kbit / s (ซึ่งเป็นเพียงครึ่งหนึ่งบิตเรตของ m4a ดั้งเดิมของฉัน): find -type f -name '* .m4a' -exec bash -c 'avconv -i "$ 0" -y -b: a 256k " $ {0 /% m4a / mp3} "'' {} '\;
Ben

1
คำสั่งนี้สามารถใช้ได้สำเร็จโดยการแทนที่ 'ffmpeg' สำหรับ 'avconv'
Kevin Bowen

9

ฉันสร้างสคริปต์เพื่อทำสิ่งนี้

ความต้องการของฉันคือ:

  • ต้องรักษาแท็กให้ได้มากที่สุด
  • ต้องเก็บภาพปกอัลบั้มหากมีอยู่
  • ต้องเป็น mp3 320K

ใช้งานได้กับไฟล์ m4a ทั้งหมดในไดเรกทอรีและส่งออกไฟล์ใหม่ที่เป็นประกายแวววาวไปยังโฟลเดอร์ที่สคริปต์สร้างขึ้นเรียกว่า Mp3 คำเตือน; สคริปต์นี้เขียนทับ Mp3s ที่มีอยู่ในโฟลเดอร์ผลลัพธ์หากมีชื่อเดียวกัน นอกจากนี้ยังใช้ไฟล์ 'metadata.txt' และ 'metadata2.txt' เป็นไฟล์ temp

คุณจะต้องติดตั้ง 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

นี่คือสิ่งที่ฉันกำลังมองหา
Rom098

สคริปต์นักฆ่าเปลี่ยนavconvไปเป็นffmpegและนั่นก็ทำงานได้ โปรดอัปเดตคำตอบเพื่อรวมคำอธิบายสำหรับคำสั่งต่างๆ!
George Udosen

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


1
ถ้าคุณไม่ต้องการคอมไพล์ ffmpeg: sudo apt-get install libavcodec-extra-53
z7sg

1

ใน L-Ubuntu ของฉันlibav-toolsไม่สามารถใช้งานได้ ฉันติดตั้งแล้วwinff:

sudo apt-get install winff

ซึ่งมีเครื่องมือกราฟิกในการแปลงไฟล์เสียงและวิดีโอจากและเป็นรูปแบบที่แตกต่างกัน

เพียงแค่พยายามที่มันทำงานที่ดีสำหรับ.m4aการ.mp3:-)

มิเช่นนั้นvlcจะเล่น.m4aไฟล์ได้อย่างยอดเยี่ยม:

sudo apt-get install vlc


0

สคริปต์ Nautilus

นี้Nautilus สคริปต์ช่วยให้ผู้ใช้ในการแปลงไฟล์ที่เลือก (s) เช่นM4Aไฟล์ mp3 --skipping ใด ๆ หรือ files-- ไม่ใช่เสียง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

ฉันรู้ว่าคำถามนี้ค่อนข้างเก่า แต่ฉันคิดว่าผู้คนยังคงเห็นคำถามนี้ (เช่นฉัน) ดังนั้นฉันจึงแบ่งปันสิ่งที่ฉันพบว่าใช้งานได้สำหรับฉันและมี UI ที่ดี: fre: ac ( https: //www.freac .org / ) ที่จะใช้ในอูบุนตูเพียงดาวน์โหลดไบนารีสำหรับอูบุนตูขยายและเรียก Calle ไฟล์freacที่มัน สนุก!


0

คำถามเก่า แต่ฉันไม่เห็นวิธีแก้ปัญหาที่ง่ายมาก: ใช้VLC

ใน VLC คุณสามารถโหลดไฟล์. m4aและแปลงเป็น. MP3 ได้ง่ายมาก

  1. เปิด VLC (ไม่จำเป็นต้องโหลดไฟล์ใด ๆ )

  2. คลิกที่สื่อหรือกดCTRL + R

  3. คลิกที่แปลง/ บันทึก

  4. บนโปรไฟล์เลือกMP3

  5. เลือกจุดหมายปลายทาง

  6. คลิกที่เริ่มและรอ หากต้องการทราบว่าทำอะไรหรือไม่ให้ดูที่แถบเวลา

ฉันหวังว่านี่จะเป็นประโยชน์สำหรับทุกคน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.