Primeiro segundo da parte de vídeo cortada congelada quando o FFmpeg corta uma parte de um vídeo

3

Eu uso isso para cortar uma parte de um arquivo MP4:

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

Funciona bem, mas a imagem do vídeo é sempre congelada no começo por 1 segundo.

Não importa qual arquivo de vídeo eu tentei e cortei uma parte, leva 1 segundo antes do início do vídeo.

Aqui está um exemplo do que estou vendo.

    
por gorschitsa 29.09.2015 / 04:42

2 respostas

2

O problema pode ser que o vídeo está tentando cortar com base apenas em quadros-chave e não em quadros intermediários, e seu tempo inicial de 00:36:18 está alguns segundos à frente de um quadro-chave. A solução deve ser usar a opção -copyinkf que é descrita no manual como :

When doing stream copy, copy also non-key frames found at the beginning.

Então, o seu comando que se parece com isso:

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

Em seguida, precisaria ser ajustado para ficar assim com -copyinkf misturado:

ffmpeg -i input.mp4 -vcodec copy -acodec copy -copyinkf -ss 00:36:18 -to 00:39:50 output.mp4
    
por 29.09.2015 / 06:38
1

O timestamp do qual você está copiando está entre os quadros-chave, usando -vcodec copy sempre resultará nesse comportamento se estiver copiando um codec inter-frame e sua entrada não iniciar em um quadro-chave.

Suas opções são fazer uma codificação completa (ou seja, cópia no -vcodec) ou escolher um timestamp diferente para procurar. Você pode encontrar a localização de todos os quadros-chave usando ffprobe, por exemplo.

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

a terceira coluna contém os carimbos de data e hora (em segundos) de todos os quadros principais, você quer o mais próximo, mas não depois do timestamp de destino.

    
por 29.09.2015 / 10:47

Tags