¿Puede MCEBuddy procesar una transmisión de audio y luego procesar de nuevo la salida de ese proceso?

La razón por la que pregunto esto es que algunas cosas deben hacerse por pasos. La mayoría de mi audio en películas grabadas es AC3 5.1, así que lo convierto a estéreo AAC y luego también copio todos los flujos de audio tal cual con la siguiente configuración:

ffmpeg-audioac3=-map 0:1 -map 0:1 -map 0:2 -c:a:0 aac -ab 384k -ac 2 -c:a:1 copy -c:a:2 copy

El problema surge en que también quiero usar compresión de rango dinámico en la misma pista AAC estéreo, pero no se deben aplicar tales procesos hasta que el archivo haya sido convertido a estéreo primero… de ahí mi dilema. Necesito aplicar lo siguiente en ffmpeg:

-af dynaudnorm=f=150

a la pista AAC estéreo DESPUÉS de que MCEBuddy la haya creado, pero no sé si MCEBuddy es capaz de hacer esto y, si lo es, no estoy seguro de cómo.

Cualquier información sería muy apreciada.

Crea 2 tareas de conversión con perfiles distintos y prueba a encadenar las conversiones como se explica aquí, donde la salida de una conversión se usa como entrada de la siguiente

Entonces, si entiendo bien, una forma de hacer lo que quiero es dejar que mi configuración actual siga funcionando tal como está, luego volver a poner los archivos MKV de salida en MCEBuddy y ejecutarlos como MKV Unprocessed, pero con el primer flujo de audio —que ahora es un AAC de 2 canales— modificado con compresión de rango dinámico.

Usar ubicaciones monitoreadas crea demasiados problemas. Para mí sería más fácil simplemente volver a cargar los archivos en MCEBuddy con el perfil MKV Unprocessed ajustado a mis necesidades para modificar solo el audio y que los archivos fuente se eliminen al final. Ejecuto 40 o más conversiones a la vez y no quiero que las ubicaciones monitoreadas alimenten la cola porque, sin importar lo que me digas, todos los archivos se agregan al principio de la cola y nunca he podido evitar que esto suceda.

Estoy pensando que podría haber una forma de usar los comandos personalizados en un perfil para hacer esto. Aún no estoy seguro exactamente de cómo se vería o en qué orden debería ser, pero déjame tomarme un tiempo para investigar esto y te respondo.

Vale, esto es lo que se me ocurrió. AVISO: no pude probarlo y mi conocimiento de ffmpeg es, como mucho, mediocre. Pero podría ser un buen punto de partida para que otros aporten y ayuden.

Agrega esto al perfil que quieras usar para normalizar el audio estéreo.

CustomCommandPath=C:\Windows\System32\cmd.exe
CustomCommandParameters="/c ren "%convertedfile%" %convertedfilename%-1.%convertedext% & "C:\Program Files\MCEBuddy2x\ffmpeg\ffmpeg.exe" -i "%workingpath%\%convertedfilename%-1.%convertedext% -map 0:v -c:v copy -map 0:1 -map 0:2 -map 0:3 -af dynaudnorm=f=150 -c:a:1 copy -c:a:2 copy "%convertedfile%" & del "%workingpath%\%convertedfilename%-1.%convertedext%""
CustomCommandHangPeriod=3600
CustomCommandCritical=false
CustomCommandUISession=false
CustomCommandShowWindow=false
CustomCommandExitCodeCheck=false

Básicamente, esto debería funcionar así: después de que el archivo se haya convertido, pero antes de que se mueva al destino, se ejecutará CMD con los parámetros indicados. Vamos a desglosar los parámetros:

/c

Abre el símbolo del sistema y se cierra al terminar. No te preocupes por esto.

ren “%convertedfile%” %convertedfilename%-1.%convertedext%

Esto renombra el archivo convertido en su ubicación actual (como estamos usando CustomCommand, estará en el directorio de trabajo) añadiéndole un -1. Lo renombramos para que nuestro nuevo archivo pueda tener el nombre final que debe tener después de que terminen estos comandos personalizados y MCEBuddy retome el control.

&

Significa básicamente “nuevo comando a ejecutar”. No te preocupes por esto. Si quieres más comandos, sepáralos con &.

“C:\Program Files\MCEBuddy2x\ffmpeg\ffmpeg.exe” -i “%workingpath%%convertedfilename%-1.%convertedext% -map 0:v -c:v copy -map 0:1 -map 0:2 -map 0:3 -af dynaudnorm=f=150 -c:a:1 copy -c:a:2 copy “%convertedfile%””

Aquí está la magia real; si hay que ajustar algo, será dentro de esta línea. Esto debería copiar el video tal cual, aplicar la normalización a la primera pista de audio y copiar las otras dos pistas sin cambios.

del “%workingpath%%convertedfilename%-1.%convertedext%”

Borra el archivo original que renombramos en el primer comando. Limpiando un poco.

1 me gusta

