Created
May 29, 2015 21:16
-
-
Save zas/b4a7c81e2993cba3768e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Génère un script qui copie les images source autant de fois que nécessaire, | |
# respectant la structure (ordre des répertoires et des fichiers), | |
# pour créer une vidéo image par image | |
# ensuite convertit les images en vidéo | |
# Note: ce script génére un script | |
# donc faire: | |
# $ . generate.sh > copyall.sh | |
# | |
# vérifier les commandes générées: | |
# less copyall.sh | |
# | |
# éxécutez: | |
# . copyall.sh | |
# STRUCTURE DES REPS | |
# . | |
# ├── images_finales | |
# │ ├── montage | |
# │ │ ├── 01_blanc | |
# │ │ │ ├── 7up.png | |
# │ │ │ ├── actimel.png | |
# │ │ │ ├── alsa.png | |
# │ │ │ ├── balisto.png | |
# │ │ │ ├── benetjerry.png | |
# │ │ │ ├── ... | |
# │ │ │ ├── tropicana.png | |
# │ │ │ ├── twinings.png | |
# │ │ │ ├── twix.png | |
# │ │ │ ├── vico.png | |
# │ │ │ └── yop.png | |
# │ │ ├── 02_jaune | |
# │ │ │ ├── 001_mazola.png | |
# │ │ │ └── icetea.png | |
# │ │ ├── 03_orange | |
# │ │ │ ├── krema.png | |
# │ │ │ └── unclesbens.png | |
# │ │ ├── 04_rouge | |
# │ │ │ ├── 001_kitkat.png | |
# │ │ │ ├── 002_malteses.png | |
# │ │ │ ├── 003_macdo.png | |
# │ │ │ ├── 004_pringles.png | |
# │ │ │ └── cocacola.png | |
# │ │ ├── 05_marron | |
# │ │ │ ├── chokolate.png | |
# │ │ │ ├── cocopops.png | |
# │ │ │ └── lion.png | |
# │ │ ├── 06_bleu | |
# │ │ │ ├── 004_knorr.png | |
# │ │ │ ├── 005_crunch.png | |
# │ │ │ ├── 006_smarties.png | |
# │ │ │ ├── 007_poulain.png | |
# │ │ │ ├── 008_prince.png | |
# │ │ │ ├── 009_milkyway.png | |
# │ │ │ └── 010_frosties.png | |
# │ │ ├── 07_noir | |
# │ │ │ ├── mars.png | |
# │ │ │ └── nesafé.png | |
# │ │ ├── copyall.sh | |
# │ │ ├── generate_commented.sh <--- vous etes ici | |
# │ │ ├── generate.sh | |
# │ │ ├── genvid.sh | |
# │ │ ├── The Bloody Beetroots - Rocksteady.ogg | |
# │ │ └── The Bloody Beetroots - Rocksteady.wav | |
# │ └── vid | |
# │ └── output.mp4 | |
# └── images_originales | |
# run from this script directory ('montage') | |
# destination des images générées et de la vidéo, ici "vid" dans le répertoire parent | |
DEST=../vid | |
# fichier son | |
SOUNDFILE=The\ Bloody\ Beetroots\ -\ Rocksteady.wav | |
# nom du fichier video | |
VIDEOFILE=output.mp4 | |
# nombre d'images de video à générer par image source (12 images à 25 images/s =~ 0.5s) | |
NUM_PER_IMG_DFT=11 | |
# frames par seconde pour la video | |
FPS=25 | |
# nombre total de "frames" (images de la vidéo) à générer | |
MAXFRAMES=$((94*$FPS)) | |
# compteur de frames | |
export COUNT=0; | |
# suppression des fichiers issus d'une précédente génération | |
echo "rm ${DEST}/0*.png" | |
# nombre de boucles (suffisant pour couvrir le nombre de frames) | |
# en gros > MAXFRAMES / (nombre de fichiers image source * NUM_PER_IMG_DFT) | |
NBLOOP=2 | |
for LOOP in $(seq 0 $NBLOOP); do | |
# recherche les repertoires des images (par couleur) | |
for DIR in $(find . -maxdepth 1 -mindepth 1 -type d|sort); do | |
# liste les fichiers dans ce repertoire | |
for FILE in $(ls -1 $DIR --color=none|sort); do | |
COUNT=$(($COUNT+1)); | |
if [ $COUNT -gt $MAXFRAMES ] ; then | |
# on a depasse le nombre de frames requis, on stoppe | |
break 3 | |
fi | |
#conversion des images source vers un fichier png | |
#ici les fichiers source ont tous la bonne taille, pas besoin | |
#de redimmensionner | |
# voir convert (ImageMagick) | |
CONVERTED="$DEST/$(printf "%06d.png" $COUNT)"; | |
echo convert $DIR/"$FILE" -flatten +matte "$CONVERTED"; | |
NUM_PER_IMG=$NUM_PER_IMG_DFT | |
# exemple de "ralentissement"" entre la frame 100 et 200 | |
#if [ $COUNT -gt 100 ] && [ $COUNT -le 200 ]; then | |
# NUM_PER_IMG=25 | |
#fi | |
for i in $(seq 1 $NUM_PER_IMG); do | |
COUNT=$(($COUNT+1)); | |
if [ $COUNT -gt $MAXFRAMES ] ; then | |
# on a depasse le nombre de frames requis, on stoppe | |
break 4 | |
fi | |
# on cree un lien symbolique pour multiplier les images identiques | |
echo ln -s "$CONVERTED" "$DEST/$(printf "%06d.png" $COUNT)"; | |
# si les liens symboliques ne sont pas supportes, on fait des copies: | |
# par exemple: | |
# echo cp "$CONVERTED" "$DEST/$(printf "%06d.png" $COUNT)"; | |
done; | |
done; | |
done; | |
done | |
# generation de la video à partir de l'ensemble des images fixes | |
# on prend tous les fichiers xxxxxx.png (x=[0-9]) | |
# et aussi le fichier son | |
# on utilise "avconv" ici (https://libav.org) mais ffmpeg fonctionne aussi (http://www.ffmpeg.org) | |
echo "avconv -i '$DEST/%06d.png' -i '$SOUNDFILE' -threads 4 -s 1280x720 -vcodec mpeg4 -acodec libvo_aacenc -b 20000k -r $FPS -y '$DEST/$VIDEOFILE'" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment