मेरे काम में हाल ही में प्रोग्रामेटिक रूप से वीडियो बनाने शामिल हैं। अजगर में, ठेठ कार्यप्रवाह इस तरह दिखता है:क्या आप डिस्क को सहेजने के बजाय, वीडियो बनाने के लिए ffmpeg पर छवियों को "स्ट्रीम" कर सकते हैं?
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"])
इस कार्यप्रवाह वीडियो में प्रत्येक फ्रेम के लिए एक छवि बनाता है और डिस्क के लिए यह बचाता है। सभी छवियों को सहेजने के बाद, ffmpeg को सभी छवियों से एक वीडियो बनाने के लिए बुलाया जाता है।
छवियों को डिस्क में सहेजना (स्मृति में छवियों का निर्माण नहीं) यहां अधिकांश चक्रों का उपभोग करता है, और यह आवश्यक नहीं लगता है। क्या एक ही कार्य करने का कोई तरीका है, लेकिन छवियों को डिस्क पर सहेजने के बिना? तो, ffmpeg कहा जाएगा और छवियों का निर्माण किया जाएगा और निर्माण के तुरंत बाद ffmpeg को खिलाया जाएगा।
मुझे नहीं पता कि आप छवियां कैसे बना रहे हैं, लेकिन ffmpeg पाइप इनपुट भी स्वीकार करता है: 'ffmpeg -f image2pipe -c: v png -r 30000/1001 -i -'। – LordNeckbeard
सादगी के लिए, बस मान लें कि 'createFrame (i)' एक पायथन छवि लाइब्रेरी छवि ऑब्जेक्ट देता है, जिसे हम 'img' में संग्रहीत करते हैं। मुझे लगता है कि आपकी प्रतिक्रिया सही दिशा में एक कदम है, लेकिन पाइथन कार्यक्रम में आधा चुनौती निर्मित छवियों को ffmpeg पर पाइप कर देगी। – Brandon
शायद कतार और फिर छवियों को दूसरे धागे के माध्यम से पाइप करें? – lolopop