HandbrakeCLI bash toplu komut dosyası çalışmıyor.


2

Bir sürü dosyayı toplu olarak kodlamaya çalışıyorum. İnternet üzerinden bakarken sadece birkaç senaryo buldum ve hiçbiri benim için işe yaramadı. Bir şeyi bir araya getirmeye başladım ve eksi bir problem çalışmaya yakın

PRESET değişkeni çalışmıyor. Değişkeni kaldırmayı ve kodu girmeyi bile denedim ve hala çalışmadım. Bu tür bir komutu find içinde kullanmama izin verildiğinden emin değilim. Bunu yapmanın daha basit bir yolu olduğundan eminim.

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

Bu dosyayı komut satırından dosyaya göre yapsaydım, şöyle görünürdü.

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

Bir mp4 dosyasını yeniden boyutlandırmak isteseydim bunu yapardım, böylece kodlama sırasında dosyanın üzerine yazmazdım. Bu yüzden ilk bulgumda ekstra şeyler var.

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

Bir sorun: PRESETtek tırnak içinde belirir. Bu, bash -ckomut yürütülene kadar değerlendirilmeyeceği anlamına gelir . Bu PRESETdeniz kabuğunu yapmalısın . Bu nedenle: PRESET=...==>export PRESET=...
John1024

@ John1024 Bu benim kapsamımın ötesinde. Ben komut dosyası bash için çok yeni.
J4204144

Yanıtlar:


1

Değişken ikame tek tırnakla çalışmaz. Çift tırnak içine çift tırnak koymak için çift tırnak işareti ve kaçış karakteri kullanın.

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

Bu, diğer hatlar için de geçerlidir.

Güncelleme: Ah üzgünüm. Sorunu yanlış anladım.

İşte gözden geçirilmiş senaryo. Exec kullanmak yerine, döngü yapmak için while-do kullanıyorum

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

Ben alıyorumMissing input device. Run HandBrakeCLI --help for syntax.
J4204144

Ah, sorunuzu yanlış anladım. Lütfen güncellenmiş cevabımı gör.
masegaloeh

Bu mükemmel çalıştı. Bana yardım ettiğin için teşekkürler.
J4204144
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.