Pour tous les curieux, voici ma solution. Il utilisait OpenCV
. Je n'étais pas au courant de cela au moment où j'ai posé la question, mais OpenCV
a certaines fonctionnalités qui utilisent ffmpeg
dans les coulisses. Et puisque mon programme utilisait déjà OpenCV
, que je mentionnais seulement au passage dans la question (comme je pensais que ce n'était pas important), il n'était pas très difficile d'utiliser les fonctionnalités intégrées à OpenCV
pour faire ce que je voulais. Voici le code:
cap = cv2.VideoCapture("video.mpg")
count = 0
frame_q = queue.Queue()
while cap.grab():
success, frame = cap.read()
if count % 5 == 0 and success:
frame_alpha = np.insert(frame, 3, 255, axis=2)
frame_q.put(frame_alpha)
count += 1
Comme vous pouvez le voir, je suis en train de mettre tous les cinq dans un cadre Queue
de cadres. Le noyau de ce sont ces trois lignes:
cap = cv2.VideoCapture("video.mpg")
while cap.grab():
success, frame = cap.read()
La première ligne ouvre la capture, les contrôles de la clause while s'il y a des plus cadres à l'aide cap.grab()
(retour True
s'il y a une trame suivante), puis je lis que encadrer dans un tableau numpy
en utilisant cap.read()
.success
est un booléen qui indique si l'opération a réussi. Plus tard, j'ajoute un canal alpha au frame
et le place dans le frame_q
.
Ensuite, un autre thread du programme get
s trame sur Queue
. De cette façon, je n'ai pas du tout à faire avec le système de fichiers - comme l'a dit Marcus, je les intègre directement dans le programme.
Note: pour cv2.VideoCapture()
travailler les opencv_ffmpeg.dll
besoins d'être dans le chemin système ou dans le répertoire racine de l'installation selon des Python
que vous utilisez. Vous devrez peut-être le renommer opencv_ffmpegXYZ.dll
où XYZ est le numéro de version OpenCV
moins les points décimaux. Donc pour moi, c'est opencv_ffmpeg330.dll
parce que j'ai la version 3.3.0
. Il peut également être appelé opencv_ffmpeg330_64.dll
sur un système x64.
L'emplacement de opencv_ffmpeg.dll
dépend de la façon dont vous avez installé OpenCV
, je voudrais simplement rechercher dans le répertoire OpenCV
pour opencv_ffmpeg
et voir où il se présente. Avant de le copier dans le répertoire Python
, assurez-vous de vérifier s'il existe déjà. Il pourrait être, en fonction de la façon dont vous avez installé OpenCV
.