ti-enxame.com

Cortando os vídeos com base no horário de início e término usando o ffmpeg

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 é cortar o vídeo entre esses momentos em vez de cortar o vídeo com os primeiros 11 segundos. Alguém pode me ajudar como resolver isso?

Editar 1:

Eu tentei cortar usando o seguinte comando que é 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 os codecs experimentais não estão habilitados

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.

385
Kalai

Você provavelmente não tem um quadro-chave na marca de 3 segundos. Como os quadros não-chave codificam as 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 iniciando em 0s e usará uma lista de edição para dizer ao player para começar a reproduzir 3 segundos.

Se você estiver usando o o mais recente ffmpeg 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 para você, provavelmente você está usando uma versão mais antiga do ffmpeg, ou o seu player não suporta listas de edição. Alguns jogadores irão ignorar a lista de edição e sempre reproduzirão todas as mídias no arquivo do começo ao fim.

Se você quiser cortar precisamente começando em um quadro não-chave e desejar que ele seja reproduzido iniciando no 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 haja um quadro-chave precisamente na hora de início desejada. A recodificação é o padrão se você não especificar copy. Por exemplo:

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4

Ao recodificar, você também pode incluir opções adicionais relacionadas à qualidade ou um codificador AAC específico. Para mais detalhes, consulte o Guia de Codificação x264 do ffmpeg para vídeo e Guia de Codificação AAC para áudio.

Além disso, a opção -t especifica uma duração, não uma hora final. O comando acima irá codificar 8s de vídeo a partir de 3s. Para começar às 3s e terminar às 8s use -t 5. Se você estiver usando uma versão atual do ffmpeg, você também pode substituir -t por -to no comando acima para terminar na hora especificada.

447
mark4o

Tente usar isso. É o modo mais rápido e melhor ffmpeg que eu descobri:

 ffmpeg -ss 00:01:00 -i input.mp4 -to 00:02:00 -c copy output.mp4

Este comando corta seu vídeo em segundos!

Eu expliquei no meu blog aqui :

-i: Isto especifica o arquivo de entrada. Nesse caso, é (input.mp4).
-ss: Usado com -i, este procura no arquivo de entrada (input.mp4) para a posição.
00:01:00: Esta é a hora em que seu vídeo aparado começará.
-to: Especifica a duração desde o início (00:01:40) até o final (00:02:12).
00:02:00: Esta é a hora que seu vídeo aparado terminará.
-c copy: Esta é uma opção para cortar através da cópia de fluxo. (NB: muito rápido)

O formato de temporização é: hh: mm: ss

Por favor, note que a resposta atual altamente votada está desatualizada e o trim seria extremamente lento. Para mais informações, veja este ffmpeg article oficial .

246
George Chalhoub
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -c copy cut.mp4 

Use -c copy para fazer instantaneamente. Nesse caso, o ffmpeg não recodificará o vídeo, apenas cortará de acordo com o tamanho.

74
Vlad Hudnitsky
    ffmpeg -i movie.mp4 -vf trim=3:8 cut.mp4

Largue tudo, exceto do segundo 3 ao segundo 8.

26
JFMD

Para cortar com base no horário de início e término do vídeo de origem e evitar fazer matemática, especifique o horário de término como a opção de entrada e a hora de início como a opção de saída

ffmpeg -t 1:00 -i input.mpg -ss 45 output.mpg

Isso produzirá um corte de 15 segundos de 0:45 a 1:00.

Isso ocorre porque quando -ss é dado como uma opção de saída, o tempo descartado ainda é incluído no tempo total lido da entrada, que -t usa para saber quando parar. Considerando que se -ss é dado como um input option, a hora de início é buscada e não contada , que é onde a confusão vem.

É mais lento do que procurar, pois o segmento omitido ainda é processado antes de ser descartado, mas essa é a única maneira de fazer isso até onde eu sei. Se você estiver recortando de dentro de um arquivo grande, é mais prudente fazer as contas e usar -ss para a entrada.

7
Ryan Yoosefi