Herramienta rápida para generar galerías de video en miniatura para la línea de comando

14

Uso gframecatcher para generar galerías de videos en miniatura, es decir, algo como esto:

ingrese la descripción de la imagen aquí

Sin embargo, esta es una herramienta GUI y quiero crear recursivamente una galería para cada video en una estructura de directorio, por lo que estoy buscando una herramienta de línea de comandos rápida para hacerlo.

estudiante
fuente

Respuestas:

28

Saque las capturas de imagen (tienen 100 píxeles de alto y mantenga la relación de aspecto), la velocidad ( -r) es por segundo (esto produce un cuadro cada ~ 5 minutos), esto también agrega una marca de tiempo a la imagen de salida.

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

Luego use ImageMagickpara construir su imagen de galería:

montage -title "Movie Name\nSubtitle" -geometry +4+4 capture*.png output.png
utopía
fuente
77
Puede usar fracciones para la tasa ( -r). Esto hace que sea más fácil y más preciso especificar tiempos. 5 min = 300 segundos ffmpeg -i MOVIE.mp4 -r 1/300 -vf scale=-1:120 -vcodec png capture-%02d.png.
DutGRIFF
avconvfunciona de la misma manera, en caso de que no tenga ffmpegdisponible (algunas versiones de Ubuntu).
Ken Sharp
2
Esto funciona, pero requiere la conexión de todo el archivo de video. superuser.com/questions/538112/… proporciona algunos ejemplos que intentan encontrar miniaturas significativas, así como evitar tener que sentarse y procesar todo el video para obtener algunos fotogramas.
Skrylar
Esto no agrega la marca de tiempo a la imagen.
Felwithe
¿Cómo harías esto en lote para un montón de videos en un directorio?
Paul Jones
12

Me gusta usar un script bash de línea de comandos de Unix fácil de usar llamado VCS - Video Contact Sheet. Su página oficial: http://p.outlyer.net/vcs/

Es mucho más fácil de usar, incluso más fácil que una GUI

'' Es un script bash destinado a crear hojas de contacto de video (vistas previas), también conocidas como miniaturas o vistas previas de videos. Este script puede usar cualquier video compatible con mplayer y ffmpeg. '' Necesitará tener uno ffmpego mplayerinstalarlo en su sistema.

Uso:

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

Como funciona el comando

¡Edite input-filname al nombre de su archivo de video!

  • -U0(sin nombre en el pie de página, o si no muestra el nombre del host, tenga en cuenta que esto es cero, no la letra O)

  • -i 1m(establece el intervalo de tiempo de captura en minutos, en este caso es cada minuto, también puede usarlo, -nque establece el número de capturas, por ejemplo -n 21, creará 21 imágenes, pero no use ambas)

  • -c establece el número de columnas (aquí son 3 columnas)

  • -H 200 -a 300/200 (establece el tamaño y el aspecto para que el archivo no sea demasiado grande, parece que tiene que hacer ambas cosas)

  • -o filename.jpg(úselo .jpgcomo predeterminado, ya que .pnges demasiado grande, ¡y cambie el nombre del archivo a uno de su elección!)

Code Falasi
fuente
7

Este parece encajar perfectamente , es gratuito y de código abierto e incluso funciona en Windows :)

Incluso tiene cosas avanzadas, como en lugar de elegir ciegamente cualquier fotograma en el intervalo particular, puede elegir las que estén lo suficientemente cerca pero no se vean demasiado borrosas, así que en lugar de hacer esto:

captura de pantalla

Puede pasarle un parámetro ( -D6) para que haga esto:

mejor captura de pantalla

Además, realmente no me gustan los bordes, por lo que las imágenes pueden ser ligeramente más grandes.

Camilo Martin
fuente
7

Hay una solución del foro ffmpeg.

Para hacer múltiples capturas de pantalla y colocarlas en un solo archivo de imagen (creando mosaicos), puede usar el filtro de video en mosaico de FFmpeg, de esta manera:

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

Eso buscará 10 segundos en la película, seleccionará cada fotograma número 1000, escalará a 320x240 píxeles y creará mosaicos de 2x3 en la imagen de salida out.png.

