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 fica congelada no início por 1 segundo.
Não importa de qual arquivo de vídeo eu tento cortar uma parte, leva cerca de 1 segundo antes do vídeo começar.
Aqui está um exemplodo que estou vendo.
Responder1
O problema pode ser que o vídeo esteja tentando ser cortado com base apenas nos quadros-chave e não entre os quadros, e seu tempo inicial 00:36:18
está alguns segundos à frente de um quadro-chave. A solução deve ser usar a -copyinkf
opçãoque é descrito no manual como:
Ao fazer a cópia do fluxo, copie também os quadros não-chave encontrados no início.
Então seu comando é assim:
ffmpeg -i input.mp4 -vcodec copy -acodec copy -ss 00:36:18 -to 00:39:50 output.mp4
Precisaria então ser ajustado para ficar assim, -copyinkf
misturado a ele:
ffmpeg -i input.mp4 -vcodec copy -acodec copy -copyinkf -ss 00:36:18 -to 00:39:50 output.mp4
Responder2
O carimbo de data/hora do qual você está copiando está entre quadros-chave, usar -vcodec copy sempre resultará nesse comportamento se copiar um codec entre quadros e sua entrada não iniciar em um quadro-chave.
Suas opções são fazer uma codificação completa (ou seja, sem cópia -vcodec) ou escolher um carimbo de data/hora diferente para buscar. 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/hora (em segundos) de todos os quadros-chave. Você deseja aquele mais próximo, mas não posterior, do carimbo de data/hora de destino.
Responder3
Eu também tive esse problema, não tenho conhecimento de por que isso aconteceu e como resolvi. Apenas saiba que este código corrigiu isso para mim:
ffmpeg -ss 00:00:00 -to 00:00:10 -i input.mp4 -c:v copy -c:a copy output.mp4