Video cortado con marcos faltantes en FFmpeg

0

He intentado todos los comandos posibles para cortar una parte (1-3 minutos) de un video mp4 H.264, pero sale bien y mal. Mi video tiene 29.97 FPS, 1080p, ~ 80 minutos, ~ 3.5 GB y una velocidad de bits de ~ 6200 KB / s. El problema es que mi salida comienza sin video durante 1-2 segundos y luego continúa bien, pero el audio comienza a los 0 segundos. Se reproduce bien sincronizado (audio y video) en cualquier reproductor multimedia, pero cuando se usa en cualquier otro lugar (renderizado con fines de producción) como Adobe AE, Media Encoder o un convertidor de video, el video final FINAL comienza a 0 segundos donde el audio empezado. Por lo tanto, el audio termina 1-2 segundos por delante y no quiero esto. Esto también sucede al recortar un video de YouTube en línea en http://clipconverter.cc

Mi comando es el siguiente:

ffmpeg -ss 01:19:22.000 -t 00:1:43.000 -i "in.mp4" -acodec copy -vcodec copy out.mp4

Incluso intenté poner -ss después de -i, pero obtengo los mismos resultados. Además, si ya tengo un video con este problema, ¿qué puedo hacer para solucionarlo? ¿Qué podría hacer también en Adobe AE para esto? Este sitio: https://ubuntuforums.org/showthread.php?t=1824250 dice que debe cortarse en los "fotogramas clave". Si es así, ¿cómo lo hago en FFmpeg? ¿Cómo los encuentro? ¿Qué son? No tengo la intención de volver a codificar (con -c: v x264), toma demasiado tiempo y vuelve a comprimir el video con artefactos.

He usado compilaciones estáticas y compartidas de FFmpeg. También se utilizó estable 3.2.2 y ffmpeg-20170112-6596b34-win64-static, sin suerte.

TLDR: Mi video que corté en FFMPEG tiene fotogramas faltantes (ni siquiera negros o en blanco) al principio y da como resultado audio / video no sincronizado cuando finalmente se procesa en cualquier software de representación de video.

HoHey22
fuente

Respuestas:

4

Utilizar

ffmpeg -ss 01:19:22 -t 00:1:43 -i "in.mp4" -c copy -avoid_negative_ts make_zero out.mp4

La mayoría de los videos comprimidos usan compresión temporal, por lo que los cuadros dependen de otros cuadros para la decodificación completa. Si recorta un video usando el copymodo, algunos cuadros después de su punto de entrada pueden depender de cuadros antes del punto de entrada para la decodificación. Si es así, esos marcos deben ser incluidos. A esos cuadros se les asignan marcas de tiempo negativas, por lo que los buenos reproductores de video los usan para decodificar pero no para presentar. El video se muestra desde el punto de vista en adelante. Como todos los cuadros de audio son fotogramas clave, el recorte de audio es preciso y se conserva la sincronización A / V.

Aparentemente, los editores de video no parecen prestar atención a PTS, por lo que muestran todos los cuadros almacenados en el archivo. Mi comando anterior fuerza TS positivo para todos los cuadros almacenados, por lo que el video / audio permanecerá sincronizado *.

* No es completamente cierto. Para códecs de audio basados ​​en MDCT como MP3 / AAC, el cuadro anterior se incluye con PTS negativo, ya que es necesario para la decodificación. Tal vez su NLE decodifique ese marco, lo que llevará a una sincronización asincrónica de 21 a 23 ms. La solución consiste en volver a codificar el audio.

Gyan
fuente
¿Está diciendo "tiene que ser incluido" que cuando se usa la copia de transmisión en transmisiones de video, y el punto de corte es un cuadro sin referencia, cada cuadro necesario anterior dentro de ese GOP se incluye automáticamente por ffmpeg, pero se le asigna un DTS negativo? Esto no es lo que estoy observando: pastebin.com/raw/fbBGxgdP
slhck
Hacer show_packets, no show_frames. Observe que su video recortado no tiene marco I. No falta en el archivo.
Gyan
Ah, ya veo. No sabía -show_framesque excluiría eso.
slhck