Publicación original aquí: http://ffmpeg.gusari.org/viewtopic.php?f=25&t=597

Maxim Kruglov
fuente
Además, ffmpeg parece admitir "recortar" con la misma sintaxis.
algunas ideas
4

Así es como proceso una hoja de contacto simple usando AWS EC2, desde mi mac.

Paso 1: Cree una instancia EC2 en Amazon Web Services

Solía:

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

Paso 2: configurar la instancia

Todo esto se ejecuta desde mi mac por conveniencia, pero también puede ejecutar solo los comandos "sudu su ..." desde la línea de comandos 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"

Reemplazar 11.22.33.44 con su IP EC2.

Paso # 3: Procesar un video

Envía el video:

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

Proceselo en una hoja de contacto:

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"

Cambie / Users / mdouma a su raíz local Cambie ", 1" a otro número, por ejemplo, ", 7", si solo desea cada 7º cuadro. Cambia 111 al tamaño que quieras

Copie de nuevo a mi 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
algunas ideas
fuente
Este es un gran consejo. Tenga en cuenta que eso no sudo sutiene sentido.
Ken Sharp
2
¿Por qué envías esto a ec2? ¿Por qué no simplemente ejecutarlo en tu Mac localmente? los archivos de vídeo podría ser grande ... GB
haventchecked
4

Esta herramienta me ayudó (2019-02), y se mantiene. Muchas opciones: cuadrícula, calidad, fuentes, colores, borde, intervalo, ...

https://github.com/amietn/vcsi

Crea hojas de contactos de video. Una hoja de contacto de video es una imagen compuesta de miniaturas de captura de video dispuestas en una cuadrícula.

Solo necesitas ffmpeg y python.

hrvoj3e
fuente
Esto es muy bueno, ¡gracias!
Ash
1

El paquete 'imagemagick' tiene utilidades para cosas como esta.

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

También hay bibliotecas API que utilizan imagemajick para varios idiomas .

encerrada dorada
fuente
¿Cuál sería el comando correspondiente?
estudiante
convertEs probablemente el más general. Mire la sección titulada Creación general de miniaturas en la primera página a la que me vinculé.
Ricitos de oro
1

Totem, el reproductor de video predeterminado para 14.04 y algunas versiones anteriores de Ubuntu, tiene una opción de menú con opciones simples (en el menú Editar, "Crear galería de capturas de pantalla ..."). También hay un equivalente de línea de comando (ish) llamado "totem-video-thumbnailer" que tiene una página de manual que le dice cómo usarlo; Escribí un script de bash simple que utilizaba la salida del comando find (teniendo cuidado de no separar archivos con espacios en los nombres) para generar automáticamente una galería de capturas de pantalla en miniatura (o una hoja de contacto como también se mencionó anteriormente) para cualquier archivo por encima de cierto tamaño en un directorio que aún no tenía uno.

Podría subirlo a mi github en ~ jgbreezer si a alguien le gusta buscarlo. Aunque las soluciones que usan ffmpeg y otras cosas pueden ser más flexibles y confiables; Parece que obtengo salidas de error del comando totem sobre no encontrar ciertos marcos, pero parece funcionar de todos modos la mayor parte del tiempo.

Breezer
fuente
0

Quería lo mismo y googleé terminó usando ffmpeg e imagemagick. NO 'rápido' en mi humilde opinión. Luego encontré un script bash llamado SlickSlice (última actualización 2008 pero funcionó perfectamente a partir de ayer). Lo instalé y lo personalicé a mi gusto usando el archivo de configuración y el script en sí. El script usa ImageMagick y MPlayer por cierto.

Hice un procedimiento detallado y personalización después de usarlo con éxito. Una vez instalado con éxito, puede generar una miniatura de la línea de tiempo del video con un comando tan simple:
slickslice -x "InputFile.mp4"(predeterminado 4 columnas x 15 filas) o
slickslice -x "InputFile.mp4" -S 6x10(para 6 columnas x 10 filas).

Sale como SLICKSLICED_InputFile.mp4.jpegy lo personalicé para producir InputFile.mp4-screen.jpegeditando el script bash en sí.

Saidul Hassan
fuente