我的工作最近涉及編程製作視頻。在Python中,典型的工作流程看起來是這樣的:你可以「流」圖像到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)'返回一個Python圖像庫圖像對象,我們將它存儲在'img'中。我認爲你的迴應是朝着正確方向邁出的一步,但挑戰的一半是在python程序中將構建的圖像傳輸到ffmpeg。 – Brandon
也許隊列,然後通過第二個線程管圖像? – lolopop