我正在尝试创建一个Python脚本:
这似乎不太难,但我吮吸python:)
关于脚本应该是什么样子的任何想法?
奖金问题:我应该使用
使用os.system
或
subprocess.call
Subprocess.call似乎允许更易读的脚本,因为我可以这样编写命令:
编辑:好的,有效:cmdLine = ['mencoder', sourceVideo, '-ovc', '复制', '-oac', '复制', '-ss', '00:02:54' , '-endpos', '00:00:54' , '-o', destinationVideo]
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命令,因为我还在努力。
感谢大家的意见。
答案 0 :(得分:98)
要查找所有文件名,请使用os.listdir()
。
然后循环遍历文件名。像这样:
import os
for filename in os.listdir('dirname'):
callthecommandhere(blablahbla, filename, foo)
如果您更喜欢子进程,请使用子进程。 : - )
答案 1 :(得分:25)
使用os.walk以递归方式遍历目录内容:
import os
root_dir = '.'
for directory, subdirectories, files in os.walk(root_dir):
for file in files:
print os.path.join(directory, file)
os.system和subprocess.call之间没有真正的区别 - 除非您必须处理奇怪命名的文件(文件名包括空格,引号等)。如果是这种情况,subprocess.call肯定更好,因为您不需要对文件名进行任何shell引用。当你需要接受任何有效的shell命令时,os.system会更好。在配置文件中从用户收到。
答案 2 :(得分:11)
Python对此可能过度。
for file in *; do mencoder -some options $file; rm -f $file ; done
答案 3 :(得分:3)
Python3 中新的推荐方式是使用 pathlib:
from pathlib import Path
mydir = Path("path/to/my/dir")
for file in mydir.glob('*.mp4'):
print(file.name)
# do your stuff
您可以使用任何过滤器来代替 *.mp4
,甚至是像 **/*.mp4
这样的递归过滤器。如果您想使用多个扩展名,您可以简单地使用 *
或 **/*
(递归)迭代所有文件并使用 file.name.endswith(('.mp4', '.webp', '.avi', '.wmv', '.mov'))
答案 4 :(得分:2)
AVI
至MPG
(选择您的扩展程序):
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
答案 5 :(得分:1)
或者你可以使用os.path.walk函数,它比os.walk更能为你工作:
一个愚蠢的例子:
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)
答案 6 :(得分:1)
我有一个类似的问题,在网上有很多帮助,这篇文章我做了一个小应用程序,我的目标是VCD和SVCD,我不删除源代码但我认为它很容易适应根据自己的需要。
它可以转换1个视频并剪切它或者可以转换文件夹中的所有视频,重命名它们并将它们放在子文件夹/ VCD中
我还添加了一个小界面,希望别人觉得它有用!
我把代码和文件放在这里btw:http://tequilaphp.wordpress.com/2010/08/27/learning-python-making-a-svcd-gui/