J'essaie de créer un script Python qui:
Cela ne semble pas trop difficile, mais je crains à python :)
Des idées sur ce à quoi le script devrait ressembler?
Question bonus: devrais-je utiliser
os.system
ou
subprocess.call
?
Subprocess.call semble permettre un script plus lisible, car je peux écrire la commande comme ceci:
cmdLine = ['mencoder', sourceVideo, '-ovc', 'copy', '-oac', 'copy', '-ss', '00: 02: 54 ',' -endpos ', '00: 00: 54 ',' -o ', destinationVideo]
EDIT: Ok, ça marche:
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')
J'ai supprimé la commande mencoder, pour plus de clarté et parce que je travaille toujours dessus.
Merci à tous pour votre contribution.
Pour trouver tous les noms de fichiers, utilisez os.listdir()
.
Ensuite, vous bouclez sur les noms de fichiers. Ainsi:
import os
for filename in os.listdir('dirname'):
callthecommandhere(blablahbla, filename, foo)
Si vous préférez le sous-processus, utilisez le sous-processus. :-)
Utilisez os.walk pour parcourir de manière récursive 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)
Il n'y a pas de réelle différence entre os.system et subprocess.call ici - à moins que vous n'ayez à gérer des fichiers aux noms étranges (noms de fichiers comprenant des espaces, des guillemets, etc.). Si tel est le cas, subprocess.call est définitivement meilleur, car vous n'avez pas besoin de faire de citations Shell sur les noms de fichiers. os.system est meilleur lorsque vous devez accepter une commande Shell valide, par exemple reçu de l'utilisateur dans le fichier de configuration.
Python pourrait être exagéré pour cela.
for file in *; do mencoder -some options $file; rm -f $file ; done
AVI
à MPG
(choisissez 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
J'ai eu un problème similaire, avec beaucoup d'aide du Web et ce post j'ai fait une petite application, ma cible est VCD et SVCD et je ne supprime pas la source mais je pense qu'il sera assez facile de l'adapter à la vôtre Besoins.
Il peut convertir 1 vidéo et la couper ou peut convertir toutes les vidéos dans un dossier, les renommer et les placer dans un sous-dossier/VCD
J'ajoute également une petite interface, j'espère que quelqu'un d'autre la trouvera utile!
Je mets le code et le fichier ici btw: http://tequilaphp.wordpress.com/2010/08/27/learning-python-making-a-svcd-gui/
Ou vous pouvez utiliser la fonction os.path.walk, qui fait plus de travail pour vous que simplement 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 __== '__main__':
import os.path
directory = './'
arguments = '[args go here]'
os.path.walk(directory,walk_func,arguments)