Ferramenta rápida para gerar galerias de vídeos em miniatura para linha de comando

14

Eu uso o gframecatcher para gerar galerias de vídeos em miniatura, ou seja, algo como isto:

insira a descrição da imagem aqui

No entanto, essa é uma ferramenta da GUI e quero criar recursivamente uma galeria para cada vídeo em uma estrutura de diretórios, por isso estou procurando uma ferramenta rápida de linha de comando para fazer isso.

aluna
fonte

Respostas:

28

Retire as capturas de imagem (elas têm 100 pixels de altura e mantenha a proporção), a taxa ( -r) é por segundo (isso gera um quadro a cada ~ 5 minutos), isso também adiciona o carimbo de hora na imagem de saída.

ffmpeg  -i MOVIE.mp4 -r 0.0033 -vf scale=-1:120 -vcodec png capture-%002d.png

Em seguida, use ImageMagickpara criar sua imagem da galeria:

montage -title "Movie Name\nSubtitle" -geometry +4+4 capture*.png output.png
sombrio
fonte
7
Você pode usar frações para a taxa ( -r). Isso torna mais fácil e preciso especificar horários. 5min = 300 segundos ffmpeg -i MOVIE.mp4 -r 1/300 -vf scale=-1:120 -vcodec png capture-%02d.png.
DutGRIFF
avconvfunciona da mesma maneira, caso você não tenha ffmpegdisponível (algumas versões do Ubuntu).
Ken afiada
2
Isso funciona, mas requer canalização em todo o arquivo de vídeo. superuser.com/questions/538112/… fornece alguns exemplos que tentam encontrar miniaturas significativas, além de evitar sentar e processar o vídeo inteiro para obter alguns quadros.
Skrylar 21/05
Isso não adiciona o carimbo de data / hora à imagem.
Feltro #
Como você faria isso em lote para vários vídeos em um diretório?
Paul Jones
12

Eu gosto de usar um script de bash de linha de comando unix fácil de usar chamado VCS - Video Contact Sheet. Sua página oficial: http://p.outlyer.net/vcs/

É muito mais fácil de usar ainda mais fácil do que uma GUI

'' É um script bash destinado a criar folhas de contato de vídeo (visualizações), também conhecidas como miniaturas ou visualizações de vídeos. Qualquer vídeo suportado pelo mplayer e ffmpeg pode ser usado por este script. '' Você precisará ter um ffmpegou mplayerinstalar no seu sistema.

Uso:

vcs input-filename -U0 -i 1m -c 3 -H 200 -a 300/200 -o save-filename.jpg

Como o comando funciona

Edite input-filname para o nome do seu arquivo de vídeo!

  • -U0(nenhum nome no rodapé - ou ele exibe o nome do host - observe que zero é a letra O)

  • -i 1m(define o intervalo de tempo de captura em minutos - nesse caso, a cada minuto - você também pode usar o -nque define o número de capturas, por exemplo -n 21, criará 21 imagens, mas não use as duas)

  • -c define o número de colunas (aqui são 3 colunas)

  • -H 200 -a 300/200 (define tamanho e aspecto para que o arquivo não seja muito grande - parece que você precisa fazer as duas coisas)

  • -o filename.jpg(use .jpgo padrão como .pngé muito grande - e altere o nome do arquivo para um de sua escolha!)

Code Falasi
fonte
7

Este parece se encaixar na conta , é gratuito e de código aberto e até funciona no Windows :)

Ele ainda possui coisas avançadas, como, em vez de escolher cegamente qualquer quadro no intervalo específico, ele pode escolher quadros que estejam próximos o suficiente, mas não pareçam muito embaçados, então, ao invés de fazer isso:

captura de tela

Você pode passar um parâmetro ( -D6) para fazer isso:

melhor captura de tela

Além disso, eu realmente não gosto de bordas, para que as imagens possam ser um pouco maiores.

Camilo Martin
fonte
7

Existe uma solução no fórum ffmpeg.

Para fazer várias capturas de tela e colocá-las em um único arquivo de imagem (criando peças), você pode usar o filtro de vídeo de peças do FFmpeg, assim:

ffmpeg -ss 00:00:10 -i movie.avi -vf 'select=not(mod(n\,1000)),scale=320:240,tile=2x3' out.png

Isso buscará 10 segundos no filme, selecione a cada milésimo quadro, dimensione-o para 320x240 pixels e crie 2x3 blocos na imagem de saída out.png.

Post original aqui - http://ffmpeg.gusari.org/viewtopic.php?f=25&t=597

Maxim Kruglov
fonte
Além disso, o ffmpeg parece suportar "recorte" com a mesma sintaxe.
algumas idéias
4

É assim que eu processo uma planilha de contato simples usando o AWS EC2, do meu mac.

Etapa 1: criar uma instância do EC2 no Amazon Web Services

Eu usei:

Amazon Linux AMI 2015.03.1 (HVM), SSD Volume Type - ami-0d4cfd66
t2.medium

Etapa 2: configurar a instância

