Como posso extrair uma imagem de um momento específico de um vídeo no Xubuntu 16.04?

8

Estou procurando uma opção de linha de comando.

Por exemplo, se eu tenho o vídeo sample-video.mp4e quero gerar um arquivo de imagem a sample-image.jpgpartir do vídeo às 00:00:26, que comando devo dar?

Além disso, seria muito útil se você pudesse explicar em detalhes qual é a função de todo argumento do comando.

Sonevol
fonte
2
De acordo com esta pergunta e suas respostas, ffmpegparece apoiar nomes de arquivos para a saída.
IQV

Respostas:

8

Você pode usar mplayer(do pacote mplayer, não instalado por padrão):

mplayer -vo jpeg -ss 00:00:26 -frames 1 sample-video.mp4

Isso criará o arquivo 00000001.jpgpara que você precise renomeá-lo. Tanto quanto sei, não há como especificar um nome de arquivo.

-vo jpegsignifica que você deseja saída JPEG, -ss 00:00:26procura a posição especificada, -frames 1significa processar um quadro e sair.

Florian Diesch
fonte
Qual é a vantagem de obter mais de um quadro? Serão cópias ou cada quadro será diferente em um segundo?
Sonevol
As imagens criadas a partir de mais quadros diferem em frações de segundo. O valor exato depende do vídeo.
Florian Diesch 18/01/19
5
@ Sonevol O quadro exatamente às 0:00:26 pode não ser exatamente o que você deseja. Você pode pegar os ~ 50 quadros entre 0:00:25 e 0:00:27 (ou até apenas 3-4 quadros em torno da marca 0:00:26) e depois navegar por eles para escolher o melhor.
XDaizu
1
@FlorianDiesch Também é possível gerar saída para png com algo como: -vo png:z=9com a configuração -z especificando o nível de compactação. Para jpeg você também pode adicionar em uma configuração de qualidade: -vo jpeg:quality=100. Mas sua resposta é ótima, pois já é :)
andrew
13

Você pode usar o ffmpeg

ffmpeg -loglevel quiet -ss 26 -i sample-video.mp4  -t 1 -f image2 anyfilename.jpeg
  • -loglevel define o logoutput como silencioso porque ffmpeg é muito falador
  • -ss é procurar (em segundos, ou seja, onde você deseja tirar o instantâneo)
  • -i arquivo de vídeo de entrada
  • -t período de tempo do instantâneo (em segundos)
  • -f tipo de arquivo

Você também pode brincar com as opções, como controlar a qualidade da saída -q:v <linear integer 1-10>ou resolução do JPEG -s 480x300.

Mais algumas idéias aqui


Método VLC

cvlc sample-video.mp4 --start-time=26 --run-time=1 --rate=1 --video-filter=scene --vout=dummy --aout=dummy  --scene-ratio=24 --scene-prefix=sample-image --scene-replace vlc://quit
  • cvlc - porque está na linha de comando e não queremos que nenhuma janela seja aberta. Além disso, isso significa que podemos executá-lo sem o X11.

  • --start-time = 26 - é a posição exata do instantâneo em segundos

  • --run-time = 1 - quanto tempo o vídeo será "reproduzido" em segundos. Tocamos por um segundo para fazer uma captura de tela deste segundo
  • --rate = 1 quando tirar a captura de tela. Isso basicamente significa "a cada segundo" e é útil, se você tiver arquivos mais longos, fazer uma captura de tela a cada 60 segundos ou a cada 5 minutos
  • --video-filter = scene diz ao VLC que queremos tirar screenshots
  • --vout = dummy sem saída para vídeo no X11, não precisamos dele
  • --aout = dummy sem saída para áudio, não precisamos dela
  • --scene-ratio = 24 , dizemos ao VLC que existem aproximadamente 24 quadros por segundo
  • --scene-prefix = sample-image o nome do arquivo da sua captura de tela
  • --cene-replace substitua todos os arquivos chamados como sua captura de tela sample-image.pngpela captura de tela atual. Se você omitir isso, o VLC começará a numerar as capturas de tela
  • vlc: // sai do vlc assim que terminamos

Documentação completa aqui

Robert Riedl
fonte
O que você quer dizer com tagarela? E eu quero um instantâneo no 26º segundo. Então, por que especificar o período por -t. Estou tirando foto, não vídeo.
Sonevol
3
"Chatty" porque o ffmpeg imprime mais de 40 linhas de saída de log com este comando, como a versão atual, o tipo de instalação e as informações sobre o arquivo de vídeo de entrada - o que é desinteressante para você. Para seu propósito, você provavelmente pode omitir "-t 1". Parece que o padrão é um segundo ou uma fração disso, o que é bom para a captura de tela. A boa diferença é a possibilidade de definir o nome do arquivo de saída e ajustar a qualidade / resolução, etc #
Robert Riedl