O script de lote basico do HandbrakeCLI não está funcionando.

2

Estou tentando codificar em lote vários arquivos. Olhando pela internet eu encontrei apenas alguns scripts e nenhum deles funcionou para mim. Eu comecei a juntar algo e está perto de trabalhar menos um problema

A variável PRESET não está funcionando. Eu até tentei remover a variável e colocar o código e ainda não funcionou. Não tenho certeza se tenho permissão para usar esse tipo de comando em find. Tenho certeza de que há uma maneira mais simples e elegante de fazer isso.

#!/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

Se eu fosse fazer esse arquivo por arquivo na linha de comando, ficaria assim

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

Se eu fosse redimensionar um arquivo mp4, eu faria isso para não substituir o arquivo como está codificando. É por isso que tenho o material extra no primeiro achado.

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
    
por J4204144 05.05.2014 / 06:22

1 resposta

1

Substituição de variável não funciona entre aspas simples. Use aspas duplas e o caractere de escape para colocar aspas duplas entre aspas duplas.

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

Isso se aplica a outras linhas também.

Atualizado: Ah desculpe. Eu interpretei mal sua pergunta.

Aqui o roteiro revisado. Em vez disso, usando exec, eu uso while-do para 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
    
por 05.05.2014 / 06:42