私はPythonスクリプトを作成しようとしています:
それほど難しくはないようですが、python :)
スクリプトがどのように見えるかについてのアイデアはありますか?
ボーナス質問:使用すべきか
os.system
または
subprocess.call
?
Subprocess.callは、次のようにコマンドを書くことができるため、より読みやすいスクリプトを許可するようです:
cmdLine = ['mencoder'、sourceVideo、 '-ovc'、 'copy'、 '-oac'、 'copy'、 '-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)
サブプロセスが必要な場合は、サブプロセスを使用します。 :-)
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の方が間違いなく優れています。 os.systemは、有効なシェルコマンドを受け入れる必要がある場合に適しています。構成ファイルでユーザーから受け取りました。
Pythonはこれには行き過ぎかもしれません。
for file in *; do mencoder -some options $file; rm -f $file ; done
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
私は同様の問題を抱えており、ウェブからの多くの助けを借りて、この投稿では小さなアプリケーションを作成しました。私のターゲットはVCDとSVCDであり、ソースを削除しませんが、あなた自身に適応するのはかなり簡単だと思いますニーズ。
1つのビデオを変換してカットするか、フォルダ内のすべてのビデオを変換し、名前を変更してサブフォルダ/ VCDに入れることができます
また、小さなインターフェイスを追加します。他の誰かがそれを役に立つと思うことを願っています!
ここにコードとファイルを入れます: http://tequilaphp.wordpress.com/2010/08/27/learning-python-making-a-svcd-gui/
または、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 __== '__main__':
import os.path
directory = './'
arguments = '[args go here]'
os.path.walk(directory,walk_func,arguments)