[script] encodage de video

Tags: #<Tag:0x00007f509b71dc28>

Bonjour,

je suis encore sur mes vidéos. J’explique de nouveau.
j’aimerai compresser mes vidéos. Et ensuite qu’elle se copie dans un répertoire avec son full chemin.

j’ai crée cette commande.

$ find /tmp/video -xdev -type f -name '*.mp4' | xargs -n 1 -I {} bash -c 'ffmpeg -i {} -vcodec libx265 -crf 28 /tmp/video-comp{} \;'

la commande plante car les répertoires de destinations n’existe pas.

avez vous une idée comment je peut procéder?

merci

Bonjour.

Tu pourrais les créer avant ta cmd(que je n’ai pas testée) .
for fichier in $( find /tmp/video -xdev -type f -name '*.mp4'); do dest_dir="/tmp$(dirname "$fichier")"; mkdir -p "$dest_dir"; done

ça ne va pas marcher ( trop de " )

     fab@fabien:/tmp$ tree video
    video
    ├── bambi
    │   └── yep.mp4
    ├── voyages
    │   └── truc.mp4
    └── yop.mp4

    3 directories, 3 files
    fab@fabien:/tmp$ for fichier in $( find /tmp/video -xdev -type f -name '*.mp4'); do dest_dir="/tmp/essai$(dirname "$fichier")"; mkdir -p "$dest_dir"; done
    fab@fabien:/tmp$ tree essai
    essai
    └── tmp
        └── video
            ├── bambi
            └── voyages

    5 directories, 0 files
    fab@fabien:/tmp$

(les guillemets sont nécessaires pour traiter le nom des fichiers comprenant par exemple des espaces ou des caractères spéciaux tel que le point d’interrogation…)

J’ai trouvé et j’ai tester ceci avec rsync.

Cela fonctionne.

rsync -av -f"+ */" -f"- *" "." "/tmp/video-comp"

oui, mais dans
for fichier in $( find /tmp/video -xdev -type f -name '*.mp4'); do dest_dir="/tmp$(dirname "$fichier")"; mkdir -p "$dest_dir"; done

le guillemet de ferme avant le $ et s’ouvre après fichier

Je ne saisi pas le point que tu soulèves :
dans "/tmp$(dirname "$fichier")" l’interprétateur bash évaluera d’abord la substitution de
commande.

par habitude j’aurais dit non, mais il semble que tu aies raison.

par ailleurs ton script ne marchera pas avec des espaces dans les dossiers
quand tu fais un for de ce genre il faut rajouter au début IFS="\n"

pour éviter ça j’utilise maintenant la notation suivante :
find /tmp/video -xdev -type f -name '*.mp4' |while read fichier; do .... ; done

1 J'aime

Effectivement, j’ai oublié de protéger la substitution de commande dans mon approche : for fichier in "$( find "/tmp/" -xdev -type f -name '*.mp3')"; do

1 J'aime