Estou tendo problemas para encontrar um aplicativo CLI que pode pegar um arquivo de vídeo (avi, mkv e mp4, de preferência) e cortar clipes muito curtos (2-6 segundos) com precisão de tempo. Eu tentei ffmpeg , mencoder , avidemux e mp4box, mas todos eles cortam quadros-chave que criam clipes de mais de 6 segundos. Existe uma ferramenta que recodifique o arquivo de entrada e reduza o tempo exato ou corte imprecisa, recodifique e depois corte com precisão?
command-line
video
video-editing
mp4
curmil
fonte
fonte
-ss
parâmetro depois-i
), ele deve ser mais preciso.Respostas:
Cortando vídeo com
ffmpeg
Você pode cortar vídeos com precisão com o FFmpeg. Desde a versão 2.5, é muito fácil. Por exemplo, isso reduziria 10 segundos, iniciando em 0 minutos, 3 segundos e 123 milissegundos.
A posição e o tempo podem ser em segundos ou em
hh:mm:ss[.xxx]
forma.Observe que, nesses exemplos, o vídeo será recodificado usando o codificador x264 ; o áudio é copiado.
Você também pode usar em
-to
vez de-t
para especificar o ponto final em vez da duração. Nesse caso, no entanto,-to
é equivalente a-t
, uma vez que, ao colocar a-ss
frente-i
, o ffmpeg primeiro buscará esse ponto e depois começará a produzir.Veja também a entrada do wiki Procurando .
Corte preciso para
ffmpeg
versões mais antigasSe você possui uma versão mais antiga do ffmpeg, para uma busca precisa, é necessário colocar o
-ss
after-i
, o que torna o processo de codificação um pouco mais lento, porque o vídeo inteiro precisa ser decodificado primeiro:Aqui,
-to
e-t
se comporte de maneira diferente.-t 10
criaria um clipe de dez segundos, enquanto-to 10
criaria um clipe de sete segundos.fonte
-c:v libx264 -c:a libfaac
eu acho que podemos usar o-acodec copy -vcodec copy
que diz ao ffmpeg apenas para detectar e usar os mesmos codecs que o arquivo original. Alguém pode confirmar?-c:a aac -strict experimental
. Essa é a solução mais simples.A única ferramenta de linha de comando do Linux que eu encontrei até agora, que pode cortar no quadro exato (ou, com precisão), é
melt
(sudo apt-get install melt
).Digamos que você tenha
inputvid.mp4
- primeiro verifique suas configurações de codificação com o sayffmpeg
(aqui, eu apenas digo que quero codificá-lo novamente para-f mp4
, mas como o arquivo/dev/null
para que a saída seja descartada; eu redireciono o stderr para que eu possa fazer a grep - observe no meio , o comando solicita e você deve respondery
com ENTER, para que o processo prossiga e despeje as informações úteis; isso é com o ffmpeg 3.3.3 no Ubuntu 14):Ok, para que possamos ver
ffmpeg
escolhaslibx264
eaac
codificadores para este vídeo; então podemos inserir isso paramelt
:.... e
melt
cortará com a peça entre os quadros 7235 e 7349 em um novo arquivocut.mp4
. Em seguida, para verificar se oscut.mp4
loops estão corretos, usemelt
novamente para reproduzi-lo duas vezes - e reproduza-o em uma janela SDL:... e aqui está o que
ffmpeg
vê para este arquivo:As configurações de codificação de vídeo
cut.mp4
parecem idênticas,inputvid.mp4
exceto a taxa de bits do vídeo alterada de 389 kb / s para 526 kb / s, e também as configurações de codificação de áudio são praticamente as mesmas, exceto a taxa de amostragem alterada de 44100 para 48000 Hz; embora isso possa ser regulado com:... no entanto, mesmo com isso, a taxa de bits final do vídeo para mim acaba com 337 kb / s. Ainda assim, os cortes fazem um loop fino (e isso inclui áudio) quando reproduzidos em um loop, então acho que isso é realmente preciso do quadro ...
fonte
melt
está recodificando o vídeo e usa as bibliotecas FFmpeg abaixo. Se você permitir a recodificação, o ffmpeg poderá produzir a mesma saída.melt
usa bibliotecas FFmpeg), bom saber!Como Baodad disse nos comentários (eu posto porque não é fácil encontrar se você lê rapidamente), a melhor abordagem é detectar os codificadores de áudio / vídeo automaticamente pelo ffmpeg, então:
fonte