Grabé un video de 50 minutos, lo edité en Hitfilm Express para censurar/difuminar a las personas y lo exporté en el formato de alta resolución de Hitfilm, generando un archivo de 80 GB. Cuando trato de transcodificar este archivo en algo más manejable, ffmpeg hace que el audio se desvíe. Al principio todo suena bien, pero poco a poco el audio va más rápido que el video. El archivo de entrada según lo informado por ffmpeg es:
Guessed Channel Layout for Input Stream #0.1 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Volumes/BakaTres/witness.mov':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
Duration: 00:50:31.42, start: 0.000000, bitrate: 230875 kb/s
Stream #0:0(eng): Video: cfhd (CFHD / 0x44484643), yuv422p10le, 1920x1080, 229401 kb/s, 59.96 fps, 59.96 tbr, 90k tbn, 90k tbc (default)
Metadata:
encoder : CineForm HD
Stream #0:1(eng): Audio: pcm_s16le (lpcm / 0x6D63706C), 48000 Hz, stereo, s16, 1536 kb/s (default)
Después de ejecutar el siguiente comando de transcodificación ffmpeg -i witness.mov -filter:v scale=640:-1 mini.mkv
que vuelve a codificar todo, estas son las estadísticas del archivo de salida:
Input #0, matroska,webm, from 'mini.mkv':
Metadata:
COMPATIBLE_BRANDS: qt
MAJOR_BRAND : qt
MINOR_VERSION : 537199360
ENCODER : Lavf57.56.100
Duration: 00:50:30.42, start: 0.000000, bitrate: 785 kb/s
Stream #0:0(eng): Video: h264 (High 4:2:2), yuv422p(progressive), 640x360, 59.96 fps, 59.96 tbr, 1k tbn, 119.92 tbc (default)
Metadata:
ENCODER : Lavc57.64.101 libx264
DURATION : 00:50:30.422000000
Stream #0:1(eng): Audio: vorbis, 48000 Hz, stereo, fltp (default)
Metadata:
ENCODER : Lavc57.64.101 libvorbis
DURATION : 00:50:28.403000000
La primera señal de que algo va mal es que el archivo original especifica una duración de 50:31,42, mientras que la transcodificación genera un archivo de 50:30,42. No me importaría menos el segundo si no fuera porque el audio producido es 50:28.4, dos segundos menos que el video, lo que explica la diferencia de retardo. Lamentablemente, ffmpeg no muestra la longitud de entrada, pero si copio el audio de origen en un archivo aiff, Audacity me dice que, de hecho, tiene una duración de 50: 28,4, entonces, ¿Hitfilm está exportando el audio incorrectamente con una duración más corta que el video?
He visto la siguiente respuesta para un problema similar, pero no entiendo cómo se calculan los valores o cómo aplicar estos valores a mis archivos de entrada. ¿Qué valores debo buscar en la información de entrada/salida para comparar?
Incluso si la longitud transcodificada final es ligeramente diferente, ¿cómo puedo evitar que el audio se desincronice (o corregir la diferencia exportada de Hitfilm en video y audio)?
Después de probar algunas cosas al azar, logré sincronizar el audio/video cambiando la velocidad del audio:
ffmpeg -i witness.mov -af asetrate=48018 resampled.mkv
resampled.mkv
Tiene una sincronización correcta, pero desafortunadamente el audio es más corto que el video restante durante unos segundos. Lo que significa que el problema es realmente que la velocidad de fotogramas es un poco más lenta de lo que debería en el archivo de entrada. Según mis cálculos, el problema es que la velocidad de fotogramas está configurada en 59,96, y establecerla exactamente en 60,0 haría que el video coincidiera con el audio. Intenté usar:
ffmpeg -i witness.mov -framerate 60 resampled.mkv
Pero la velocidad de fotogramas del video no cambió.
gian
-af aresample=async=1
y comprobar.Grzegorz Adam Hankiewicz