Estou usando este comando para cortar um segmento de um vídeo da linha de comando
ffmpeg -i %1 -vcodec copy -acodec copy -ss %2 -t %3 %~n1_cut%~x1
e eu chamo assim
cut.bat video.mp4 001:23:45:678 10
e como esperado, recebo um video_cut.mp4 com 10 segundos do vídeo original, o problema é que alguns segundos do arquivo resultante são de tela preta com áudio, por que isso acontece e como faço para corrigi-lo?
%~n1
expande% 1 para um nome de arquivo, ou se apenas um caminho estiver presente (sem barra invertida) - a última pasta nesse caminho e%~x1
expande% 1 apenas para a extensão do arquivo - .txt source: superuser.com/questions/ 224416 /…Respostas:
A maioria dos vídeos usa codecs que executam compactação temporal; portanto, um ponto de corte especificado pode depender de quadros antes (e depois) desse ponto de corte para ser decodificado corretamente. Portanto, quando você usa o ffmpeg para aparar vídeos e usa o
copy
modo, o ffmpeg deve incluir todos os quadros antes e depois do segmento aparado, necessários para decodificar o segmento corretamente.Portanto, você tem duas opções: use o modo de cópia, mas defina uma opção que permita a todos os jogadores reproduzir corretamente esses arquivos.
(isso provavelmente resultará em saída que começa antes do seu ponto de corte)
ou recodifique os fluxos
fonte
-t
opção.%
faz? Tentei pesquisar em ffmpeg.org/ffmpeg.html, mas não consigo encontrar o uso.-ss
quanto o-t
anterior-i
e funcionou, antes, apenas o coloquei-ss
antes-i
e o-t
segui para que não funcionasse.https://github.com/mifi/lossless-cut/pull/13
Quando executo ffmpeg com os argumentos nesta ordem -i ... -ss ... -t ..., ele produz um arquivo de vídeo que não tem vídeo por alguns segundos iniciais. (até onde eu entendo isso é porque ele não procura um quadro-chave?)
Se eu alterar a ordem para -ss ... -i ... -t ..., os vídeos cortados resultantes serão reproduzidos corretamente.
Minhas
ffmpeg -version
fonte
-ss
antes,-i
mas não funcionou no meu arquivo mp4.