Domanda

Sto cercando di creare uno script Python che sarebbe:

  1. Cercare nella cartella "/ ingresso"
  2. Per ogni video in quella cartella, eseguire un comando mencoder (per convertirli in qualcosa di giocabile sul mio cellulare)
  3. Una volta mencoder ha terminato la sua corsa, eliminare il video originale.

Non mi sembra troppo difficile, ma faccio schifo a python:)

Tutte le idee su ciò che lo script dovrebbe essere simile?

Domanda bonus: Dovrei usare

  

os.system

o

  

subprocess.call

Subprocess.call sembra per consentire uno script più leggibile, dal momento che posso scrivere il comando come questo:

  

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

EDIT: Ok, che funziona:

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')

Ho rimosso il comando mencoder, per chiarezza e perché mi sto ancora lavorando su di esso.

Grazie a tutti per il vostro input.

È stato utile?

Soluzione

Per trovare tutti i nomi di file utilizzano os.listdir().

Poi si esegue un ciclo sopra i nomi dei file. In questo modo:

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

Se si preferisce sottoprocesso, utilizzare sottoprocesso. : -)

Altri suggerimenti

os.walk per scorrere in modo ricorsivo sul contenuto di directory:

import os

root_dir = '.'

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

Nessun vera differenza tra os.system e subprocess.call qui - se non si ha a che fare con i file stranamente nome (i nomi dei file inclusi gli spazi, le virgolette e così via). Se questo è il caso, subprocess.call è sicuramente meglio, perché non c'è bisogno di fare qualsiasi shell-on citando i nomi dei file. os.system è migliore quando si ha bisogno di accettare qualsiasi comando shell valida, ad esempio, ricevuta dall'utente nel file di configurazione.

Python potrebbe essere eccessivo per questo.

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

AVI a MPG (pick le estensioni):

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

In alternativa è possibile utilizzare la funzione di os.path.walk, che fa più lavoro per voi che solo os.walk:

Un esempio stupido:

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)

Ho avuto un problema simile, con un sacco di aiuto dal web e questo post ho fatto una piccola applicazione, il mio obiettivo è VCD e SVCD e non eliminare l'origine, ma mi sa che sarà abbastanza facile da adattare alle proprie esigenze.

E 'possibile convertire il video 1 e tagliarlo o può convertire tutti i video in una cartella, rinominarli e metterli in una sottocartella / VCD

Ho anche aggiungere una piccola interfaccia, spero che qualcun altro sia utile!

ho messo il codice e file in qui btw: http://tequilaphp.wordpress.com/2010/08/27/learning-python-making-a-svcd-gui/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top