J'essaie d'encoder par lots un tas de fichiers. En regardant sur Internet, je n'ai trouvé que quelques scripts et aucun d'entre eux ne fonctionnait pour moi. J'ai commencé à reconstituer quelque chose et il est proche de travailler moins un problème
La variable PRESET ne fonctionne pas. J'ai même essayé de supprimer la variable et de mettre le code et je ne fonctionnais toujours pas. Je ne suis pas sûr de pouvoir utiliser ce type de commande dans find. Je suis sûr qu’il existe un moyen plus simple et plus élégant de procéder.
#!/bin/bash
SRC="/home/usr/temp/encode"
PRESET="-e x264 -q 20.0 -E faac -B 128 -6 dpl2 -w 1280 --loose-crop --loose-anamorphic --x264-preset veryfast --h264-profile high --h264-level 4.1"
find $SRC -type f -name '*.mp4' -exec bash -c 'name="{}"; HandBrakeCLI -i "$name" -o "${name}.tmp" $PRESET && rm "$name" && mv "${name}.tmp" "$name"' \;
find $SRC -type f -name '*.wmv' -exec bash -c 'name="{}"; HandBrakeCLI -i "$name" -o "${name%.wmv}.mp4" $PRESET && rm "$name"' \;
find $SRC -type f -name '*.mov' -exec bash -c 'name="{}"; HandBrakeCLI -i "$name" -o "${name%.mov}.mp4" $PRESET && rm "$name"' \;
exit
Si je devais faire ce fichier par fichier à partir de la ligne de commande, il ressemblerait à ceci
HandBrakeCLI -i "filename.mov" -o "filename.mp4" -e x264 -q 20.0 -E faac -B 128 -6 dpl2 -w 1280 --loose-crop --loose-anamorphic --x264-preset veryfast --h264-profile high --h264-level 4.1
Si je devais redimensionner un fichier mp4, je le ferais pour ne pas écraser le fichier car il est encodé. C'est pourquoi j'ai les trucs supplémentaires à la première découverte.
HandBrakeCLI -i "filename.mp4" -o "filename.NEW.mp4" -e x264 -q 20.0 -E faac -B 128 -6 dpl2 -w 1280 --loose-crop --loose-anamorphic --x264-preset veryfast --h264-profile high --h264-level 4.1
la source
PRESET
apparaît entre guillemets. Cela signifie qu'il ne sera pas évalué avant que labash -c
commande soit exécutée. Vous devez vous rendrePRESET
dans ce sous-shell. Par conséquent:PRESET=...
==>export PRESET=...
Réponses:
La substitution de variable ne fonctionne pas entre guillemets simples. Utilisez les guillemets doubles et le caractère d'échappement pour insérer des guillemets entre guillemets.
Ceci s’applique également aux autres lignes.
Mis à jour: Ah désolé. J'ai mal interprété votre question.
Voici le script révisé. Au lieu d'utiliser exec, j'utilise while-do to looping
la source
Missing input device. Run HandBrakeCLI --help for syntax.