Python を使用してフォルダー内のすべてのファイルに対してコマンドを実行する

StackOverflow https://stackoverflow.com/questions/1120707

  •  13-09-2019
  •  | 
  •  

質問

次のような Python スクリプトを作成しようとしています。

  1. 「/input」フォルダを調べてください
  2. そのフォルダー内の各ビデオに対して、mencoder コマンドを実行します (携帯電話で再生可能なものにトランスコードするため)。
  3. mencoder が実行を終了したら、元のビデオを削除します。

それほど難しくないようですが、私はPythonが苦手です:)

スクリプトがどうあるべきかについて何かアイデアはありますか?

おまけの質問:使ったほうがいいですか

OSシステム

または

サブプロセスの呼び出し

?

Subprocess.call を使用すると、次のようにコマンドを記述できるため、より読みやすいスクリプトが可能になるようです。

cmdline = ['mencoder'、sourcevideo、 '-ovc'、 'copy'、 '-oac'、 'copy'、 '-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 コマンドを削除しました。

ご意見いただきありがとうございました。

役に立ちましたか?

解決

すべてのファイル名を検索するには、次を使用します os.listdir().

次に、ファイル名をループします。そのようです:

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

サブプロセスを使用したい場合は、サブプロセスを使用してください。:-)

他のヒント

使用 os.ウォーク ディレクトリの内容を再帰的に繰り返すには:

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

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

または、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)

私も同様の問題を抱えていました。Web とこの投稿から多くの助けを借りて、小さなアプリケーションを作成しました。ターゲットは VCD と SVCD で、ソースは削除しませんでしたが、独自のアプリケーションに適応させるのはかなり簡単だと思いますニーズ。

1 つのビデオを変換して切り取ることも、フォルダー内のすべてのビデオを変換して名前を変更し、サブフォルダー /VCD に入れることもできます。

小さなインターフェイスも追加しました。他の人が役立つことを願っています。

ちなみにコードとファイルをここに置きます: http://tequilaphp.wordpress.com/2010/08/27/learning-python-making-a-svcd-gui/

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top