Muchísimas gracias… Lamento que me haya tomado tanto tiempo verlo y probarlo, pero acabo de hacerlo con una muestra de prueba de 5 minutos que uso para probar perfiles y los comandos personalizados se ejecutaron. Ahora mi única pregunta es: ¿cómo puedo verificar que realmente se aplicó la compresión de rango dinámico? Oh, espera… puedo extraer el audio tanto del archivo fuente como del convertido y compararlos en un editor de audio.

EDIT… Lo revisaré en un editor de audio cuando tenga tiempo, pero solo escuchando el original y el convertido puedo notar una diferencia en que los efectos de sonido no son tan abrumadores, aunque siguen sonando un poco más fuerte, así que parece que esto es justo lo que buscaba… ¡GRACIAS!

¡Eso es genial! Me alegra ayudar.

Ahora lo único que necesito averiguar para que esto sea perfecto es si puedo usar ffprobe para analizar primero el archivo de audio, y luego dejar que elija los parámetros tanto para la compresión de rango dinámico como para la normalización (para que todos los programas y películas tengan el mismo volumen estándar), así que si tienes alguna idea o sugerencia, sería apreciado.

Déjame jugar un poco con algunas cosas y te vuelvo a hablar.

He estado experimentando con varios métodos para hacer esto, pero ninguno es muy confiable. Y debido a un error de usuario, borré los perfiles que usaba para probar, así que ni siquiera puedo darte ejemplos. Y de alguna manera también borré todos mis registros.

Probé un par de flujos de trabajo distintos. Usar precustomcommand para extraer el audio por separado en estéreo, y usar un archivo por lotes para procesarlo con normalización usando ffprobe pasando las variables como argumentos, ejecutarlo a través del procesamiento normal de MCEBuddy sin esa pista estéreo y luego, en customcommand, volver a insertarla. Esto funcionó aproximadamente el 10 % de las veces.

También intenté extraer la pista de audio en precustomcommand tal cual, procesar el video a través de MCEBuddy solo en estéreo con la opción de nivelación de volumen habilitada y luego volver a insertar las pistas de sonido envolvente. Esto funcionó con más frecuencia, pero no estoy seguro de si te está dando la normalización que deseas.

Luego también simplemente no usé comandos personalizados y procesé con la opción de nivelación de volumen activada, lo cual funcionó el 100 % de las veces, pero, de nuevo, no estoy seguro de si es el resultado que quieres.

Si encuentro más tiempo libre, seguiré experimentando, pero pronto comenzaré un nuevo trabajo y probablemente no podré hacerlo por un tiempo.

Muchas gracias por el esfuerzo. Espero que mi amigo me dé el método que usa en ffmpeg, pero está siendo difícil porque quiere que use el script Sickbeard en su lugar y no tiene tiempo de enseñarme a usarlo.

Si consigo la información de él, debería ser solo cuestión de usar una modificación de comando personalizada al que ya me proporcionaste.

Gracias de nuevo.

Encontré una forma de simplificar esto sin tener que hacer ningún análisis primero. Descubrí el siguiente comando y ajustes para usar en ffmpeg y parece haber un consenso de que esta es la configuración a utilizar:

-af loudnorm=I=-16:LRA=11:TP=-1.5

Esto hará la normalización. Asumo que primero tenemos que hacer la compresión de rango dinámico y luego aplicar esto, así que básicamente ¿hay una forma de ejecutar la salida del comando personalizado que creaste arriba para la compresión de rango dinámico a través de otro comando personalizado aplicando este comando? A menos que haya una mejor manera de hacerlo, sé que no tengo idea.

Intenté jugar con ello yo mismo, pero no logré encadenar los dos comandos para que funcionara correctamente. Me pierdo en la sintaxis. No soy programador… jajaja

Algo así probablemente.

CustomCommandParameters="/c ren “%convertedfile%” %convertedfilename%-1.%convertedext% & “C:\Program Files\MCEBuddy2x\ffmpeg\ffmpeg.exe” -i “%workingpath%%convertedfilename%-1.%convertedext% -map 0:v -c:v copy -map 0:1 -map 0:2 -map 0:3 -af dynaudnorm=f=150 -c:a:1 copy -c:a:2 copy “%workingpath%%convertedfilename%-2.%convertedext%” & del “%workingpath%%convertedfilename%-1.%convertedext%” & “C:\Program Files\MCEBuddy2x\ffmpeg\ffmpeg.exe” -i “%workingpath%%convertedfilename%-2.%convertedext%” -map 0:v -c:v copy -map 0:1 -map 0:2 -map 0:3 -af loudnorm=I=-16:LRA=11:TP=-1.5 -c:a:1 copy -c:a:2 copy “%convertedfile%” & del “%workingpath%%convertedfilename%-2.%convertedext%””

Genial, gracias, sé que estás ocupado. Lo probaré más tarde hoy o esta noche y te aviso. Te lo agradezco.