我试图建立一个Python脚本,将:

  1. 看到文件夹"/input"
  2. 每个视频文件夹中,运行mencoder命令(代码转换他们的东西可以在我的电话)
  3. 一旦mencoder已经完成了他的运行,删除原来的视频。

这似乎并不太难,但我吸python:)

任何想法什么脚本应该看起来像什么?

奖金的问题:我应该使用

操作系统。系统

子流程.呼叫

?

子流程.呼叫似乎允许对一个更加可读剧本,因为我可以写下命令:

命令行=['mencoder', sourceVideo, '-孤儿和易受感染儿童', "复制", '-华侨', "复制", '-ss, '00:02:54', '-endpos', '00:00:54', '-o', destinationVideo]

编辑:Ok,工作:

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

我已经删除了mencoder命令,为了清晰起见并且因为我仍在努力。

感谢大家对你的输入。

有帮助吗?

解决方案

找到所有名称的使用 os.listdir().

然后你回路过的文件名。像这样:

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

如果你更喜欢子流程,使用子流程.:-)

其他提示

使用 操作系统。走路 迭代过递归的目录内容:

import os

root_dir = '.'

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

没有真正的差异之间的操作系统。系统和子进程的.呼叫这里-除非你要处理的奇怪的命名的文件(文件,包括空间,引号,等等)。如果是这种情况下,子流程.呼叫绝对是更好的,因为你不需要做任何壳引用文件的名称。操作系统。系统是好的,当你需要接受任何有效的命令,例如从收到的用户配置文件。

蟒蛇可能被矫枉过正,这一点。

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

AVIMPG (挑选你的扩展):

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

或者你可以使用的操作系统。路径。行走功能,其做更多的工作对你不仅仅是操作系统。走:

一个愚蠢的例子:

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)

我有一个类似的问题,有很大的帮助,从网上和此后我做了一个小的应用程序,我的目标是VCD和功能全面的,我不要删除的来源,但我认为它将会很容易地适应自己的需要。

它可以转换1个视频切或可以将所有的视频文件夹中,重新命名,并把它们放在一个子文件夹/VCD

我还添加了一个小型接口,希望其他人发现它很有用!

我把代码和文件,在这里顺便说一句: http://tequilaphp.wordpress.com/2010/08/27/learning-python-making-a-svcd-gui/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top