Son zamanlarda yaptığım çalışma programlı olarak video hazırlamayı içeriyor. piton, tipik iş akışı şöyle görünür:Görüntüleri diske kaydetmek yerine bir video oluşturmak için görüntüleri "akışa" aktarabilir misiniz?
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"])
Bu iş akışı videodaki her kare için bir resim oluşturur ve diske kaydeder. Tüm görüntüler kaydedildikten sonra, tüm görüntülerden bir video oluşturmak için ffmpeg çağrılır.
Görüntüleri diske kaydetme (bellekte görüntülerin oluşturulmasını değil), buradaki döngülerin çoğunu tüketir ve gerekli görünmez. Aynı işlevi yerine getirmenin, ancak görüntüleri diske kaydetmeden bir yolu var mı? Böylece, ffmpeg çağrılacak ve görüntüler inşa edildikten hemen sonra ffmpeg'e gönderilecek ve beslenecektir.
Görüntüleri nasıl oluşturduğunuzu bilmiyorum, ancak ffmpeg de boru girişlerini kabul ediyor: 'ffmpeg -f image2pipe -c: v png -r 30000/1001 -i -'. – LordNeckbeard
Basitlik için, sadece 'createFrame (i)' 'img'de sakladığımız bir Python Image Library resim nesnesini döndürdüğünü varsayalım. Cevabın doğru yönde atılmış bir adım olduğunu düşünüyorum, fakat zorluğun yarısı, python programında inşa edilmiş görüntüleri ffmpeg'ye aktarıyordu. – Brandon
belki sıraya girebilir ve sonra görüntüleri ikinci bir iplikten geçirir mi? – lolopop