web-dev-qa-db-ja.com

ffmpeg in pythonスクリプト

pythonスクリプトで次のコマンドを実行したいのですが、フォルダ内の複数のビデオをループさせたいと思います。これは実行したいコマンドです。

ffmpeg -i mymovie.avi -f image2 -vf fps=fps=1 output%d.png

私はこのようなものに合わせたいです:

import ffmpy
import os

path = './Videos/MyVideos/'
for filename in os.listdir(path):
    name = filename.replace('.avi','')
    os.mkdir(os.path.join(path,name))
    *ffmpeg command here*

私はffmpyと呼ばれるffmpegのラッパーを見つけましたが、これは解決策でしょうか?

9
jawwe

FFMPYの概要から、ffmpy.FFmpegを使用してこれを行うことができます。これにより、-fを含むすべてのFFMPEGコマンドラインオプションが可能になります -ドキュメントのリンクをクリックします。

os.systemを使用してFFMPEGコマンドを実行できます。とにかくOSをインポートして、ファイルを反復処理する必要があります。

ただし、ディレクトリ内のすべてのファイルを反復処理する必要があります。これはもっと難しいビットですが、forループを使えば非常に簡単です。

for filename in os.listdir(path):
    if (filename.endswith(".mp4")): #or .avi, .mpeg, whatever.
        os.system("ffmpeg -i {0} -f image2 -vf fps=fps=1 output%d.png".format(filename))
    else:
        continue

上記のコードは、pathのディレクトリを反復処理し、mymovie.aviの代わりにファイル名(ビデオファイルの場合)を使用して、コマンドプロンプトを使用して指定のFFMPEGコマンドを実行します。

14
ocelot

https://github.com/Tee0125/pydemux でpydemuxを試してください。 PydemuxモジュールはPillow Image形式のようにビデオフレームを抽出できます

from PyDemux import Video

v = Video.open('video.mov')

i = 0
while True:
    im = v.get_frame()

    if im is None:
        break

    im.save('output%d.png'%i)
    i = i + 1
3
Tee Jung