Question

Je suis en train de créer un script Python qui:

  1. Regardez dans le dossier "/ entrée"
  2. Pour chaque vidéo dans ce dossier, exécutez une commande mencoder (pour les transcoder à quelque chose jouable sur mon téléphone)
  3. Une fois mencoder a terminé sa course, supprimer la vidéo originale.

Cela ne semble pas trop difficile, mais je sucent python:)

Toutes les idées sur ce que devrait ressembler le script?

Question bonus: Dois-je utiliser

  

os.system

ou

  

subprocess.call

Subprocess.call semble permettre un script plus lisible, puisque je peux écrire la commande comme ceci:

  

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

EDIT: Ok, qui fonctionne:

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

Je l'ai enlevé la commande mencoder, pour plus de clarté et parce que je travaille encore.

Merci à tous pour vos commentaires.

Était-ce utile?

La solution

Pour tous les noms de fichiers utilisent os.listdir().

Ensuite, on boucle sur les noms de fichiers. Comme ceci:

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

Si vous préférez le sous-processus, utilisez le sous-processus. : -)

Autres conseils

Utilisez os.walk pour itérer récursivement sur le contenu du répertoire:

import os

root_dir = '.'

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

Pas de différence réelle entre os.system et subprocess.call ici - à moins que vous avez à traiter avec des fichiers étrangement nommées (noms de fichiers, y compris des espaces, des guillemets et ainsi de suite). Si tel est le cas, subprocess.call est certainement mieux, parce que vous n'avez pas besoin de faire une coquille citant les noms de fichiers. os.system est mieux quand vous devez accepter toute commande shell valide, par exemple reçus de l'utilisateur dans le fichier de configuration.

Python pourrait être surpuissant pour cela.

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

AVI à MPG (choisir vos extensions):

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

Ou vous pouvez utiliser la fonction os.path.walk, qui fait plus de travail pour vous que juste os.walk:

Un exemple stupide:

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)

J'ai eu un problème similaire, avec beaucoup d'aide sur le web et ce post, je fait une petite application, mon objectif est VCD et SVCD et je ne supprime pas la source, mais je pense qu'il sera assez facile d'adapter à vos propres besoins.

Il peut convertir 1 vidéo et le couper ou peut convertir toutes les vidéos dans un dossier, les renommer et les mettre dans un sous-dossier / VCD

J'ajoute également une petite interface, espère que quelqu'un d'autre trouver utile!

Je mets le code et le fichier ici BTW: http://tequilaphp.wordpress.com/2010/08/27/learning-python-making-a-svcd-gui/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top