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


64

我尝试使用以下命令将.m4a文件转换为文件:.mp3ffmpeg

$ 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。您还可以配置fformattformatvar来更改要在其间转换的音频格式。
Braden Best

Answers:


51

这在Ubuntu 14.04上对我有用:

avconv -i input.m4a ouptut.mp3

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

sudo apt-get install libav-tools

16
不建议使用FFMPEG。AvConv是一个分叉,当有人用FFMPEG可执行文件名称调用该消息时,它决定将该消息放入
David Davies-Jones

2
仅供参考。从18.04版本开始,库中不再包含libav-tools和avconv。
凯文·鲍文

1
ffmpeg如问题中所指定的那样,直接使用macOS 10.14.4上的ffmpeg 4.1.3对我来说很好用。
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,我可以看到libmp3lame0libmp3lame-dev。我尝试安装libmp3lame0,但没有任何改变。
汤姆·布里托

1
ffmpegavconv在较新的Ubuntu / Debian版本中已被替换。见askubuntu.com/questions/432542/...并安装libav-tools
德尼尔森Sá马亚

这不起作用,因为ffmpeg不在Ubuntu仓库中……而且avconv或libav-tools也没有。谁能负责音频软件,请停下来转转并稳定下来吧?
彼得·弗林

根据问题,需要将“ EXT =“ mp4””更改为“ EXT =“ m4a””。我想补充以下说明文字,使认识更简单:“#示例:将所有文件转换与扩展#‘M4A’到‘MP3’#庆典SCRIPT_NAME -b 256 -v当前目录”
爱德华多卢西奥

从15.04版本开始,ffmpeg返回到回购中:webupd8.org/2014/11/ffmpeg-returns-to-official-ubuntu.html从18.04版本开始,libav-tools和avconv不再可用。
Kevin Bowen

40

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

通过软件中心安装

声音发现者主窗口和偏好

转换进行中


如果您的文件被MusicBrainz标记,则可以找到另一种解决方案: bugs.launchpad.net/soundconverter/+bug/1174949
HDave

3
基督on着拐杖,真是一团糟。Soundconverter失败是因为Python缺少某些软件包,然后它弹出了一个安装程序窗口,显示了另外20多个软件包,当然它们都无法安装,因为它不是以root身份运行。有人需要重写安装程序和依赖项。
彼得·弗林

程序未加载Ubuntu 14.04


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}“” '{}' \;

1
将“ ffmpeg”替换为“ avconv”可以成功使用此命令。
凯文·鲍文

9

我创建了一个脚本来做到这一点。

我的要求是:

  • 必须维护尽可能多的标签
  • 如果存在,必须保留专辑插图
  • 必须为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=.*$//' <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

在我的L-Ubuntu上,libav-tools不可用。我安装了winff

sudo apt-get install winff

它提供了一种图形工具,可以将音频和视频文件转换为多种不同格式。

只是尝试:它工作得很好.m4a,以.mp3:-)

否则vlc在播放.m4a文件方面也做得很好:

sudo apt-get install vlc


0

鹦鹉螺脚本

这个Nautilus脚本允许用户使用ffmpegm4a文件(跳过任何mp3或非音频文件)之类的选定文件转换为mp3格式。新的mp3文件将具有最高的可变比特率,并保留除了year以外的大多数标签

#!/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 /)。要在ubuntu中使用,只需下载ubuntu的二进制文件,解压缩并运行文件calle即可freac。请享用!


0

旧问题,但我看不到一个非常简单的解决方案:使用VLC

在VLC中,您可以轻松加载.m4a文件并将其转换为.MP3

  1. 打开VLC(无需加载任何文件)

  2. 单击媒体或按CTRL + R

  3. 单击转换/保存

  4. 配置文件中选择MP3

  5. 选择目的地

  6. 单击开始并等待。要知道它是否在做某事,请查看时间栏。

我希望这对某人有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.