Instalar o ffmpeg
Certifique-se de fazer o download de uma versão recente do ffmpeg
e não use o que vem com a sua distribuição ( eg Ubuntu). Versões empacotadas de várias distribuições são geralmente desatualizadas e não se comportam como esperado.
Ou compile você mesmo .
Como cortar um vídeo sem recodificar
Use isso para cortar o vídeo de [start]
para [duration]
:
ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4
Aqui, as opções significam o seguinte:
-
-ss
especifica a hora de início, por ex.00:01:23.000
ou83
(em segundos) -
-t
especifica a duração do clipe (mesmo formato). - O
ffmpeg
recente também tem um sinalizador para fornecer o horário de término com-to
. -
-c copy
copia o primeiro bitstream de vídeo, áudio e legenda da entrada para o arquivo de saída sem codificando-os. Isso não prejudicará a qualidade e fará com que o comando seja executado em segundos.
Note que com versões mais antigas do ffmpeg, este comando pode não ter precisão de quadro ao copiar os fluxos de bits.
Como cortar um vídeo sem recodificar - método preciso
Se você tiver uma versão antiga do ffmpeg e quiser a precisão do quadro, use isso:
ffmpeg -i in.mp4 -ss [start] -t [duration] -c copy out.mp4
No entanto, há uma desvantagem. O vídeo terá que ser decodificado até atingir a posição implícita em -ss
, e somente então ele começa a copiar o fluxo de bits. Isso pode levar muito tempo, especialmente para vídeos realmente longos.
Como cortar um vídeo, com a re-codificação
Se você deixar de fora a opção -c copy
, ffmpeg
recodificará automaticamente o vídeo e o áudio de saída de acordo com o formato escolhido. Para vídeo e áudio de alta qualidade, leia o Guia de codificação x264 e o Guia de codificação AAC , respectivamente.
Por exemplo:
ffmpeg -ss [start] -i in.mp4 -t [duration] -c:v libx264 -c:a aac -strict experimental -b:a 128k out.mp4
Como explicado por Buscando com o FFmpeg ): Ao usar -ss
antes de -i
no FFmpeg 2.1 e mais recente, A busca é precisa de frame ao recodificar o vídeo (ou seja, não usar -c copy
). Então você não precisa se preocupar em colocar -ss
após -i
para velocidade.
Convertendo pontos finais para duração
Se você precisar usar uma versão antiga de ffmpeg
e não puder usar a opção -to
, poderá criar uma lista de edição de pontos de entrada e saída e convertê-los em pontos com duração. Para isso, você pode usar este script Ruby que eu escrevi, que calcula a diferença:
require "Time"
def time_diff(time1_str, time2_str)
t = Time.at( Time.parse(time2_str) - Time.parse(time1_str) )
(t - t.gmt_offset).strftime("%H:%M:%S.%L")
end
Por exemplo:
time_diff("00:09:23.000", "00:25:33.000")
=> "00:16:10.000"