vshuf

Montrer des extraits aléatoires d'un ensemble de vidéos - retour accueil

git clone git://bebou.netlib.re/vshuf

Log | Files | Refs | README |

commit 95c4187611f3fbfa0e277ba512c4353fe1f84a40
Auteurice: Arthur Pons <arthur.pons@unistra.fr>
Date:   Sun, 16 Mar 2025 19:32:36 +0100

Début de l'outil, un peu brut

Diffstat:
A.gitignore | 3+++
AREADME.md | 28++++++++++++++++++++++++++++
Amake10s | 13+++++++++++++
Avshuf | 10++++++++++
4 files changed, 54 insertions(+), 0 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -0,0 +1,3 @@ +.*.sw? +videos +bdd diff --git a/README.md b/README.md @@ -0,0 +1,28 @@ +# vshuf + +Ce dépôt fourni le nécessaire pour générer des vidéos composées de `n` secondes +aléatoires prises dans les vidéos se trouvant dans le dossier `videos`. + +## Dépendances + + * ffmpeg + * shell posix + * les utilitaires shell posix (dont printf -0 et xargs -0) + +Testé sous debian 12 avec les GNU core utils + +## Usage + +Déposez vos vidéos dans `videos` et lancez avec `n` un entier supérieur à 0 : + + $ ./vshuf n + +Sans argument `n` = 10. `vshuf` créera une vidéo mp4 de `n` secondes nommée +aléatoirement dans `bdd` par vidéo dans `videos`. Avec `vlc` ou `mpv` on peut +ensuite les lire en faisant : + + $ mpv --loop-playlist=inf bdd/*.mp4 + +Pour l'instant l'outil ne concatène pas ces vidéos en une seule parce que ça +semble plus compliqué qu'il n'y paraît et que je comprends rien aux histoires +de synchro vidéo et audio. diff --git a/make10s b/make10s @@ -0,0 +1,13 @@ +#! /bin/sh + +set -ue + +video="${1:-Erreur, il faut un chemin vers une vidéo}" +l="${2:-10}" +duration=$(ffprobe -hide_banner "$video" 2>&1 | awk -F':' '/Duration:/ {print $2*3600+$3*60+$4}') +from=$(seq "$duration" | head -n-$l | shuf | head -n1) +echo "$video : from ${from}s for ${l}s" +rand=$(< /dev/urandom tr -d -c 'a-z\n' | grep -Eo ".{10}" | head -n1) +ffmpeg -y -hide_banner -ss "$from" -t "$l" -i "$video" bdd/$rand.mp4 2> /dev/null + + diff --git a/vshuf b/vshuf @@ -0,0 +1,10 @@ +#! /bin/sh + +set -ue + +mkdir -p bdd +rm -rf bdd/* +l=${1:-10} +find videos -type f | shuf | tr '\n' '\0' > bdd/list +< bdd/list xargs -P4 -0 -I{} ./make10s {} "$l" +