Mejor forma de manejar una carpeta con múltiples formatos de audio

Vale, tengo una carpeta llena de archivos .mkv que quiero procesar. Estoy intentando averiguar cómo manejar correctamente el audio.

Mis archivos son una mezcla de estéreo y sonido envolvente; incluso hay algo de mono. Mi objetivo es configurar una tarea que tome todo lo de 2 canales o menos y use un conjunto de ajustes de audio, mientras que usa un conjunto diferente para cualquier cosa con más de 2 canales. Esta funcionalidad ya está integrada en MCEBuddy para AC3, pero solo funciona con AC3, lo que significa que ignora DTS, etc.

Estaba pensando en hacer un passthrough de algunos formatos como AAC, ya que lo más probable es que sea la fuente de 2 canales, pero también tengo eac3, ac3, flac, etc. de 2 canales. Así que adivinar si el audio es de 2 canales basándome solo en el codificador no funcionará. Hacer passthrough del audio de 6 canales me funciona bien si la fuente es ac3 o eac3, pero no querría hacer passthrough de DTS. El objetivo es reducir el tamaño del archivo, y DTS es un poco demasiado pesado para eso.

Recuerdo haber visto un hilo donde alguien tenía un comando de línea de comandos que hacía passthrough del audio dependiendo del bitrate del audio. La lógica era que si el bitrate del audio está por debajo de 200 kbps, lo más probable es que sea de 2 canales o menos. Por encima de eso, lo más probable es que sea de 6 canales, etc. Lamentablemente, no guardé el enlace del hilo y no puedo encontrarlo por más que lo intento.

Así que estoy buscando ayuda y sugerencias. ¿Cómo manejarías una carpeta como esta?

Aquí tienes una idea alternativa usando perfiles. Los perfiles de MCEBuddy cuentan con una función llamada combinaciones no admitidas. Básicamente, para un codificador de perfil puedes especificar combinaciones no admitidas de parámetros de vídeo, audio y contenedor. Si encuentra esta combinación, se omite ese codificador y pasa al siguiente. Más detalles aquí:

Con este parámetro puedes abordar esto de dos formas distintas:

  1. Usar el primer codificador para no manejar ciertas combinaciones (por ejemplo, handbrake no maneja flujos DTS y copia las pistas de audio) y luego otro para manejar el resto (ffmpeg codifica todas las pistas de audio en ac3). Un ejemplo de esto se vería así (solo la parte relevante del perfil, necesitas completar el resto):

    order=handbrake,ffmpeg
    handbrake-unsupported=dts
    handbrake-audio=-E copy
    handbrake-audioac3=-E copy
    ffmpeg-audio=-acodec ac3 -ab 384k
    ffmpeg-audioac3=-acodec ac3 -ab 384k

  2. El segundo enfoque es usar perfiles con tareas de conversión: creas 2 perfiles, especificas solo un codificador en cada perfil y para un perfil especificas dts como no admitido y para el otro especificas aac,ac3 como no admitidos. Creas dos tareas de conversión, cada una usando uno de los dos perfiles creados anteriormente. Ahora solo fallará la tarea con el perfil que no admite el códec de audio y la otra se ejecutará

El enfoque de “fall through” fue lo primero que miré justo después de publicar. Es interesante y bastante ingenioso en cuanto a que te permite aislar tus ajustes por formato. Desafortunadamente, no es realmente lo que necesito.

Mi problema es que el mismo códec/formato viene en múltiples sabores de canales. Con Atmos o DTS es prácticamente un hecho que el sonido no va a ser 2.0, pero con EAC3 o AC3 o incluso AAC o Flac podría ser 2.0 o 5.1. Así que puedo recorrer el orden de perfiles hasta encontrar uno para, digamos, AAC, pero entonces no tengo forma de saber si es AAC 2.0 o 5.1, etc. Básicamente, aislar un códec no es lo que necesito. Necesito averiguar si la transmisión es 2.0 o surround, y que MCEBuddy ajuste automáticamente la configuración en consecuencia.

MCEBuddy sí tiene un mecanismo incorporado para averiguar lo de 2.0 vs 5.1, pero solo funciona con AC3. Por ejemplo, tomé el mismo perfil que publicaste arriba y cambié el ffmpeg-audio a 192, ya que es más adecuado que 384 para sonido estéreo.

