Man*_*anu 53 python foreach mencoder
我正在尝试创建一个Python脚本:
这似乎并不太难,但我吮吸python :)
关于脚本应该是什么样子的任何想法?
奖金问题:我应该使用
使用os.system
要么
subprocess.call
?
Subprocess.call似乎允许更易读的脚本,因为我可以像这样编写命令:
cmdLine = ['mencoder',sourceVideo,' - ov','copy',' - oac','copy',' - s','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')
Run Code Online (Sandbox Code Playgroud)
为清楚起见,我已经删除了mencoder命令,因为我还在努力.
感谢大家的投入.
Len*_*bro 107
要查找所有文件名使用os.listdir().
然后循环文件名.像这样:
import os
for filename in os.listdir('dirname'):
callthecommandhere(blablahbla, filename, foo)
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢子进程,请使用子进程.:-)
Mac*_*cki 26
使用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)
Run Code Online (Sandbox Code Playgroud)
os.system和subprocess.call之间没有真正的区别 - 除非您必须处理奇怪命名的文件(文件名包括空格,引号等).如果是这种情况,subprocess.call肯定更好,因为您不需要对文件名进行任何shell引用.当您需要接受任何有效的shell命令时,例如在配置文件中从用户接收的命令,os.system会更好.
mod*_*diX 14
Python3中新的推荐方式是使用pathlib:
from pathlib import Path
mydir = Path("path/to/my/dir")
for file in mydir.glob('*.mp4'):
print(file.name)
# do your stuff
Run Code Online (Sandbox Code Playgroud)
您可以使用任何过滤器,甚至*.mp4是像**/*.mp4. 如果您想使用多个扩展名,您可以简单地使用*or **/*(递归)迭代所有文件,并使用以下命令检查每个文件的扩展名file.name.endswith(('.mp4', '.webp', '.avi', '.wmv', '.mov'))
Kur*_*urt 10
Python可能有点矫枉过正.
for file in *; do mencoder -some options $file; rm -f $file ; done
Run Code Online (Sandbox Code Playgroud)