【问题标题】:Convert audio files to mp3 using ffmpeg使用 ffmpeg 将音频文件转换为 mp3
【发布时间】:2011-03-16 09:39:05
【问题描述】:

我需要使用 ffmpeg 将音频文件转换为 mp3。

当我将命令写为ffmpeg -i audio.ogg -acodec mp3 newfile.mp3 时,我得到了错误:

FFmpeg version 0.5.2, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: 
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 1 / 52.20. 1
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  built on Jun 24 2010 14:56:20, gcc: 4.4.1
Input #0, mp3, from 'ZHRE.mp3':
  Duration: 00:04:12.52, start: 0.000000, bitrate: 208 kb/s
    Stream #0.0: Audio: mp3, 44100 Hz, stereo, s16, 256 kb/s
Output #0, mp3, to 'audio.mp3':
    Stream #0.0: Audio: 0x0000, 44100 Hz, stereo, s16, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
Unsupported codec for output stream #0.0

我也运行了这个命令:

 ffmpeg -formats | grep mp3

并得到了回应:

FFmpeg version 0.5.2, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: 
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 1 / 52.20. 1
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  built on Jun 24 2010 14:56:20, gcc: 4.4.1
 DE mp3             MPEG audio layer 3
 D A    mp3             MP3 (MPEG audio layer 3)
 D A    mp3adu          ADU (Application Data Unit) MP3 (MPEG audio layer 3)
 D A    mp3on4          MP3onMP4
 text2movsub remove_extra noise mov2textsub mp3decomp mp3comp mjpegadump imxdump h264_mp4toannexb dump_extra

我猜是 mp3 编解码器没有安装。我在正确的轨道上吗?

