[Çözüldü] os.system("ffmpeg_komutu")

Başlatan monthy_python, 26 Mart 2013 - 05:55:27

« önceki - sonraki »

0 Üyeler ve 3 Ziyaretçi konuyu incelemekte.

monthy_python

ffmpeg kullanarak "caf" uzantılı 5+1 ses dosyalarını stereo / aiff'e çeviriyorum. komut şu:
ffmpeg -i kaynak.caf -ar 48000 -ac 2 hedef.aiff

bunu otomasyona almak istedim, yapamadım. mesela home dizinindeki caf'ları dönüştürüp bir yere kopyalasın gibi.

import os

for yol, dizin, dosya in os.walk("/Users/py"):
for i in dosya:
if i.endswith(".caf"):
yolla = os.path.join(yol, i)
shutil.move(yolla, "/Users/py/Desktop/teburaya")


burada shutil'le yollamadan önce aiff'e dönüştürsün, dönüştürdüğü yeni dosyayı yollasın istiyorum

os.system("ffmpeg -i %s falan_buraları_yapamadım_işte")

hitokiri

Şimdi neyi yapamadın anlamadım ,
"os.system()" içine yazarken mi hata verdi ?
ffmpeg girdi dosyasını mı okumadı?
if os.system("komut")  != 0:
    print "hata dosya %s dosyası için dönüştürme yapılamadı .. " %(dosya)

gibi bir denetleme ekle istersen , görelim ne olmuş ne bitmiş yok python ile olmasada olur diyorsan kabuktada yapılabilir söylediğin işlem.. ???

monthy_python

#2
kabuk bilmiyorum, yani python ne kadar biliyorum o da tartışılır tabi :)

hani benim yazdığım home dizinini tarayıp, "caf" uzantılı dosyaları bulup bir yere taşıyor ya,
taşımadan önce bulduğu tüm caf'ları aiff'e çevirsin, bu çevirdiği aiffleri taşısın istiyorum (ffmpeg kullanarak.)
bunu o kodun içine ekleyemedim.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 26 Mart 2013 - 06:33:43

örneğin aşağıdaki şekilde "caflar" dizininin içini tümden "teburaya" dizinine taşıyor.
ben istiyorum ki: "caflar" dizini içindeki *.caf uzantılı dosyaları aiff'e çevirsin, çevirdiği aiff'leri "teburaya" dizini içine taşısın. *.caf dosyaları dursun. galiba çok salakça bir yerde hata yapıyorum, uyumak lazım heralde :)

import os, shutil

nereden = "/Users/py/Desktop/caflar"
nereye = "/Users/py/Desktop/teburaya"

for yol, dizin, dosya in os.walk(nereden):
for i in dosya:
if i.endswith(".caf"):
os.system("ffmpeg -i %s.caf %s.aiff"%(i, i))
yolla = os.path.join(yol, i)
shutil.move(yolla, nereye)

hitokiri

heim doğru bir yerlere gitmişsin aslında;
şimdi şöyle yapalım o zaman,
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# vim: ts=4:sw=4

import os
dizin = os.environ["PWD"]


for dosya in os.listdir(dizin):
    if  ".mp3" in dosya :
        print dosya
        dosya_ismi = os.path.basename(dosya)
        print dosya_ismi
        os.system(""" ffmpeg -i "%s" -acodec mp2 -ac 2      "./Masaüstü/%s.mp2"  """   % (dosya,dosya_ismi ) )
                           

# shutil.move(yolla, "/Users/py/Desktop/teburaya")



Şimdi bir denemek için için elime yatkın olanını yazdım sen bir deneyip kendi komutuna eklersin :)


işte te oraya ffmpeg gönderiyor işte ya XD

monthy_python

#4
#!/usr/bin/env python
# encoding: utf-8

import os
dizin = os.environ["PWD"]

for dosya in os.listdir("/Users/py/Desktop/caflar"):
if ".caf" in dosya:
print dosya
dosya_ismi = os.path.basename(dosya)
print dosya_ismi
os.system(""" ffmpeg -i "%s" -acodec pcm -ac 2 "/Users/py/Desktop/teburaya/%s.aiff"  """% (dosya,dosya_ismi))


diyor ki yok böyle bi dosya :)

