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.