如何将m4a声音文件转换为mp3?

我尝试过:

$ 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 

正如DenilsonSá所说,ffmpeg已被弃用。 这在Ubuntu 14.04上对我有用:

 avconv -i input.m4a ouptut.mp3 

要获取avconv命令,请安装libav-tools 安装libav-tools

 sudo apt-get install libav-tools 

SoundConverter可以做到这一点,而不必在命令行上乱七八糟,它可以在Ubuntu软件中心使用:

通过软件中心安装

soundcoverter主窗口和首选项

转化进展

简单的方法是:

 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 -ol: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 

我需要一个替代解决方案,因为 – 我的文件位于递归子目录中 – 我在路径中有空格。

所以我最终选择了:

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

然后删除原始文件:

 find . -type f -name '*.m4a' -exec bash -c 'rm "$0"' '{}' \; 

我创建了一个脚本来执行此操作。

我的要求是:

  • 必须保持尽可能多的标签
  • 如果存在,必须保留专辑封面
  • 必须是320K的mp3

适用于目录中的所有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=.*$//' 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 

有时avconv和ffmpeg不能那么干净,所以:

 sudo apt-get install faad lame faad myfile.m4a lame myfile.wav myfile.mp3 

总是适合我。

您可能需要medibuntu存储库中不受限制的libav包。 就个人而言,我会用所有编解码器编译最新的ffmpeg,就像123 http://ubuntuforums.org/showthread.php?t=786095一样简单

Nautilus脚本

这个Nautilus脚本允许用户使用ffmpeg将选定的文件(如m4a文件 – 使用任何mp3或非音频文件)转换为mp3格式,在同一位置。 除了年份,新的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 

我知道这个问题有点旧,但我认为人们仍然会看到这个问题(像我一样),所以我分享了我发现的对我有用的东西,并且有一个很好的用户界面:fre:ac( https://www.freac .org / )。 要在ubuntu中使用,只需为ubuntu下载二进制文件,解压缩并运行文件calle freac ,就是这样。 请享用!