it-swarm-pt.tech

Como extrair 1 screenshot de um vídeo com o ffmpeg em um determinado momento?

Existem muitos tutoriais e outras coisas que mostram como extrair várias capturas de tela de um vídeo usando o ffmpeg. Você define -r e você pode até mesmo iniciar uma certa quantia.

Mas eu só quero 1 screenshot em, digamos 01:23:45 em. Ou 1 screenshot em 86% em.

Isso tudo é possível com ffmpegthumbnailer mas é outra dependência da qual não quero depender. Eu quero ser capaz de fazer isso com o ffmpeg.

73
Peter Bengtsson

Use a opção -ss:

ffmpeg -ss 01:23:45 -i input -vframes 1 -q:v 2 output.jpg
  • Para saída JPEG, use -q:v para controlar a qualidade de saída. A faixa completa é uma escala linear de 1-31, em que um valor mais baixo resulta em uma qualidade mais alta. 2-5 é um bom intervalo para tentar.

  • O selecione o filtro fornece um método alternativo para necessidades mais complexas, como selecionar apenas determinados tipos de quadros, ou 1 por 100, etc.

  • Colocando -ss antes que a entrada seja mais rápida. Veja Wiki FFmpeg: Buscando e este trecho da __ documentação da ferramenta ffmpeg cli :

-ss position (entrada/saída)

Quando usado como uma opção de entrada (antes de -i), procura neste arquivo de entrada para posicionar. Note que na maioria dos formatos não é possível procurar exatamente, então ffmpeg irá procurar o ponto de busca mais próximo antes da posição. Quando transcodificação e -accurate_seek estão habilitados (o padrão), este segmento extra entre o ponto de busca e a posição será decodificado e descartado. Ao fazer cópia de fluxo ou quando -noaccurate_seek é usado, ele será preservado.

Quando usado como uma opção de saída (antes de um nome de arquivo de saída), decodifica, mas descarta a entrada até que os timestamps alcancem a posição.

a posição pode ser em segundos ou no formato hh:mm:ss[.xxx].

137
llogan

O FFMpeg pode fazer isso buscando o registro de data e hora especificado e extraindo exatamente um quadro como uma imagem, veja por exemplo:

ffmpeg -i input_file.mp4 -ss 01:23:45 -vframes 1 output.jpg

Vamos explicar as opções:

-i input file           the path to the input file
-ss 01:23:45            seek the position to the specified timestamp
-vframes 1              only handle one video frame
output.jpg              output filename, should have a well-known extension

O parâmetro -ss aceita um valor no formato HH:MM:SS[.xxx] ou como um número em segundos. Se você precisa de uma porcentagem, você precisa calcular a duração do vídeo de antemão.

26
SirDarius