Pregunta

Estoy intentando crear un script en Python que haría:

  1. Mira en la carpeta "/ entrada"
  2. Para cada vídeo de dicha carpeta, ejecute un comando mencoder (transcodificarlos a algo reproducir en mi teléfono)
  3. Una vez mencoder ha terminado su carrera, elimine el vídeo original.

Eso no parece demasiado duro, pero soy muy malo en Python:)

¿Alguna idea sobre lo que el guión debe ser similar?

Bono pregunta: ¿Debo usar

  

os.system

o

  

subprocess.call

Subprocess.call parece permitir una escritura más legible, ya que puedo escribir el comando como el siguiente:

  

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

EDIT: Ok, que funciona:

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

He quitado el comando mencoder, para mayor claridad y porque todavía estoy trabajando en ello.

Gracias a todos por su entrada.

¿Fue útil?

Solución

Para encontrar todos los nombres de archivo utilizan os.listdir().

A continuación, un bucle sobre los nombres de archivo. De esta manera:

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

Si prefiere subproceso, utilice subproceso. : -)

Otros consejos

os.walk para recorrer de forma recursiva sobre el contenido del directorio:

import os

root_dir = '.'

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

No hay diferencia real entre os.system y subprocess.call aquí - a menos que usted tiene que tratar con archivos de nombre extraño (nombres de archivo, incluidos los espacios, comillas, etc.). Si este es el caso, subprocess.call es definitivamente mejor, ya que no es necesario hacer ninguna concha cotización en los nombres de archivo. os.system es mejor cuando se necesita para aceptar cualquier comando válido cáscara, por ejemplo, recibido de usuario en el archivo de configuración.

Python podría ser excesiva para esto.

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

AVI a MPG (escoger sus extensiones):

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

O puede utilizar la función os.path.walk, lo que hace más trabajo para usted que sólo os.walk:

Un ejemplo estúpida:

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)

He tenido un problema similar, con un montón de ayuda de la web y este post que hice una pequeña aplicación, mi objetivo es VCD y SVCD y no eliminar la fuente, pero calculo que será bastante fácil de adaptar a sus propias necesidades.

Puede convertir vídeo 1 y cortarlo o puede convertir todos los vídeos en una carpeta, cambiar el nombre de ellos y ponerlos en una subcarpeta / VCD

También añado una pequeña interfaz, espero que otra persona ha resultado útil!

pongo el código y archivo en cierto aquí: http://tequilaphp.wordpress.com/2010/08/27/learning-python-making-a-svcd-gui/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top