Bank.caf
Bank.caf
ffmpeg version 1.1.2 Copyright (c) 2000-2013 the FFmpeg developers
  built on Feb 23 2013 01:48:30 with llvm-gcc 4.2.1 (LLVM build 2336.11.00)
  configuration: --disable-yasm
  libavutil      52. 13.100 / 52. 13.100
  libavcodec     54. 86.100 / 54. 86.100
  libavformat    54. 59.106 / 54. 59.106
  libavdevice    54.  3.102 / 54.  3.102
  libavfilter     3. 32.100 /  3. 32.100
  libswscale      2.  1.103 /  2.  1.103
  libswresample   0. 17.102 /  0. 17.102
Bank.caf: No such file or directory


şimdi "caflar" klasöründeki caf uzantılı dosyaları nasıl aiff'e çevireceğimi söylersen gerisi tamam da... şunu yapamıyorum:
os.system("ffmpeg -i '%s' -acodec pcm -ac 2 '/Users/py/Desktop/teburaya/%s.aiff' ")
bu yüzdeler(%) falan, orada tıkandım.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 26 Mart 2013 - 07:14:36

soruyu sadeleştiriyorum, karıştı biraz.

komut şu: ffmpeg -i in.caf out.aiff
dizin şu: ~/desktop/falanca

"falanca" dizinindeki tüm "caf" uzantılı dosyaları nasıl "aiff" yaparım?

hitokiri

pwd bulunulan dizini veriyor aslında burda dosya ismide dosya ile aynı yani
dosyayı pwd yerine dizini yaz veya betiği o dizin içinde çalıştır masaüstü yerine de kendi dizininin ismini yaz dosya ismi dosya olabilir, %s karışık geldiyse,  tırnakları ayırabilirsin;
Alıntı Yapos.system(""" ffmpeg -i '"""+dosya+"""' -acodec pcm -ac 2 '/Users/py/Desktop/teburaya/"""+dosya +""".aiff'  """ )

monthy_python

ben soruyu doğru soramıyorum sanırım, afedersin.

klasörde 10 tane dosya var diyelim, zaten tek tek yapsam kabuktan veririm komutu. bunu döngüye sokamadım ben. yani klasördeki 10 dosyayı da çevirmek istiyorum.
gerçi tek tek elle yapsaydım daha kolay olacaktı :)

alierkanimrek

Bash'ın "for do" döngüsü ile tek satırda yapılabilir bu dediğiniz, biraz araştırma yapın isterseniz. Ayrıca Python os.system() işlevi yerine subprocess kullanılması öneriliyor artık.

heartsmagic

@alierkanimrek gibi ben de kabuk ile daha kolay yapılabileceğini düşünüyorum. En kaba haliyle şu şekilde bile yapılabilir sanırım:
find -name '*.caff' -exec ffmpeg -i {} -ar 48000 -ac 2 {}.aiff \;

Gerçi bu şekilde dosyalar falanca.caff.aiff isimli hale gelecektir :)
Onun için de şu yapılabilir:

find . -name "*.caff.aiff" -exec rename 's/\.caff.aiff$/\.aiff/i' {} \;

Dediğim gibi en kaba hali bu, daha temiz güzel şeyler de kullanılabilir.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

monthy_python

Fazla takılınca olmuyor herhalde, yaptım şimdi :)
Aşağıdaki kod "nereden"deki *.caf dosyalarını "nereye"ye *.aiff olarak çevirip gönderdi:

#!/usr/bin/env python
# encoding: utf-8

import os, shutil

nereden = "/Users/py/Desktop/caflar"
nereye = "/Users/py/Desktop/teburaya"

caflar = os.listdir(nereden)

for i in caflar:
if i.endswith(".caf"):
ad = os.path.splitext(i)[0]
cevir = os.path.join(nereden, ad)
os.system("ffmpeg -i %s.caf -acodec pcm_s24be -ar 48000 -ac 2 %s.aiff"%(cevir, cevir))

aifler = os.listdir(nereden)

for i in aifler:
if i.endswith(".aiff"):
yolla = os.path.join(nereden, i)
shutil.move(yolla, nereye)


@heartsmagic python'u çok az, kabuğu daha da az bildiğimden...

@alierkanimrek şunun:
os.system("ffmpeg -i %s.caf -acodec pcm_s24be -ar 48000 -ac 2 %s.aiff"%(cevir, cevir))
subprocess ile nasıl yapılabileceği hakkında hiç bir fikrim yok.