web-dev-qa-db-fra.com

ffmpeg en script python

Je souhaite exécuter la commande suivante dans un script python. Je souhaite également le faire passer en boucle sur plusieurs vidéos d'un dossier. C'est la commande que je veux exécuter.

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

Je veux l'adapter à quelque chose comme ça:

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*

J'ai trouvé un emballage pour ffmpeg appelé ffmpy, est-ce que cela pourrait être une solution?

3
jawwe

À partir d'un bref aperçu de FFMPY, vous pouvez le faire en utilisant ffmpy.FFmpeg, car cela permet à toutes les options de ligne de commande FFMPEG, y compris -f. - Cliquez sur le lien pour obtenir de la documentation.

Vous pouvez faire la commande FFMPEG avec os.system. Vous aurez quand même besoin d'importer le système d'exploitation pour parcourir les fichiers.

Vous auriez cependant besoin de parcourir tous les fichiers d’un répertoire. Ce serait la partie la plus difficile, c’est assez facile avec une boucle 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

Le code ci-dessus parcourt le répertoire à l'adresse path et utilise la commande Invite pour exécuter votre commande FFMPEG donnée, en utilisant le nom de fichier (s'il s'agit d'un fichier vidéo) au lieu de mymovie.avi.

7
ocelot

Essayez pydemux dans https://github.com/Tee0125/pydemux . Le module Pydemux peut extraire des images vidéo au format 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
0
Tee Jung