Frage

Ich versuche, einen Python-Skript zu erstellen, das würde:

  1. Schauen Sie in den Ordner "/ Eingabe"
  2. Für jedes Video in diesem Ordner ein mencoder Befehl ausführen (sie etwas spielbar auf meinem Handy umcodieren)
  3. Sobald mencoder seinen Lauf beendet hat, das Original-Video löschen.

Das scheint nicht zu hart, aber ich sauge an Python:)

Alle Ideen, was das Skript aussehen sollte?

Bonus Frage: Soll ich

  

os.system

oder

  

subprocess.call

Subprocess.call scheint für ein lesbares Script zu ermöglichen, da ich den Befehl wie folgt schreiben kann:

  

cmdLine = [ 'mencoder',              sourceVideo,              '-Ovc',              'Kopieren',              '-Oac',              'Kopieren',              ‚Ss‘,              '00: 02: 54' ,              '-Endpos',               '00: 00: 54' ,              '-O',              destinationVideo]

EDIT: Ok, das funktioniert:

import os, subprocess

bitrate = '100'
mencoder = 'C:\\Program Files\\_utilitaires\\MPlayer-1.0rc2\\mencoder.exe'
inputdir = 'C:\\Documents and Settings\\Administrator\\Desktop\\input'
outputdir = 'C:\\Documents and Settings\\Administrator\\Desktop\\output'

for fichier in os.listdir(inputdir):
    print 'fichier :' + fichier
    sourceVideo = inputdir + '\\' + fichier
    destinationVideo = outputdir + '\\' + fichier[:-4] + ".mp4"

    commande = [mencoder,
               '-of',
               'lavf',
               [...]
               '-mc',
               '0',

               sourceVideo,
               '-o',
               destinationVideo]

    subprocess.call(commande)

os.remove(sourceVideo)
raw_input('Press Enter to exit')

Ich habe den mencoder Befehl, der Klarheit halber entfernt und weil ich immer noch daran zu arbeiten.

Vielen Dank an alle für Ihre Eingabe.

War es hilfreich?

Lösung

Um alle Dateinamen verwenden os.listdir() zu finden.

Dann sind Sie Schleife über die Dateinamen. Wie so:

import os
for filename in os.listdir('dirname'):
     callthecommandhere(blablahbla, filename, foo)

Wenn Sie subprocess bevorzugen, verwenden subprocess. : -)

Andere Tipps

Verwenden Sie os.walk rekursiv über den Inhalt von iterieren:

import os

root_dir = '.'

for directory, subdirectories, files in os.walk(root_dir):
    for file in files:
        print os.path.join(directory, file)

Kein wirklicher Unterschied zwischen os.system und subprocess.call hier - es sei denn, Sie mit seltsam benannten Dateien (Dateinamen mit Leerzeichen, Anführungszeichen usw.) zu tun haben. Wenn dies der Fall ist, subprocess.call ist auf jeden Fall besser, weil Sie nicht tun müssen, um jeden Shell-Angabe auf Dateinamen. os.system ist besser, wenn Sie einen gültigen Shell-Befehl akzeptieren müssen, z.B. erhielt vom Benutzer in der Konfigurationsdatei.

Python könnte für diese zu viel des Guten.

for file in *; do mencoder -some options $file; rm -f $file ; done

AVI zu MPG (wählen Sie Ihre Erweiterungen):

files = os.listdir('/input')
for sourceVideo in files:
    if sourceVideo[-4:] != ".avi"
        continue
    destinationVideo = sourceVideo[:-4] + ".mpg"
    cmdLine = ['mencoder', sourceVideo, '-ovc', 'copy', '-oac', 'copy', '-ss',
        '00:02:54', '-endpos', '00:00:54', '-o', destinationVideo]
    output1 = Popen(cmdLine, stdout=PIPE).communicate()[0]
    print output1
    output2 = Popen(['del', sourceVideo], stdout=PIPE).communicate()[0]
    print output2

Oder Sie könnten die os.path.walk Funktion verwenden, die für Sie mehr Arbeit macht als nur os.walk:

Ein dummes Beispiel:

def walk_func(blah_args, dirname,names):
    print ' '.join(('In ',dirname,', called with ',blah_args))
    for name in names:
        print 'Walked on ' + name

if __name__ == '__main__':
    import os.path
    directory = './'
    arguments = '[args go here]'
    os.path.walk(directory,walk_func,arguments)

Ich hatte ein ähnliches Problem, mit viel Hilfe von der Bahn und diesem Beitrag habe ich eine kleine Anwendung gemacht, mein Ziel ist VCD und SVCD und ich lösche die Quelle nicht, aber ich denke, wird es ziemlich einfach sein, sich anzupassen Ihre eigenen Bedürfnisse.

Es kann ein Video konvertieren und schneiden oder alle Videos in einem Ordner umwandeln kann, sie umbenennen und sie in einem Unterordner / VCD

Ich füge auch eine kleine Schnittstelle, hoffen, dass jemand anderes es nützlich finden!

habe ich den Code und die Datei in hier btw: http://tequilaphp.wordpress.com/2010/08/27/learning-python-making-a-svcd-gui/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top