【问题标题】:How to convert High bitrate MP3 to lower rate using FFmpeg如何使用 FFmpeg 将高比特率 MP3 转换为低比特率
【发布时间】:2017-08-14 08:23:09
【问题描述】:

我们想将 320kbps mp3 文件转换为 128kbps mp3,所以目前我们正在使用下面的 ffmpeg 命令,但它不起作用。

ffmpeg -i input.mp3 -codec:a libmp3lame -qscale:a 5 output.mp3

结果:-输出码率与输入mp3相同。

我们正在遵循 FFmpeg 编码指南,这是链接:- https://trac.ffmpeg.org/wiki/Encode/MP3

所以请提出任何解决方案。

【问题讨论】:

  • 您有正在使用的 (Android) FFmpeg 构建的链接或名称吗?
  • 经过多年的 FFmpeg 使用,我傲慢地不需要检查如何设置音频比特率 - 我可以告诉你......现在阅读你的链接后,我看到你在看 Variable比特率 (VBR) 设置,-qscale:a 5 的目标是平均比特率约为 130kbps。无论如何,您的问题听起来确实像您想要 128kbps 的 恒定比特率 (CBR)。 PS:我想知道您的 FFmpeg 构建,因为您无法通过设置 -qscale:a 5 输入 320kbps 并获得完全相同的 320kbps 输出。它出什么问题了?我想检查...
  • 这似乎与 Android 无关,一般与 ffmpeg 无关。建议删除android 标签并更新标题。

标签: audio ffmpeg bitrate


【解决方案1】:

我尝试了您显示的命令(在 Windows/命令行上测试):

ffmpeg -i input.mp3 -codec:a libmp3lame -qscale:a 5 output.mp3

结果:对我有用。然而,-qscale:a 5 让 FFmpeg 为您决定平均比特率。通过一个 (320k) MP3 文件,我得到了 134kbps 的近距离转换。这是expected,因为:

lame option   Average kbit/s  Bitrate range kbit/s    ffmpeg option
   -V 5             130           120-150                -q:a 5

解决方案
不是让内部 mp3 帧保持不同的比特率(为了适应“当前”感知的音频而变化,例如:认为与“繁忙”音频部分相比,“静音”部分使用较小的比特/字节率),因此只需根据需要设置 128kbps恒定比特率。

我只需手动明确地将其设置为常量128kbps

ffmpeg -i input.mp3 -codec:a libmp3lame -b:a 128k output.mp3

【讨论】:

  • 感谢您的回复,但我们已经尝试了您给定的命令,但在转换后的输出日志中音频比特率为 320 kbps。所以我尝试使用 android FFmpegAndroid 库。所以它不适合我们。跨度>
  • 下面是日志。但是 mp3 的比特率为 320Kbps 输出 #0,mp3,到 '/storage/AUD_1490697495080.mp3':元数据:TIT2 :Jab Tak TALB :MS Dhoni TPE1 :Armaan TSSE :Lavf56.4.101 Stream #0:1: Audio:mp3,44100 Hz,stereo,320 kb/s frame=1 fps=0.0 q=0.0 Lsize=1470kB time=00:00:15.00 bitrate=802.2kbits/s跨度>
  • 所以输出文件AUD_1490697495080.mp3 是与输入文件名不同 的名称,对吧?我的意思是之后你有两个单独的文件都是 320k,对吗?我正在尝试可视化您的问题,如果关于两个文件 @ 320k 是肯定的,那么您的结果只有在使用 -codec:a copy 而不是 -codec:a libmp3lame 时才会发生...这就是为什么我需要知道您的确切 FFmpeg 构建(有一个链接?)来测试完全相同的东西,因为也许你有一个错误的版本......
  • 对我来说 20MB mp3 转换为 3.6 MB 文件。非常感谢
  • 错误:“在流 #0 中找不到编解码器 h264 的标记,容器当前不支持编解码器”。显然我们需要一些方法来告诉 ffmpeg 它只是音频。有什么想法吗?
【解决方案2】:

我使用这个 shellscript 是为了不一遍又一遍地访问这个 stackoverflow 页面 :)

#!/bin/bash
[[ ! -n $1 ]] && { 
    echo "Usage: mp3convert <input.mp3> <output.mp3> <bitrate:56/96/128/256> <channels> <samplerate>"
    exit 0
}
set -x # print next command
ffmpeg -i "$1" -codec:a libmp3lame -b:a "$3"k -ac "$4" -ar $5 "$2"

【讨论】:

  • -ar 实现了我对 -b:a 的期望
【解决方案3】:

确保您的 FFmpeg 版本启用了libmp3lame。选择的答案对我不起作用,但确实如此:

ffmpeg -v debug -i "input.mp3" -c:a libmp3lame \
   -b:a 128k -ac 2 -ar 44100 -vn "output.mp3"

-ac 2 - 输出有 2 个(立体声)音频通道 -ar 44100 - 44100Hz 的采样率,非常适合高品质音乐。

虽然,我不建议在 2022 年转换为 128kbps,因为现在存储空间更加便宜和丰富。

我认为-b:a 192k 对大多数人来说在压缩和质量之间取得了最佳平衡(除非你是一个拥有 1000 美元耳机的发烧友,即使那样你还是最好还是使用 FLAC)。

【讨论】:

    猜你喜欢
    • 2013-04-12
    • 2016-10-12
    • 2013-08-25
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2014-02-14
    相关资源
    最近更新 更多