Pergunta

Eu estou tentando criar um script Python que:

  1. Olhe para a pasta "/ input"
  2. Para cada vídeo nessa pasta, execute um comando mencoder (para transcodificar-los para algo jogável no meu telefone)
  3. Uma vez mencoder terminou sua corrida, exclua o vídeo original.

Isso não parece muito difícil, mas eu chupar a python:)

Algumas ideias sobre o que o script deve ser semelhante?

Bônus pergunta: Devo usar

os.system

ou

subprocess.call

?

Subprocess.call parece permitir um script mais legível, desde que eu posso escrever o comando como este:

cmdLine = [ 'mencoder', sourceVideo, '-Ovc', 'cópia de', '-Oac', 'cópia de', '-Ss', '00: 02: 54' , '-endpos', '00: 00: 54' , '-O', destinationVideo]

EDIT: Ok, que as obras:

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

Eu removi o comando mencoder, para maior clareza e porque eu ainda estou trabalhando nisso.

Obrigado a todos por sua entrada.

Foi útil?

Solução

Para encontrar todos os nomes de arquivos usar os.listdir().

Então você loop sobre os nomes dos arquivos. Como assim:

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

Se você preferir subprocesso, o uso subprocesso. : -)

Outras dicas

Use os.walk para iterate de forma recursiva sobre o conteúdo diretório:

import os

root_dir = '.'

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

Não há diferença real entre os.system e subprocess.call aqui - a menos que você tem que lidar com arquivos de nome estranho (nomes de arquivos incluindo espaços, aspas e assim por diante). Se este for o caso, subprocess.call é definitivamente melhor, porque você não precisa fazer qualquer shell de citar em nomes de arquivos. os.system é melhor quando você precisa aceitar qualquer comando shell válido, por exemplo, recebeu do usuário no arquivo de configuração.

Python pode ser um exagero para isso.

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

AVI para MPG (escolher suas extensões):

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 você pode usar a função os.path.walk, o que faz mais trabalho para você do que apenas os.walk:

Um exemplo estúpido:

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)

Eu tive um problema semelhante, com um monte de ajuda da web e este post que fiz uma pequena aplicação, o meu objectivo é VCD e SVCD e eu não exclua a fonte, mas eu acho que vai ser bastante fácil de se adaptar às suas próprias necessidades.

Pode converter um vídeo e cortá-la ou pode converter todos os vídeos em uma pasta, renomeá-los e colocá-los em uma subpasta / VCD

Eu também adicionar uma interface pequena, esperança alguém encontrá-lo! Útil

Eu coloquei o código e arquivo aqui btw: http://tequilaphp.wordpress.com/2010/08/27/learning-python-making-a-svcd-gui/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top