【问题标题】:ffmpeg conversion - keep audio bitrateffmpeg 转换 - 保持音频比特率
【发布时间】:2012-06-25 20:00:55
【问题描述】:

我正在使用 ffmpeg 从不同的视频格式(flv、mp4)中提取音频并将其转换为 mp3。

%~dp0ffmpeg.exe -i %1 -ar 44100 -ac 2 -ab 128k "%~dpn1.mp3"

这很好用。但是,在我的输入文件中,音频比特率会有所不同,我想相应地调整输出比特率。即使通过广泛的谷歌搜索,我也没有找到任何提示如何保持原始比特率。

我需要的是这样的:

-ab copy

这当然行不通。

有什么可以用的吗?

P.S:正如您可能从上面的格式中得出的那样,我使用的是 Windows 批处理文件。使用 %~dp0ffmpeg.exe -i 会有技巧,通过 grep 获取音频比特率并将其插入命令行。我只是认为必须是一种更简单、更优雅的方式。

【问题讨论】:

  • 复制比特率通常不是一个好主意。不是所有的编码器都是平等的,你能相信对你的输入进行编码的人知道他们在做什么吗?另外,这个问题更适合superuser.com。如果您愿意,我相信您可以标记您的问题并要求将其移动。
  • 谢谢,这似乎是合理的,你真的让我想到了那里。所以我想我会坚持更高的质量以尽量减少质量损失,因为最终的 mp3 大小并不重要。
  • 如果您不关心特定的输出文件大小,请使用-aq-q:a(相当于lame -V)选择输出质量级别并创建VBR 输出。请参阅 Recommended LAME settings 了解要使用的值(默认值为 4)。

标签: batch-file ffmpeg


【解决方案1】:

尽管最初的帖子是在寻找答案而没有 grepping 任何东西,但 nate 的脚本似乎是最有用的帖子。但它有一些限制,例如,并非所有输出都给你一个比特率 grepped,一些投票给你只是结果“默认”。这是一个稍微改进的版本。

#!/bin/env bash
ext=$1
for f in *.${ext}; do
    x=${f%.*} ;
    x=${x% - YouTube}; # I usually download some song covers from YouTube.
    x=$x".mp3";
    bit=`ffmpeg -i "${f}" 2>&1 | grep Audio | awk -F", " '{print $5}' | cut -d' ' -f1`
    if [ -n "$bit" ]; then
        ffmpeg -i "$f" -ab ${bit}k "$x"
    else
        ffmpeg -i "$f" "$x" # this is if we don't have an output from the grep line above, ffmpeg will keep the original quality, that is 192k for 192k
    fi        
done

【讨论】:

    【解决方案2】:

    这是一个 bash 脚本,它将采用文件扩展名并从具有该扩展名的任何文件中提取音频,当然还要保持比特率。我不能声称代码的关键部分的功劳,因为那是 the gentleman that writes this blog.

    #!/bin/bash
    
    ext=$1
    
    for file in *.${ext}; do
        tmpfn=${file%.*} ; # get rid of file ext
        tmpfn=$tmpfn".mp3"; # add mp3 file ext
        # next line gets bitrate of audio from video using ffmpeg
        bit=`ffmpeg -i "${file}" 2>&1 | grep Audio | awk -F", " '{print $5}' | cut -d' ' -f1`
        # finally, convert to mp3 using proper bitrate
        ffmpeg -i "$file" -ab ${bit}k "$tmpfn"
    done
    

    只需在您拥有文件的目录中运行它,如下所示:

    $bash script.sh flv
    

    其中 flv 是文件扩展名。破解它以使其完全按照您的意愿执行或处理多种文件类型以满足您的需求。

    编辑:对于 Ubuntu/debian/etc 上的任何人来说只是一个简短的说明。确保您安装了额外的编解码器包,否则它将无法工作,即您必须安装 ffmpeg 和额外的 libav 编解码器包,否则您将度过一段糟糕的时光。这应该可以解决问题:

    sudo apt-get ffmpeg libavcodec-extra-53
    

    【讨论】:

      【解决方案3】:

      正如 LordNeckbeard 所说,使用相同的比特率以不同的格式进行编码并不一定是明智的。不过……

      这是一个批处理文件解决方案,它捕获输入文件比特率并将其用作编码命令行的参数。最初的提问者暗示了这种方法。 mp3 输出文件创建在与输入文件相同的文件夹中。

      @ECHO OFF
      SETLOCAL ENABLEDELAYEDEXPANSION
      REM Usage: scriptname.cmd "full-quoted-path-to-input-file"
      REM Adjust FFMPEG_PATH variable value to match the path to your FFMPEG binary
      
      SET FFMPEG_PATH=C:\Program Files\ffmpeg-20170807-1bef008-win64-static\bin
      SET INPUT_FILE_FULL_PATH=%1
      
      REM Get input file bitrate
      FOR /F "tokens=5 delims==," %%i IN ('""%FFMPEG_PATH%\ffmpeg.exe" -i %INPUT_FILE_FULL_PATH% 2>&1 | find "Audio:""') DO (
          FOR /F "tokens=1 delims==k" %%j IN ('ECHO %%i') DO ( 
              SET BITRATE=%%j
              SET BITRATE=!BITRATE: =!
              ECHO Input file bitrate is !BITRATE! kb/s
          )
      )
      
      REM Encode file using previously captured bitrate
      "%FFMPEG_PATH%\ffmpeg.exe" -i %INPUT_FILE_FULL_PATH% -ar 44100 -ac 2 -ab !BITRATE!k "%~dpn1.mp3"
      

      还有收紧代码的空间,例如,检查以确保提供了至少一个参数,并且在开始编码之前BITRATE 不为空,但作为一个粗略且现成的解决方案,这应该做的很好。

      【讨论】:

        【解决方案4】:

        当前版本的 ffmpeg(已测试 2.1.4)建议使用“-qscale 0”来保持质量。这对我的 mpeg4 视频测试文件有用。

        【讨论】:

        • -qscale 0 不适用于海报要求的音频比特率
        【解决方案5】:

        尝试此选项:-codec copy-acodec copy 仅用于音频。
        检查此参考http://ffmpeg.org/ffmpeg.html#Stream-specifiers-1

        【讨论】:

          【解决方案6】:

          而不是

          -ab copy
          

          试试

          -sameq
          
          
          %~dp0ffmpeg.exe -i %1 -sameq "%~dpn1.mp3"
          

          【讨论】:

          猜你喜欢
          • 2017-05-08
          • 2018-04-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-11
          • 1970-01-01
          • 1970-01-01
          • 2017-09-01
          相关资源
          最近更新 更多