2017-06-16 1 views
0

Ich habe ein 4D numpy Array von Film-Frames. Ich suche nach einer Funktion, um sie mit einer bestimmten Framerate in einen Film zu schreiben. Ich habe FFMPEG auf meinem Betriebssystem installiert, und as I can see from these answers, der effizienteste Weg, dies zu tun ist über Rohre.Effizient schreiben Sie einen Film direkt aus np.array mit Pipes

Allerdings habe ich sehr wenig Erfahrung mit Rohren, und die Erklärungen in den Link oben machen wenig Sinn für mich. Darüber hinaus scheinen sehr wenige der Antworten tatsächlich Pipes zu implementieren, und the one that does verwendet mencoder, nicht FFMPEG. Ich bin relativ unerfahren mit FFMPEG, also bin ich nicht sicher, wie man die Befehlszeichenkette von der mencoder Antwort ändert, um es in FFMPEG arbeiten zu lassen.

WHAT Ich möchte:

Eine Funktion der folgenden Form:

animate_np_array (4d_array, Framerate) -> output.mp4 (oder einer anderen Video-Codec)

Welche implementiert Rohre um Frames nacheinander an FFMPEG zu senden, und die ich in meinen bestehenden Code kopieren kann.

Darüber hinaus ist es absolut notwendig, dass diese Funktion nie wirklich einen der Rahmen plotten, da Aufrufe an die Funktion matplotlib.imshow() (wie ich am häufigsten verwende) langsam Dinge erheblich verlangsamen.

Antwort

2

Die ImageIO API bietet eine tote einfache Möglichkeit, dies zu tun:

import imageio 
imageio.mimwrite('output_filename.mp4', np_array , fps = [an int]) 

Während ich bin nicht sicher, ob diese Rohre verwendet oder nicht, ist es unglaublich schnell ist.

Verwandte Themen