Tentei cortar o vídeo usando o horário de início e término do vídeo usando o seguinte comando
ffmpeg -ss 00:00:03 -t 00:00:08 -i movie.mp4 -acodec copy -vcodec copy -async 1 cut.mp4
Usando o comando acima, eu quero cortar o vídeo de 00:00:03
para 00:00:08
. Mas não está cortando o vídeo entre esses momentos, em vez de cortá-lo nos primeiros 11 segundos. alguém pode me ajudar como resolver isso?
Editar 1:
Eu tentei cortar usando o seguinte comando, sugerido por mark4o
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4
Mas foi mostrado o seguinte erro.
o codificador 'aac' é experimental, mas codecs experimentais não estão ativados
então eu adicionei o -strict -2
no comando ou seja,
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -strict -2 cut.mp4
Agora está funcionando bem.
linux
video
ffmpeg
video-editing
Kalai
fonte
fonte
Respostas:
Você provavelmente não possui um quadro-chave na marca de 3 segundos. Como os quadros-chave que não codificam diferenças de outros quadros, eles exigem todos os dados que começam com o quadro-chave anterior.
Com o contêiner mp4, é possível cortar em um quadro não-chave sem recodificar usando uma lista de edição. Em outras palavras, se o quadro-chave mais próximo antes de 3s estiver em 0s, ele copiará o vídeo começando em 0s e usará uma lista de edição para informar ao player para iniciar a reprodução de 3 segundos.
Se você estiver usando o ffmpeg mais recente do git master, ele fará isso usando uma lista de edição quando chamado usando o comando que você forneceu. Se isso não funcionar, provavelmente você está usando uma versão mais antiga do ffmpeg ou o seu player não suporta listas de edição. Alguns players ignoram a lista de edição e sempre reproduzem toda a mídia do arquivo do começo ao fim.
Se você deseja cortar precisamente a partir de um quadro não-chave e deseja que seja reproduzido a partir do ponto desejado em um player que não suporta listas de edição, ou deseja garantir que a parte de corte não esteja realmente no arquivo de saída (por exemplo, se ele contiver informações confidenciais), você poderá fazer isso recodificando para que exista um quadro-chave precisamente no horário de início desejado. Recodificação é o padrão se você não especificar
copy
. Por exemplo:Ao recodificar, você também pode incluir opções adicionais relacionadas à qualidade ou um codificador AAC específico. Para obter detalhes, consulte o Guia de codificação x264 do ffmpeg para vídeo e o Guia de codificação AAC para áudio.
Além disso, a
-t
opção especifica uma duração, não um horário de término. O comando acima codificará 8s de vídeo começando em 3s. Para começar aos 3s e terminar aos 8s, use-t 5
. Se você estiver usando uma versão atual do ffmpeg, também poderá substituí-t
-lo-to
no comando acima para terminar no horário especificado.fonte
-t
/-to
e seu argumento para continuar até o fim.-ss
ANTES do arquivo de entrada (antes-i
), porque dessa forma o ffmpeg irá pular diretamente para o local. No entanto, isso também definirá o horário "zero" para esse local, o que significa que-to
apontará para o horário errado. Fonte: trac.ffmpeg.org/wiki/Seekingffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4
, embora o arquivo original não tenha esse problema.-async 1
.Tente usar isso. É a maneira ffmpeg mais rápida e melhor que eu descobri:
Este comando corta seu vídeo em segundos!
Eu expliquei isso no meu blog aqui :
O formato do tempo é: hh: mm: ss
Observe que a resposta atual altamente votada está desatualizada e a compensação seria extremamente lenta. Para mais informações, consulte este artigo oficial do ffmpeg .
fonte
ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -ss 00:01:00 -to 00:02:00 -c copy output.mp4
. Agora, no entanto, o salto é interrompido e o horário final não está correto (no meu caso).Use -c copy para criar instantaneamente. Nesse caso, o ffmpeg não recodificará o vídeo, apenas cortará para o tamanho desejado.
fonte
ffmpeg -i movie.mkv -vcodec copy -acodec copy converted_movie.mp4
e vice-versaLargue tudo, exceto do segundo 3 para o segundo 8.
fonte
setpts=PTS-STARTPTS
filtro de encadeamento após o filtro de compensação.-strict -2
antescut.mp4
(em oposição ao final da linha de comando)?Para cortar com base no horário de início e término do vídeo de origem e evitar fazer cálculos, especifique o horário de término como a opção de entrada e o horário de início como a opção de saída.
Isso produzirá um corte de 15 segundos das 0:45 às 1:00.
Isso ocorre porque quando
-ss
é fornecido como uma opção de saída, o tempo descartado ainda é incluído no tempo total lido da entrada, que é-t
usado para saber quando parar. Enquanto que se-ss
é dado como uma opção de entrada , a hora de início é buscada e não contada , e é daí que a confusão vem.É mais lento do que procurar, pois o segmento omitido ainda é processado antes de ser descartado, mas esta é a única maneira de fazê-lo, até onde eu sei. Se você estiver recortando do fundo de um arquivo grande, é mais prudente fazer as contas e usá-las
-ss
na entrada.fonte
Aqui está o que eu uso:
mp4
Arquivos gerados também podem ser usados noiMovie
.Referência: https://www.arj.no/2018/05/18/trimvideo
Se você deseja concatenar várias cenas cortadas, pode usar o seguinte script:
fonte
Use -to em vez de -t: -to especifica o horário final, -t especifica a duração
fonte
Mesmo com 6 anos de atraso, mas acho que todas as respostas acima não abordaram adequadamente a pergunta que @kalai está fazendo. O script bash abaixo processará um arquivo de texto no seguinte formato:
por exemplo
e percorrer o arquivo, o download do arquivo que
youtube-dl
suportes, calculando duração entrestart_time
eend_time
e passá-la paraffmpeg
, uma vez que-t
é realmente a duração , não o realend_time
Bata-me se você tiver alguma dúvida.
fonte