Le script de traitement par lots bash HandbrakeCLI ne fonctionne pas.


2

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

Un problème: PRESETapparaît entre guillemets. Cela signifie qu'il ne sera pas évalué avant que la bash -ccommande soit exécutée. Vous devez vous rendre PRESETdans ce sous-shell. Par conséquent: PRESET=...==>export PRESET=...
John1024

@ John1024 Cela dépasse ma portée. Je suis très nouveau dans les scripts bash.
J4204144

Réponses:


1

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.

find $SRC -type f -name '*.mp4' -exec bash -c "name=\"{}\"; HandBrakeCLI -i \"$name\" -o \"${name}.tmp\" $PRESET && rm \"$name\" && mv \"${name}.tmp\" \"$name\"" \;

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

#!/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' | while read name; do HandBrakeCLI -i "${name}" -o "${name}.tmp" ${PRESET} && rm "${name}" && mv "${name}.tmp" "${name}"; done

find $SRC -type f -name '*.wmv' | while read name; do HandBrakeCLI -i "${name}" -o "${name%.wmv}.mp4" ${PRESET} && rm "${name}"; done

find $SRC -type f -name '*.mov' | while read name; do HandBrakeCLI -i "${name}" -o "${name%.mov}.mp4" ${PRESET} && rm "${name}"; done

exit

Je reçoisMissing input device. Run HandBrakeCLI --help for syntax.
J4204144

Ah, j'ai mal interprété votre question. S'il vous plaît regardez ma réponse mise à jour.
masegaloeh

Cela a fonctionné parfaitement. Un énorme merci de m'aider.
J4204144
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.