Bash komut dosyasını tekrarlı olarak .mov dosyalarını bulmak ve ffmpeg kullanarak.


2

Bir video şirketindeki Mac sisteminde, büyük ara video dosyalarını içeren birçok klasörü ve alt klasörü temizlemem gerekiyor.

Bu yüzden toplu iş için birçok .mov dosyasını h.264 .mp4 dosyalarına dönüştürmek için ffmpeg kullanarak bir yol aradım. Toplu dönüştürme yapmak için benzer bir komut dosyası kullanarak birkaç kod buldum

for f in '*.mov';
   do ffmpeg -i $f -c:v libx264 -f mp4 "${%f.mov}.mp4" ; 
done

Ancak bu sadece betiğin çalıştığı klasörde çalışır, ben de .mov dosyalarını bulmanın bir yolunu arıyorum yinelemeli , ve toplu iş hepsini dönüştürür.

Şu anda, benim için çalışan çözüm, biraz kaba kuvvet hissediyor; Sadece bul ve çalıştır ffmpeg kullanıyorum;

 find . -name '*.mov' -type f -exec ffmpeg -i {} -c:v libx264 -f mp4 {}.mp4 

Ancak, karşılaştığım sorunlardan biri, .mov yerine .mp4'ü bu formatta kullanamadığım gibi görünüyor, bu nedenle çıktı {} yerine. .mp4

Bunun yanında, bunun bir toplu iş oluşturmanın en güvenli ya da en güzel yolu olmadığını tahmin ediyorum.

Ffmpeg için bir toplu iş oluşturmanın daha güvenli ya da daha az terminal yoğun bir yolu olup olmadığını, hatta isimlendirme sorunumu çözebilecek ya da 'in için * mov' komutunu tekrarlayan bir şekilde 5 taneye kadar video bulmanın bir yolu olup olmadığını merak ediyordum. + klasörler derin.

Herhangi bir yardım çok takdir edilecektir.


Başlığınız çok iyi yazılmış değil. Bu özyinelemeli bir dönüşüm değil. Bir toplu dönüştürme komut dosyası ile yardımcı olmak için özyinelemeli bir arama / bulmak istiyorsunuz.
jiggunjer

Kendi yayınlarınızı serbestçe düzenleyebilirsiniz ancak korumanız için bu işlemin orijinal kullanıcı hesabı altında yapılması gerekir. Görünüşe göre, ikinci bir hesap oluşturdunuz, bu aynı zamanda konunuz içinde yorum yapma ve bir yanıtı kabul etme becerinize de engel olacaktır. Görmek Hesaplarımı birleştir hesaplarınızı birleştirmek için sorunu çözecek
fixer1234

Yardımınız için teşekkürler ve başlığa düzenleme eklendi. Garip bir şekilde, iki hesap da aynı emailadd altında yaratıldı;
JasonD

Yanıtlar:


2

İstediğinizi yapacak basit bir bash betiği (sanırım): 1) tüm MOV dosyalarını tekrarlı olarak bulur ve dönüştürür, 2) .mov dosya uzantısını .mp4 dosya uzantısıyla değiştirir.

#!/bin/bash
while read mov; do
  mp4=$(echo "$mov"|sed -e 's|\.mov$|.mp4|i')
  if [ "$mov" == "$mp4" ]; then
    echo "Failed to generate unique MP4 filename for file $mov"
    exit 1
  fi
  echo ffmpeg -i "$mov" -c:v libx264 -f mp4 "$mp4"
done < <(find . -type f -iname '*.mov')

Yazıldığı gibi, bu aslında dönüşümü yapmaz, sadece çalışacak olan ffmpeg komutunu tekrarlar İstediğini yapacağına emin olduktan sonra, fhompeg komutunun önündeki "echo" yu kaldır


OS X'te, sed komutunu aşağıdaki komutla çalışmasını sağlamak için yerine koymanız gerektiğini unutmayın:
Josep Alsina

0

Bu yardımcı olur mu?

for i in `find . -name "*.mov" -print0| xargs -0`; do echo ffmpeg -i $i -c:v libx264 -f mp4 ${i%.mov}.mp4; done

Oluşturulan ffmpeg komutundan memnunsanız ekoyu kaldırın.

bu, bir veya daha fazla boşluk içeren dosya adlarını dikkate alır (-print0 ve xargs -0 aracılığıyla)


1
"Bu yardımcı olur mu?" Test etmediğiniz bir cevabı mı gönderiyorsunuz?
DavidPostill

Gerçekten de, 'file find' ve 'mov yerine mp4 ile değiştir'i test ettikten sonra yorum yapıldı ancak ffmpeg kullanmadığım için ffmpeg sözdizimi konusunda emin değildim. ayrıca, OP daha iyi bir bulma komutuna sahipti (ihmal ettiğim -type f ve -iname komutlarını kullanarak).
nagu
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.