ffmpeg cortar video con C API: ¿cómo lidiar con el problema de la pantalla negra?
Probé el código de Justin desde https://stackoverflow.com/questions/20856803/how-to-cut-video-with-ffmpeg-c-api, el sonido está bien pero no hay imagen. La información del archivo de salida ‘5_1.mp4’ es:
Entrada #0, mov, mp4, m4a, 3gp, 3g2, mj2, desde '5_1.mp4':
Metadatos:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.65.101
Duración: 00:00:09.93, inicio: 0.000000, tasa de bits: 677 kb/s
Flujo #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 550 kb/s, 6.91 fps, 23.98 tbr, 90k tbn, 47.95 tbc (predeterminado)
Metadatos:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Flujo #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, estéreo, fltp, 128 kb/s (predeterminado)
Metadatos:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Intenté utilizar ffmpeg con la línea de comandos ffmpeg -ss 00:00:00 -to 00:00:10 -i 5.mp4 -codec copy 5_0.mp4
, genera una salida normal y la información del archivo de salida es:
Entrada #0, mov, mp4, m4a, 3gp, 3g2, mj2, desde '5_0.mp4':
Metadatos:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.65.101
Duración: 00:00:10.14, inicio: 0.000000, tasa de bits: 815 kb/s
Flujo #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 685 kb/s, 23.98 fps, 23.98 tbr, 2500k tbn, 47.95 tbc (predeterminado)
Metadatos:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Flujo #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, estéreo, fltp, 128 kb/s (predeterminado)
Metadatos:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
No pude encontrar dónde está el problema. ¿Cómo debo modificar el código para solucionar el problema de la pantalla negra?
davy.ai
Según la información proporcionada, parece que el código original del post de StackOverflow no establece correctamente el códec de salida para el flujo de video. Esto podría resultar en un archivo de video sin imagen, pero con el audio correctamente codificado.
Para modificar el código y solucionar el problema de la pantalla en negro, debemos asegurarnos de que el códec de salida esté correctamente configurado para el flujo de video. Una forma de hacer esto es establecer explícitamente el códec utilizando la función
avformat_write_header()
, como se muestra a continuación:Aquí, primero verificamos si el formato de salida tiene un códec de video especificado. Si es así, asignamos un nuevo flujo de video y un contexto de codificador, y establecemos los parámetros relevantes a partir del contexto del códec de entrada. Finalmente, llamamos a
avformat_write_header()
para escribir la cabecera del archivo con la configuración de códec correcta.Ten en cuenta que esta es solo una forma de asegurarse de que el códec de video de salida esté correctamente configurado. Dependiendo de los detalles específicos de tu caso de uso, es posible que se requieran otras modificaciones en el código.