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のラッパーを見つけましたが、これは解決策でしょうか?
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コマンドを実行します。
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