Tudo isso é executado no meu mac por conveniência, mas você também pode executar apenas os comandos "sudu su ..." na linha de comando do EC2.

ssh -i "/local/path/to/key/your_ec2_key.pem" [email protected] "sudo su root; curl -O http://ffmpeg.gusari.org/static/64bit/ffmpeg.static.64bit.latest.tar.gz"
ssh -i "/local/path/to/key/your_ec2_key.pem" [email protected] "sudo su root; gunzip ffmpeg.static.64bit.latest.tar.gz"
ssh -i "/local/path/to/key/your_ec2_key.pem" [email protected] "sudo su root; tar -xf ffmpeg.static.64bit.latest.tar"

Substituindo 11.22.33.44 pelo seu IP do EC2.

Etapa 3: processar um vídeo

Envie o vídeo:

rsync -Pav -e 'ssh -i /local/path/to/key/your_ec2_key.pem pem' /Users/mdouma/Desktop/myVideo.mov [email protected]:/home/ec2-user/

Processe-o em uma folha de contato:

ssh -i "/local/path/to/key/your_ec2_key.pem" [email protected] "rm -f out.png ; ./ffmpeg -ss 00:00:00 -i myVideo.mov -vf 'select=not(mod(n\,1)),scale=113:111,crop=111:111,tile=18x36' out.png"

Alterar / Usuários / mdouma para a raiz local Altere ", 1" para outro número, por exemplo, ", 7", se você quiser apenas a 7ª estrutura. Mude 111 para o tamanho que desejar

Copie-o de volta para o meu mac:

rsync -Pav -e 'ssh -i /local/path/to/key/your_ec2_key.pem'  [email protected]:/home/ec2-user/out.png  /Users/mdouma/Desktop/out.png
open /Users/mdouma/Desktop/out.png
algumas ideias
fonte
Esta é uma ótima dica. Note que isso não sudo sutem objetivo.
Ken afiada
2
Por que você está enviando isso para ec2? Por que não executá-lo localmente no seu mac? os arquivos de vídeo podem ter GBs grandes ...
conferiu 28/11
4

Essa ferramenta me ajudou (2019-02) - e é mantida. Muitas opções - grade, qualidade, fontes, cores, borda, intervalo, ...

https://github.com/amietn/vcsi

Crie folhas de contato de vídeo. Uma folha de contato de vídeo é uma imagem composta de miniaturas de captura de vídeo dispostas em uma grade.

Você só precisa de ffmpeg e python.

hrvoj3e
fonte
Isso é muito bom - obrigado!
Ash
1

O pacote 'imagemagick' possui utilitários para coisas como esta.

http://www.imagemagick.org/Usage/thumbnails/

Existem bibliotecas de API que usam o imagemajick para vários idiomas também .

Cachinhos Dourados
fonte
Qual seria o comando correspondente?
student
converté provavelmente o mais geral. Veja a seção Criação geral de miniaturas na primeira página à qual vinculei.
GOLDILOCKS
1

Totem - o player de vídeo padrão para 14.04 e algumas versões anteriores do Ubuntu - possui uma opção de menu com opções simples (no menu Editar, "Criar galeria de capturas de tela ..."). Há também um equivalente à linha de comando (ish) chamado "totem-video-thumbnailer", que possui uma página de manual que mostra como usá-lo; Escrevi um script bash simples que usava a saída do comando find (tomando cuidado para não separar arquivos com espaços em nomes) para gerar automaticamente uma galeria de capturas de tela em miniatura (ou folha de contato, como também mencionado acima) para qualquer arquivo acima de um determinado tamanho em um diretório que ainda não tinha um.

Eu poderia carregá-lo no meu github sob ~ jgbreezer se alguém gostasse de procurá-lo. Embora as soluções usando ffmpeg e outras coisas possam ser mais flexíveis e confiáveis; Parece que recebo saídas de erro do comando totem por não encontrar determinados quadros, mas parece funcionar de qualquer maneira na maioria das vezes.

Breezer
fonte
0

Eu queria a mesma coisa e o Google acabou usando o ffmpeg e o imagemagick. IMHO NÃO 'rápido'. Em seguida, encontrou um script bash chamado SlickSlice (atualizado pela última vez em 2008, mas funcionou perfeitamente até ontem). Instalei e personalizei ao meu gosto usando o arquivo de configuração e o próprio script. O script usa o ImageMagick e o MPlayer a propósito.

Fiz um detalhamento de instruções e personalização depois de usá-lo com sucesso. Depois de instalado com sucesso, você pode gerar a miniatura da linha do tempo do vídeo com o seguinte comando:
slickslice -x "InputFile.mp4"(padrão 4 colunas x 15 linhas) ou
slickslice -x "InputFile.mp4" -S 6x10(para 6 colunas x 10 linhas).

Ele gera como SLICKSLICED_InputFile.mp4.jpege eu o personalizei para produzir InputFile.mp4-screen.jpegeditando o próprio script bash.

Saidul Hassan
fonte