编解码器和最低比特率 ffmpeg 输出的设置

pei*_* F. 2 audio mp3 android ffmpeg

我需要将输入音频文件转换为尽可能小的大小,以便通过无线电发射器传输。

现在,使用 AAC 编解码器和 MP3 格式,我使用 8kbps 的比特率、16 kHz 的采样率和 1 个通道,我的输出数据约为每秒 3kb。

但是,当我将采样率更改为 8 kHz 或更低的比特率时,我收到一条错误消息,指出编解码器不支持此设置。

是否有设置可以降低输出文件的速率?

PS:因为我在Android上工作,所以很难安装编解码器,所以我必须使用ffmpeg默认编解码器。

更新:

我现在使用 opus 命令行这是我的命令:

ffmpeg -i a.mp3 -vn -c:a libopus -ac 1 -ar 8000 -b:a 500 -vbr constrained -compression_level 0 -application lowdelay output22.mkv
Run Code Online (Sandbox Code Playgroud)

结果是

Input #0, mp3, from 'a.mp3':
  Metadata:
    title           : Salam (myahangha.ir)
    artist          : Sogand
    album           : Javooni
    comment         : ..:: myahangha.ir ::..
    genre           : 2019
    date            : 2019
  Duration: 00:03:15.24, start: 0.000000, bitrate: 324 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 320 kb/s
    Stream #0:1: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 500x500 [SAR 72:72 DAR 1:1], 90k tbr, 90k tbn, 90k tbc
    Metadata:
      title           : Radio Javan - Javooni.jpg
      comment         : Other
Stream mapping:
  Stream #0:0 -> #0:0 (mp3 (mp3float) -> opus (libopus))
Press [q] to stop, [?] for help
[libopus @ 0000028b84d9e200] Bitrate 500 is extremely low, maybe you mean 500k
The bitrate parameter is set too low. It takes bits/s as argument, not kbits/s
Output #0, matroska, to 'output24.mkv':
  Metadata:
    title           : Salam (myahangha.ir)
    artist          : Sogand
    album           : Javooni
    comment         : ..:: myahangha.ir ::..
    genre           : 2019
    date            : 2019
    encoder         : Lavf58.27.102
    Stream #0:0: Audio: opus (libopus) ([255][255][255][255] / 0xFFFFFFFF), 8000 Hz, mono, flt, 0 kb/s
    Metadata:
      encoder         : Lavc58.51.100 libopus
size=     116kB time=00:03:15.25 bitrate=   4.9kbits/s speed= 396x
video:0kB audio:57kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 103.282921%
Run Code Online (Sandbox Code Playgroud)

看来 opus 不接受低于 4.9kbps 的比特率:(

slh*_*hck 11

AAC 或 MP3 并不是超低带宽传输的最佳编解码器选择。使用正确的言语编解码器,效率更高。

\n\n

Opus 是最好的选择。\xc2\xa0它可以在 FFmpeg 中通过libopus. 事实上,Opus 不只是为演讲而生;它也是为演讲而生的。它为两者提供混合编码

\n\n

例子:

\n\n
ffmpeg -i <input> -c:a libopus -ac 1 -ar 16000 -b:a 8K -vbr constrained out.opus\n
Run Code Online (Sandbox Code Playgroud)\n\n

此处,-ac将输出设置为单声道,-ar将采样率设置为 16 kHz,并将-b:a比特率设置为 8 kBit/s。这里使用的是约束可变码率模式。原则上,并不严格需要使用 进行下采样和下混音为单声道ffmpeg,因为这是libopus会自行完成以达到指定的比特率目标。

\n\n

这里给出了一些进一步的建议。请注意,对于 Opus,6\xe2\x80\x938 kBit/s 是(单声道、较低采样率)语音的可用范围,但不适用于音乐。

\n\n

您会在Opus 网站上找到不同编解码器及其比特率/质量曲线的有趣比较上找到不同编解码器及其比特率/质量曲线的有趣比较:

\n\n

\n\n

我要补充一点的是,这个数字仅供参考;它是根据不同的测试结果和轶事知识编译而成的。

\n