Faire une miniature à partir de la vidéo

11

Comment puis-je faire une capture simple à partir d'une vidéo. De préférence depuis la ligne de commande?

Idée: prendre 9 instantanés pour 9 fois placés (sur la chronologie) et les enregistrer en JPG

Exemple:

Movie length = 10 min
T1= snapshot of 1 min
T2= snapshot of 2 min
......
T9= snapshot of 9 min
   |   |
 T1| T2| T3
---+---+---
 T4| T5| T6
---+---+---
 T7| T8| T9
   |   |

Quel est le meilleur programme pour ce faire? Existe-t-il des programmes open source?

Siga
la source

Réponses:

5

ffmpeg est un excellent outil open source pour manipuler des vidéos, y compris l'extraction d'images.

Pour extraire une seule image d'un horodatage spécifique, vous pouvez utiliser une commande comme

ffmpeg -i video.avi -r 1  -t 00:01:00 -f image2 image%05d.png

-r est framerate. Vous pouvez également utiliser une commande comme

ffmpeg -i video.avi -r 1/1440 -f image2 image%05d.png

pour obtenir une image toutes les minutes (en supposant une vidéo 24FPS). Le% 05d signifie que le nombre ordinal de chaque image miniature doit être formaté en utilisant 5 chiffres.

Si vous souhaitez combiner des images en tant que montage (votre grille), vous pouvez utiliser imagemagick après avoir extrait des images à l'aide de ffmpeg.

Olli
la source
2

Ce n'est pas un programme en ligne de commande, mais vous pouvez également utiliser qframecatcher .

Pour ubuntu / debian, les exigences sont les suivantes: sudo apt-get install libqt4-dev libxine-dev build-essential

wget http://download.berlios.de/qframecatcher/qframecatcher-0.4.1.tar.gz
tar xzf qframecatcher-0.4.1.tar.gz
cd qframecatcher/src
qmake
make
./qframecatcher

Source: http://blog.radevic.com/2008/06/how-to-create-movie-or-video-frame.html

Savvas Radevic
la source
1

vcsi est un outil en ligne de commande écrit en Python qui peut être utilisé pour créer une grille de snapshots 3 x 3 avec la commande suivante:

vcsi -g 3x3 video.mkv -o output.jpg
zx228
la source
0

Mon cas d'utilisation n'est qu'une vignette d'une vidéo, un seul fichier à utiliser comme <video>affiche de balise. Alors, quel serait un moyen rapide de faire cela?

Avec ffmpeg, vous pouvez faire ceci:

ffmpeg -ss 123 -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg

Cela vous donnera le cadre près de la seconde 123du video.mp4fichier enregistré sous poster.jpg.

Le problème, comme vous pouvez le voir, est que nous devons savoir quelle seconde est la bonne.

Afin de garder nos dépendances faibles, nous utiliserons ffmpeg lui-même pour cela:

# Get the time as h:m:s (non-padded)
l=$(ffmpeg -i video.mp4 2>&1 | grep Duration: | sed -r 's/\..*//;s/.*: //;s/0([0-9])/\1/g')
# Convert that into seconds
s=$((($(cut -f1 -d: <<< $l) * 60 + $(cut -f2 -d: <<< $l)) * 60 + $(cut -f3 -d: <<< $l)))
# Get frame at 25% as the thumbnail
ffmpeg -ss $((s / 4)) -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg

25% de la vidéo semble être un choix commun, mais vous pouvez aussi la faire à 33% ou 50%.

Voici un script qui fait cela .

Camilo Martin
la source