快速制作三分屏課件

在網(wǎng)絡(luò)發(fā)展到今天,知識的傳遞變得簡單,各種網(wǎng)絡(luò)學(xué)校也層出不窮,但是基礎(chǔ)的模式還是不變,一個好的老師一套好的片子,一段時間的教學(xué)。

微軟的三分屏課件

Microsoft Producer是很早一批制作三分屏課件的工具,不過這個軟件應(yīng)該在windows 2003年代就停止更新了。雖然網(wǎng)絡(luò)類似工具不少,但是逐幀核對時間點,也是個很費時的事情,PowerPoint的播放計時功能也很難獲取時間節(jié)點。

課件制作思路

1、拍攝講者視頻,制作video1
2、ScreenFlow錄制屏幕PPT,制作video2
3、通過ffmpeg每秒截取video2的視頻關(guān)鍵幀
4、通過圖片相似度對比,清理多余文件,計算翻頁時間點。

ffmpeg截取關(guān)鍵幀

Mac用戶直接下載編譯好的ffmpeg,放入 /usr/local/bin文件夾下即可使用

ffmpeg -i slide.mp4 -f image2 -vf fps=fps=1 out%d.png

相似圖片算法

用計算直方圖實現(xiàn)識別相似圖片。把圖片分隔成16個小塊,然后分別比較,最后綜合比較結(jié)果,從而提高比較的準(zhǔn)確率。另外一些算法參考相似圖片搜索的原理

from PIL import Image
import os

def calculate(image1,image2):
    g = image1.histogram()
    s = image2.histogram()
    assert len(g) == len(s),"error"

    data = []

    for index in range(0,len(g)):
        if g[index] != s[index]:
            data.append(1 - abs(g[index] - s[index])/max(g[index],s[index]) )
        else:
            data.append(1)
    
    return sum(data)/len(g)


def split_imgae(image,part_size):
    pw,ph = part_size
    w,h = image.size

    sub_image_list = []

    assert w % pw == h % ph == 0,"error"

    for i in range(0,w,pw):
        for j in range(0,h,ph):
            sub_image = image.crop((i,j,i+pw,j+ph)).copy()
            sub_image_list.append(sub_image)

    return sub_image_list

def classfiy_histogram_with_split(image1,image2,size = (256,256),part_size=(64,64)):
    image1 = image1.resize(size).convert("RGB")
    sub_image1 = split_imgae(image1,part_size)

    image2 = image2.resize(size).convert("RGB")
    sub_image2 = split_imgae(image2,part_size)

    sub_data = 0;
    for im1,im2 in zip(sub_image1,sub_image2):
        sub_data += calculate(im1, im2)

    x = size[0]/part_size[0]
    y = size[1]/part_size[1]

    pre = round((sub_data/(x*y) ),3 )
    return  pre    

清理多余文件

把所有相似度超過70%的圖片直接刪除,只保留唯一圖片即可。但是,根據(jù)視頻質(zhì)量的差異,可能有的圖片相似度要用到90%。

os.system('ffmpeg -i slide.mp4 -f image2 -vf fps=fps=1 out%d.png')


im1 = Image.open("out1.png")
for i in range(5000):
    try:
        im2 = Image.open("out%s.png" % str(i+2))
        diff = classfiy_histogram_with_split(im1, im2)
        print (diff)
        if diff > 0.7:
            os.remove("out%s.png" % str(i+2))
        else:
            im1 = Image.open("out%s.png" % str(i+2))
    except:
        pass

至此,基本可以省去大部分人工核對時間節(jié)點的問題,而且也能更好的處理PPT翻頁的問題。但是這樣做還有幾點需要注意:

1、拍攝要求:ppt禁止翻頁動畫,否則會影響圖片識別精度。
2、視頻講解過程不能停頓,后期如果剪輯會破壞時間線

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容