Preciso converter meu arquivo de áudio de entrada para o menor tamanho possível para transferi-lo por um transmissor de rádio.
Agora, com o codec AAC e o formato MP3, usei 8 kbps para taxa de bits, 16 kHz para taxa de amostragem e 1 canal, e meus dados de saída são de cerca de 3 kb por segundo.
Mas quando altero a taxa de amostragem para 8 kHz ou uma taxa de bits menor, recebo um erro informando que o codec não oferece suporte a essa configuração.
Existe uma configuração para obter uma taxa mais baixa para o arquivo de saída?
PS: Como estou trabalhando no Android, é difícil instalar codecs, então devo usar os codecs padrão ffmpeg.
Atualizar:
eu usei a linha de comando opus agora este é o meu comando:
ffmpeg -i a.mp3 -vn -c:a libopus -ac 1 -ar 8000 -b:a 500 -vbr constrained -compression_level 0 -application lowdelay output22.mkv
e o resultado é
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%
parece que opus não aceita taxas de bits inferiores a 4,9kbps :(
AAC ou MP3 não são a melhor escolha de codecs para transmissões de largura de banda ultrabaixa. Use um codec de fala adequado com maior eficiência.
Opus é a melhor opção. Está disponível em FFmpeg através de
libopus
. Na verdade, o Opus não é feito apenas para fala; oferece codificação híbrida para fala e música .Exemplo:
Aqui,
-ac
define a saída para mono,-ar
define a taxa de amostragem para 16 kHz e-b:a
define a taxa de bits para 8 kBit/s. O modo de taxa de bits variável restrita é usado aqui. Em princípio, não é estritamente necessário fazer downsampling e downmix para mono comffmpeg
, pois isso é algolibopus
que fará por conta própria para atingir a meta de taxa de bits especificada.Algumas outras recomendações são dadas aqui . Observe que com Opus, 6–8 kBit/s é a faixa utilizável para fala (mono, taxa de amostragem mais baixa), mas não para música.
Você encontrará uma comparação interessante de diferentes codecs e sua curva de taxa de bits/qualidade no site da Opus :
Devo acrescentar que este número é apenas uma indicação; é compilado a partir de diferentes resultados de testes e conhecimento anedótico.