order=handbrake,ffmpeg
handbrake-unsupported=dts
handbrake-audio=-E copy
handbrake-audioac3=-E copy
ffmpeg-audio=-acodec ac3 -ab 192k
ffmpeg-audioac3=-acodec ac3 -ab 384k

Si uso estos ajustes y le doy un archivo EAC3 5.1, producirá un archivo con audio de 192k. Si el formato de salida estuviera configurado como AAC produciría audio de 256k, etc.

Lo mismo ocurre con AAC 2.0 vs 5.1, etc. AC3 funcionará como se espera, ya que la lógica para él, y solo para él, ya está incorporada y producirá 192 2.0 o 384 5.1. Básicamente, con cualquier cosa que no sea AC3, la línea/comando ffmpeg-audioac3 se ignora por completo y no tiene ningún efecto en la conversión; solo la línea ffmpeg-audio es utilizada por MCEBuddy. Si has marcado la casilla de sonido envolvente en la interfaz gráfica, MCEBuddy pasará una bandera -6ch a la línea ffmpeg-audio y las tratará como tus ajustes de surround.

En mi ejemplo usé 192k para la salida 2.0 y 384 para la salida 5.1. Dado que AAC no es AC3, MCEBuddy ignorará el ffmpeg-audioac3=-acodec ac3 -ab 384k y usará la configuración ffmpeg-audio=-acodec ac3 -ab 192k. Si marqué que quiero surround en la interfaz gráfica, pasará la bandera -6ch y terminaré con algo como ffmpeg-audio=-acodec ac3 -ab 192k -6ch. Si mi salida también es AAC, entra en juego algún tipo de salvaguarda interna una vez que comienza la conversión que no permite una mezcla 5.1 a 192k. Automáticamente aumentará la tasa de bits a 256 (el mínimo para AAC 5.1). Así que al final terminaré con un archivo 5.1 de 256k. No estoy seguro de si hace lo mismo con otros formatos.

Idealmente, sería genial si ffmpeg-audioac3 funcionara como una configuración universal para todo el surround, no solo AC3, mientras que ffmpeg-audio manejaría entonces toda la mezcla 2.0. Pero esa función simplemente no está ahí. Encontrar una solución alternativa ha resultado desafiante hasta ahora.

siempre puedes abrir una solicitud de función para manejar etiquetas como <encoder>-audiodts o similares para audio que no sea ac3.

Si -audiodts funcionara con el mismo principio que -audioac3, entonces debería funcionar, pero entonces necesitaría uno para cada formato — -audioflac, -audioaac, etc., etc., etc.

Creo que una solución más sencilla sería algo como
ffmpeg-audio <=2ch - configuración 192kb
ffmpeg-audio >2ch - configuración 448kb

En otras palabras, la verificación debería hacerse por la cantidad de canales de audio, no por el códec. Así sería completamente irrelevante cuál sea el códec de entrada. Alimentas con Flac o AAC que tenga 2 canales, y devolverá 192k. Le das el mismo archivo Flac o AAC con más de 2 canales, y devolverá 448kb, etc.

Hasta ahora, mi códec de salida predeterminado es EAC3 a 448. Funciona muy bien para 6 canales, pero como MCEBuddy no distingue si la entrada tiene 2 o 6 canales de audio, me deja con audio estéreo a 448k en archivos que solo tienen 2.0. 448 para estéreo es un desperdicio, y eso es lo que intento evitar.

También me doy cuenta de que esta función está fuera del alcance de este programa. Está diseñado para cortar comerciales y reducir archivos de un DVR. Ningún DVR, que yo sepa, graba en EAC3, Flac o AAC, etc., así que estaría pidiendo al desarrollador que codifique/agregue algo que no tiene nada que ver con la funcionalidad principal del programa. Me siente mal hacer esto, y desearía poder encontrar mi propia solución.

No te sientas mal, crea una solicitud de función y explica la necesidad y las sugerencias, y ábrela a una discusión para que podamos implementar la mejor manera de avanzar.

Hecho.

Veamos qué pasa :slight_smile: