Czy można „przesyłać strumieniowo” obrazy do ffmpeg, aby utworzyć wideo, zamiast zapisywać je na dysku?

Moja praca ostatnio obejmuje programowe tworzenie filmów. W pythonie typowy przepływ pracy wygląda mniej więcej tak:

import subprocess, Image, ImageDraw

for i in range(frames_per_second * video_duration_seconds):
    img = createFrame(i)
    img.save("%07d.png" % i)

subprocess.call(["ffmpeg","-y","-r",str(frames_per_second),"-i", "%07d.png","-vcodec","mpeg4", "-qscale","5", "-r", str(frames_per_second), "video.avi"])

Ten przepływ pracy tworzy obraz dla każdej klatki wideo i zapisuje go na dysku. Po zapisaniu wszystkich obrazów ffmpeg jest wywoływany w celu skonstruowania wideo ze wszystkich obrazów.

Zapisywanie obrazów na dysku (a nie tworzenie obrazów w pamięci) pochłania większość cykli tutaj i nie wydaje się konieczne. Czy jest jakiś sposób na wykonanie tej samej funkcji, ale bez zapisywania obrazów na dysku? Tak więc ffmpeg zostanie wywołany, a obrazy zostaną skonstruowane i przekazane do ffmpeg natychmiast po ich skonstruowaniu.

questionAnswers(1)

yourAnswerToTheQuestion