É possível usar o ffmpeg para cortar X segundos desde o início de um vídeo com uma duração não especificada?


20

Preciso cortar apenas os primeiros 1 ou 2 segundos de uma série de gravações FLV de comprimentos variados e não especificados. Encontrei muitos recursos para extrair uma duração especificada de um vídeo (por exemplo, clipes de 30 segundos), mas nenhum para continuar até o final de um vídeo.

Ambas as tentativas apenas produzem uma versão copiada do vídeo, sem o corte desejado:

ffmpeg -ss 2 -vcodec copy -acodec copy -i input.flv output.flv

ffmpeg -ss 2 -t 120 -vcodec copy -acodec copy -i input.flv output.flv

O pensamento no segundo foi: talvez, se eu especificasse um comprimento além do que era possível, seria apenas o fim. Sem dados.

Eu sei que não é um problema com codecs ou usando segundos em vez de timecode, pois o seguinte funcionou como um encanto:

ffmpeg -ss 2 -t 5 -vcodec copy -acodec copy -i input.flv output.flv

Alguma outra ideia? Estou aberto a usar outras ferramentas de linha de comando (baseadas no Windows), no entanto, estou favorecendo fortemente o ffmpeg, já que já o estou usando para a criação de miniaturas e estou familiarizado com ele.

Se ajudar, meus vídeos terão menos de 2 minutos.

ATUALIZAR:

Eu mudei para o uso do Mencoder ( http://www.mplayerhq.hu/ ), pois parece que o ffmpeg não conseguirá isso sem alguma invasão adicional.

A sintaxe do Mencoder para realizar o que me propus a fazer é:

mencoder.exe -ss 2 -oac copy -ovc copy input.flv -o output.flv

Então qual você prefere; o mencoderexemplo acima; ou o ffmpegexemplo abaixo?
vozes

Respostas:


16

Experimentar:

ffmpeg -i input.flv -ss 2 -vcodec copy -acodec copy output.flv

Eu acho que o parâmetro de entrada deve ser o primeiro.


Obrigado pela resposta. A ordenação de parâmetros que usei acima fornece o mesmo resultado, então não acho que seja a ordem. Depois de desistir do ffmpeg, meu intervalo de quadros-chave estava causando problemas com outras ferramentas. Depois de revisitar isso agora, era o intervalo do quadro-chave, afinal. Foi definido para 5 segundos antes e, desde então, para 1 segundo. Aos 5 segundos, tanto o seu comando quanto os que eu tentei acima renderam espaço em preto no início (3 segundos no valor, sem surpresa). Em 1 segundo, ele funciona como esperado.
Marcelebrate

Isso funciona para mp3 também
geotheory

4
Conforme explicado na Busca do FFmpeg , o uso de -ss como um parâmetro de entrada (antes -i) durante a cópia ou mesmo transcodificação com uma versão mais antiga do FFmpeg, emprega a busca do quadro-chave. Isso é muito mais rápido, mas sacrifica a precisão. Se você usá-lo como um parâmetro de saída, o processo é potencialmente muito mais lento (a entrada é decodificada quadro a quadro, mesmo para as peças descartadas), mas precisa. Embora a pergunta seja antiga, acho que essa deve ser a resposta aceita.
Jonathan Y.

23

Acontece que este comando irá cortar o vídeo a partir de 2 segundos em, como esperado:

ffmpeg -i input.flv -ss 2 -vcodec copy -acodec copy output.flv

O problema ocorreu com o intervalo do quadro-chave em input.flv. Foi definido como 5 segundos, o que resultou em 3 segundos no valor de quadros em preto no início do vídeo (5 - 2 = 3). Desde então, mudei o intervalo do quadro-chave para 1 segundo, embora 2 segundos provavelmente também produzam os resultados desejados no meu caso.

UPDATE: ordem -ie -ssparâmetros atualizados de acordo com a resposta de Dave, que aceitei como crédito.


2
Eu estava tendo esse problema também. Este post fez isso por mim. Mordi a bala e parei de tentar usar -vcodec copy -acodec copyem todos os meus comandos de edição. A recodificação impediu os quadros pretos desde o início do meu vídeo ou não cortou no ponto certo (a diferença de um segundo sem recodificação estava se traduzindo em uma diferença de quase 5 segundos no vídeo). Então, acabei substituindo -vcodec copypor -vcodec libx264 -crf 0.
quer

2
Acabei de encontrar a mesma coisa. Descobri que não posso apenas -vcodec copyporque a fatia não inicia em um quadro-chave. Eu estava obtendo uma imagem estática ou preta por N segundos até o próximo quadro-chave. Se eu realmente recodificar, em vez de copiar, funcionará conforme o esperado. Portanto, mesmo que minha entrada e saída sejam H264, eu ainda precisava recodificar (usando em -vcodec libx264vez de -vcodec copy).
22816 Karl Wilbur

A resposta de Daves é a correta na versão mais recente do ffmpeg. O -ideve vir antes do -ss.
Arete

0

Use -ss e -to antes -i como este:

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

0

Atualizando esta resposta, a partir de 2019 o comando agora é:

ffmpeg -i input.flv -ss 2 -c copy output.flv
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.