【问题讨论】:

    标签: audio ffmpeg media


    【解决方案1】:

    你可以使用这个命令:

    ffmpeg -i input.wav -vn -ar 44100 -ac 2 -b:a 192k output.mp3
    

    本例中使用的参数说明:

    • -i - 输入文件

    • -vn - 禁用视频,如果源是视频文件,则确保不包含视频(包括专辑封面图片)

    • -ar - 设置音频采样频率。对于输出流,它默认设置为相应输入流的频率。对于输入流,此选项仅对音频抓取设备和原始解复用器有意义,并映射到相应的解复用器选项。

    • -ac - 设置音频通道数。对于输出流,它默认设置为输入音频通道的数量。对于输入流,此选项仅对音频抓取设备和原始解复用器有意义,并映射到相应的解复用器选项。所以在这里用来确保它是立体声(2 声道)

    • -b:a - 将音频比特率转换为精确的 192kbit/秒

    【讨论】:

    • This notes the difference for the ffmpeg bitrate arguments-qscale:a 用于 VBR,-b:a 用于 CBR。 ABR 编码是可能的,但在不同的地方详细说明。
    • 我会将 -b:a 替换为 -q:a 2,这将给出 VBR ~192 而不是 CBR
    • @apanloco 对我来说,将 -b 更改为 -q 绝对会破坏声音。根本不使用任何选项,或者使用答案中提供的选项,听起来与源 .wav 几乎相同。
    【解决方案2】:

    1) wav 转 mp3

    ffmpeg -i audio.wav -acodec libmp3lame audio.mp3
    

    2) ogg 转为 mp3

    ffmpeg -i audio.ogg -acodec libmp3lame audio.mp3
    

    3) ac3 转 mp3

    ffmpeg -i audio.ac3 -acodec libmp3lame audio.mp3
    

    4) aac 转 mp3

    ffmpeg -i audio.aac -acodec libmp3lame audio.mp3
    

    【讨论】:

    • 如何指定 mp3 比特率?
    • 添加 -b:a 128k 为 128 kbps。
    • 没有acodec甚至更短:ffmpeg -i audio.aac audio.mp3
    • 如何将.mp3转为.ogg?
    • 我使用 libmp3lame 但为什么它在 VLC 上的编解码器显示为 mp2 (mpeg audio layer 1/2)???
    【解决方案3】:

    对于针对 190 VBR 且文件扩展名为 .mp3 而不是 .ac3.mp3 的文件夹中的文件进行批处理,您可以使用以下代码

    将 .ac3 更改为任何源音频格式。

    ffmpeg mp3 settings

    for f in *.ac3 ; do ffmpeg -i "$f" -acodec libmp3lame -q:a 2 "${f%.*}.mp3"; done
    

    【讨论】:

      【解决方案4】:

      没关系,

      我正在使用以下命令将我的音频文件转换为 mp2:

      ffmpeg -i input.wav -f mp2 output.mp3
      

      此命令完美运行。

      我知道这实际上会将文件转换为 mp2 格式,但是生成的文件大小是相同的..

      【讨论】:

      • 生成波形文件
      • 这不会生成 mp3 文件
      • 虽然大小相同,但这些 mp2 文件无法在网络浏览器中播放,因为它们不是 mp3。甚至没有 Flash 播放器。它们唯一的好处是它们需要更少的 cpu 来编码,但缺点是不值得。
      • 这不应该是公认的答案,因为它没有正确回答问题。
      • 要减小大小,请使用:superuser.com/a/553049/1623401
      【解决方案5】:

      对于文件夹中的批处理文件:

      for i in *.wav; do ffmpeg -i "$i" -f mp3 "${i%}.mp3"; done
      

      此脚本将文件夹中的所有“wav”文件转换为 mp3 文件并添加 mp3 扩展名

      ffmpeg 必须安装。 (查看其他答案)

      【讨论】:

      • 使用-f mp2 生成 MP2,而不是 MP3。将其更改为-f mp3
      • 以上命令创建了名为wav.mp3的文件。要获取具有正确文件扩展名的文件,请将命令更改为:for i in *.wav; do ffmpeg -i "$i" -f mp3 "${i%.*}.mp3"; done,即在i% 之后添加.*
      【解决方案6】:

      正如here 所描述的,ffmpeg 会检测到输入和输出扩展名,因此无需担心格式,只需运行以下命令:

      ffmpeg -i inputFile.ogg outputFile.mp3

      【讨论】:

        【解决方案7】:

        我必须清除我的 ffmpeg,然后从 ppa 安装另一个:

        sudo apt-get purge ffmpeg
        sudo apt-add-repository -y ppa:jon-severinsson/ffmpeg 
        sudo apt-get update 
        sudo apt-get install ffmpeg
        

        然后转换:

         ffmpeg -i audio.ogg -f mp3 newfile.mp3
        

        【讨论】:

        • 这是一种捷径,但如果你想指定每秒的质量 kb,请使用 -ab 192k
        【解决方案8】:

        https://trac.ffmpeg.org/wiki/Encode/MP3

        VBR 编码:

        ffmpeg -vn -ar 44100 -ac 2 -q:a 1 -codec:a libmp3lame output.mp3
        

        【讨论】:

        • 你忘记输入了。
        【解决方案9】:

        Mac OS 的高质量完美运行!

        ffmpeg -i input.wma -q:a 0 output.mp3

        【讨论】:

          【解决方案10】:

          似乎没有人使用find,它可以让你在一条线上完成所有事情。基于this answerthis post

          find . -type f -iname "*.webm" -exec bash -c 'FILE="$1"; ffmpeg -i "${FILE}" -vn -ab 128k "${FILE%.webm}.mp3";' _ '{}' \;
          

          对于例如播客,128k 对我来说已经足够了。您可以在其他一些参数旁边调整该参数:

          • -i - 输入文件
          • -vn - 禁用视频,以确保在源为视频文件时不包含视频(包括专辑封面图片)
          • -ar - 设置a音频采样频率requency。对于输出流,它默认设置为相应输入流的频率。对于输入流,此选项仅对音频抓取设备和原始解复用器有意义,并映射到相应的解复用器选项。
          • -ac - 设置a音频c通道的数量。对于输出流,它默认设置为输入音频通道的数量。对于输入流,此选项仅对音频抓取设备和原始解复用器有意义,并映射到相应的解复用器选项。所以在这里用来确保它是立体声(2 声道)
          • -b:a - 将音频比特率转换为精确的每秒 192kbit

          【讨论】:

            【解决方案11】:

            如果您有一个文件夹和子文件夹,其中包含要转换的 wav,请将以下命令放入文件中,将其保存在要转换的文件夹根目录下的 .bat 文件中,然后运行bat文件

            for /R %%g in (*.wav) do start /b /wait "" "C:\ffmpeg-4.0.1-win64-static\bin\ffmpeg" -threads 16 -i "%%g" -acodec libmp3lame "%%~dpng.mp3" && del "%%g"
            

            【讨论】:

              【解决方案12】:

              尝试 FFmpeg 静态构建Link

              文档:https://www.johnvansickle.com/ffmpeg/

              在您的服务器上的同一目录中托管静态构建

              $ffmpeg = dirname(__FILE__).'/ffmpeg';
              
              $command = $ffmpeg.'ffmpeg -i audio.ogg -acodec libmp3lame audio.mp3';
              
              shell_exec($command);
              

              【讨论】:

                【解决方案13】:

                我将解释如何将 webm 转换为 mac 的 mp3,我猜它也适用于 linux。

                1. 安装 ffmpeg - brew install ffmpeg (mac) 或 sudo apt install ffmpeg (linux)
                2. 创建 shell 脚本 - 打开文本编辑器,将以下代码放入:
                #!/bin/bash
                
                echo webm to mp3 converter! Work begins! 
                for FILE in *.webm; do     
                    echo -e "Processing file '$FILE'";
                    ffmpeg -i "${FILE}" -vn -ab 128k -ar 44100 -y "${FILE%.webm}.mp3";
                done;
                

                此代码将查看当前目录中所有扩展名为 .webm 的文件。

                1. 不带扩展名保存此文件(例如“my-converter”)
                2. 通过终端导航到创建的文件
                3. 通过键入命令使文件成为可执行文件:chmod 700 my-converter,现在将在同一目录中创建 unix 可执行文件 (.sh)。
                4. 在终端输入文件:./my-converter 并开始执行文件,您将在终端窗口中看到进度。

                完成。

                【讨论】:

                  【解决方案14】:

                  使用之前的答案,这是通过将以下内容添加到 .bashrc/.zshrc 中的别名:

                  alias convert-aac="cd ~/Downloads && aac-to-mp3"
                  
                  # Convert all .aac files into .mp3 files in the current folder, don't convert if a mp3 file already exists
                  aac-to-mp3(){
                      find . -type f -iname "*.aac" -exec \
                          bash -c 'file="$1"; ffmpeg -n -i "$file" -acodec libmp3lame "${file%.aac}.mp3";' _ '{}' \;
                  }
                  

                  用法convert-aac(在外壳中)

                  感谢https://stackoverflow.com/a/70339561/2391795https://stackoverflow.com/a/12952172/2391795https://unix.stackexchange.com/a/683488/60329

                  【讨论】:

                    猜你喜欢
                    • 2020-08-25
                    • 2022-01-06
                    • 2011-07-24
                    • 1970-01-01
                    • 1970-01-01
                    • 2017-02-23
                    • 1970-01-01
                    • 2015-03-17
                    • 2016-11-21
                    相关资源
                    最近更新 更多