El primer segundo de la parte del video cortado se congela cuando FFmpeg corta una parte de un video

El primer segundo de la parte del video cortado se congela cuando FFmpeg corta una parte de un video

Utilizo esto para cortar una parte de un archivo MP4:

ffmpeg -i input.mp4 -vcodec copy -acodec copy -ss 00:36:18 -to 00:39:50 output.mp4

Funciona bien pero la imagen del vídeo siempre se congela al principio durante 1 segundo.

No importa de qué archivo de vídeo intente cortar una parte, el vídeo tarda como 1 segundo en comenzar.

Aquí hay un ejemplode lo que estoy viendo.

Respuesta1

El problema podría ser que el vídeo intenta cortarse basándose únicamente en fotogramas clave y no entre fotogramas y su tiempo inicial 00:36:18es unos segundos antes de un fotograma clave. La solución debería ser utilizar la -copyinkfopción.que se describe en el manual como:

Al copiar la secuencia, copie también los fotogramas no clave que se encuentran al principio.

Entonces tu comando que se ve así:

ffmpeg -i input.mp4 -vcodec copy -acodec copy -ss 00:36:18 -to 00:39:50 output.mp4

Luego sería necesario ajustarlo para que se vea así y -copyinkfmezclarlo:

ffmpeg -i input.mp4 -vcodec copy -acodec copy -copyinkf -ss 00:36:18 -to 00:39:50 output.mp4

Respuesta2

La marca de tiempo desde la que está copiando se encuentra entre fotogramas clave; el uso de -vcodec copy siempre dará como resultado este comportamiento si copia un códec entre fotogramas y su entrada no comienza en un fotograma clave.

Sus opciones son realizar una codificación completa (es decir, sin copia -vcodec) o elegir una marca de tiempo diferente para buscar. Puede encontrar la ubicación de todos los fotogramas clave usando ffprobe, por ejemplo.

ffprobe -select_streams v -show_frames -print_format csv -show_entries frame=key_frame,pkt_dts_time input.mp4  | grep "frame,1"

la tercera columna contiene las marcas de tiempo (en segundos) de todos los fotogramas clave; desea el más cercano a su marca de tiempo objetivo, pero no después.

Respuesta3

Yo también tuve este problema, no tengo ningún conocimiento de por qué sucedió esto y cómo lo solucioné. Solo sé que este código me lo solucionó:

ffmpeg -ss 00:00:00 -to 00:00:10 -i input.mp4 -c:v copy -c:a copy output.mp4

información relacionada