¿Qué codificadores de audio en FFmpeg admiten 8 kHz?

¿Qué codificadores de audio en FFmpeg admiten 8 kHz?

Tengo un vídeo antiguo (realizado por una Casio Exilim EX-Z40, si es importante), cuya transmisión de audio ffprobeinforma como pcm_u8, 8000 Hz, mono, u8.

Me gustaría transcodificarlo a algo moderno.

La transcodificación con los valores predeterminados de FFmpeg falla:

¡libfaac no admite este formato de salida!

Presumiblemente, libfaac no admite 8 kHz, porque -c:a copyfunciona.

¿Qué codificadores admiten una frecuencia de muestreo de 8 kHz? Ellista encontrada aquíapenas menciona las tasas de muestreo.

¿Puedo escribir algo que pruebe todos los códecs instalados, desde...

ffmpeg -codecs | grep EA`

…para ver directamente cuáles funcionan?

Respuesta1

El codificador nativo FFmpeg AAC ( -c:a aac) admite una frecuencia de muestreo de 8000 Hz:

ffmpeg -h encoder=aac
...
Supported sample rates: 96000 88200 64000 48000 44100 32000 24000 22050 16000 12000 11025 8000 7350

Elegirá automáticamente la frecuencia de muestreo que más se asemeje a la entrada, por lo que no es necesario declarar -ar:

ffmpeg -i input.mov -c:a aac output.m4a

¿Qué codificadores de audio en FFmpeg admiten 8 kHz?

aac, aptx, aptx_hd, dca, flac, g723_1, libfdk_aac, libmp3lame, libopus, libspeex, libvorbis, real_144, wavpack, muchas variantes de pcm.

Probablemente haya otros, pero los informes sobre ellos supported_sampleratesson inconsistentes.

Me gustaría transcodificarlo a algo moderno.

libfaac ha sido eliminado de FFmpeg durante años y no se considera un codificador AAC moderno. Debes ffmpegser anciano. Actualice y use el codificador nativo FFmpeg AAC, o compile y use libfdk_aac.

Si quieres el uso más moderno libopus.

Pero cuando probé [aac], en comparación con el original, el tamaño del archivo aumentó y algunas frecuencias altas se atenuaron.

Como sospecho que ffmpeges muy antiguo, es probable que le falten las principales actualizaciones de calidad del codificador aac. Es probable que la actualización y la calidad mejoren.

Respuesta2

La frecuencia de muestreo y el códec son parámetros diferentes. Lo más probable es que quieras algo parecido a

-ar 48000 -c:a aac

Para aumentar la muestra de 8 KHz a 48 KHz y comprimir a AAC

Respuesta3

8 KHz es bastante estándar para el habla, lo que se conoce como "banda estrecha". Si esto es discurso, entonces debería tener muchas opciones, aunque no muchas son compatibles con FFmpeg de fábrica. Probablemente las mejores opciones sean

Sin embargo, PCM de 8 bits y 8 KHz no es una muy buena fuente en primer lugar: la mayoría de los codificadores esperan una mejor entrada, por ejemplo, ley mu G.711 de 8 bits, que efectivamente son datos de 12 bits codificados como 8 bits. punto flotante. Es posible que no les vaya bien con la entrada PCM pura de 8 bits, ya que es posible que no se ajuste a los patrones de voz para los que están modelados.

También es un archivo bastante pequeño y es posible que su contenedor de video no admita códecs más complicados. Así que creo que esto es más problemático que útil y dejaría el audio como está.

Respuesta4

Opusgeneralmente se considera el mejor códec de baja velocidad de bits disponible, yno tiene problemascon una frecuencia de muestreo de entrada de 8 kHz. El flujo de obra resultante aún se puede decodificar a cualquier frecuencia de muestreo que sea conveniente para el decodificador. (Al igual que otros códecs con pérdida, se comprime según las bandas de frecuencia después de realizar una FFT. Pero aparentemente algunos otros códecs solo quieren decodificar a la misma frecuencia de muestreo que la entrada. Como señalan otras respuestas, ustedpoderhaga que FFmpeg vuelva a muestrear la entrada antes de pasarla al códec, pero no lo necesita para Opus.

Intentarffmpeg -c:a libopus -b:a 24k -frame_duration 120para Opus de 24 kbit/s.

Quizás valga la pena intentarlo: -application voipsintonizar una "inteligibilidad de voz mejorada" en lugar del audioperfil predeterminado.

-frame_durationCreo que establecer el valor más alto reduce los gastos generales. No le importa la latencia del codificador/decodificador porque solo tiene archivos, no un chat de voz bidireccional en tiempo real. Por lo tanto, puede dejar que almacene en buffer 120 ms de audio y empaquetar múltiples fotogramas CELT o SILK para reducir la redundancia de los encabezados de los fotogramas.


El mejor codificador Opus disponible es el de código abierto y gratuito libopus(https://opus-codec.org) por lo que FFmpeg puede usarlo, a diferencia de AAC, donde los mejores codificadores son de código cerrado.

Opus tiene modos especiales para voz con velocidades de bits muy bajas (como 16 kb/s), detectando voz e incluso cambiando a un codificador específico de voz (SILK) a velocidades de bits bajas.

Las herramientas de codificación de baja tasa de bits de Opus son similares a lo que puede hacer HE-AACv2, consulteel artículo de wikipedia.


Pero cuando lo probé, en comparación con el original, el tamaño del archivo aumentó...

Parte del objetivo de la compresión con pérdidas es que puedeselegirla tasa de bits de salida, compensando la calidad. La mayoría de los códecs pueden utilizarse, -b:a 32kpor ejemplo, para elegir una tasa de bits de audio de 32 kbit/s.

(Para video, también puede compensar el tiempo de CPU dedicado a la codificación, por ejemplo, -preset veryslow versus -preset medium. Pero comprimir audio es lo suficientemente económico como para que la mayoría de los códecs no tengan muchas opciones para dedicar más tiempo de CPU a mejorar la tasa de bits. versus compensación de calidad.)

PCM mono de 8 bits y 8 kHz tiene una tasa de bits de 64 kbit/s = 8 * 8000, por lo que su objetivo es inferior a eso; de lo contrario, también puede conservar sus archivos originales. PCM son solo muestras sin procesar, por lo que la tasa de bits es solo un producto de la frecuencia de muestreo y el ancho de muestra. Como el equivalente en audio de una .bmpimagen de mapa de bits. Esto es muy ineficiente y es la razón por la que se inventaron mejores códecs. (Y como sabrás al escuchar, ahorrar velocidad de bits para PCM tiene un costo enorme en cuanto a calidad y frecuencia.rangoporque la tasa de bits está vinculada 1:1 con la tasa de muestreo. Ese no es el caso cuando se cuantifica en el dominio de la frecuencia con un códec con pérdida).


y algunas frecuencias altas fueron atenuadas. Entonces, peor que-c:a copy

El codificador AAC nativo de FFmpeg -c:a aacsolía ser bastante malo y estabas usando un FFmpeg antiguo. https://trac.ffmpeg.org/wiki/Encode/HighQualityAudiodice que a partir de 2017, aaca veces es mejor que libfdk_aacpara AAC-LC (alta tasa de bits de baja complejidad). Sin embargo, no menciona HE-AAC, y eso es lo que desea para AAC de baja tasa de bits.

libfdk_aac Solía ​​​​ser el mejor codificador AAC de código abierto disponible, y tal vez todavía lo sea para HE-AAC. AFAIK, sin embargo, ninguno de ellos es tan bueno como los mejores codificadores AAC gratuitos.

Para AAC de baja tasa de bits, realmente desea HE-AAC, que agrega más herramientas de codificaciónhttps://en.wikipedia.org/wiki/High-Efficiency_Advanced_Audio_Coding. No estoy seguro de -c:a aacpoder hacer eso.

https://trac.ffmpeg.org/wiki/Encode/HighQualityAudioenumera algunas configuraciones recomendadas y rangos de velocidades de bits útiles para varios codificadores.

Pero probablemente quieras Opus, o posiblemente AMR-NB (banda estrecha) para velocidades de bits como 4 kbit/s. no se cuantos años tienela trama de calidad versus tasa de bits en el artículo wiki de OpusLo es, pero muestra AMR-NB con mayor calidad que Opus por debajo de 8 kb/s.

Con esos pocos bits, es posible que puedas entender el habla, pero no sonará.lindo. Es sólo una cuestión de qué códec es menos horrible.

información relacionada