實(shí)現(xiàn)抖音時(shí)光倒流效果---OpenCV-Python開(kāi)發(fā)指南(56)

抖音時(shí)光倒流原理

抖音的時(shí)光倒流原理赖钞,應(yīng)該來(lái)說(shuō)最好理解,也就是將視頻倒放宋欺。如果你是掌握PR或者AE的用戶(hù)轰豆,那么視頻倒放肯定手到擒來(lái)。但是齿诞,今天我們要做的是使用OpenCV程序?qū)崿F(xiàn)視頻的倒放效果(當(dāng)然PR與AE底層實(shí)現(xiàn)的效果就是這段代碼原理)酸休。

下面,我們來(lái)一步步掌握視頻的整體倒放祷杈,以及部分倒放的操作代碼斑司。

實(shí)現(xiàn)視頻整體倒放

先要了解時(shí)光倒流的具體實(shí)現(xiàn),我們不妨先實(shí)現(xiàn)一個(gè)簡(jiǎn)單的整體倒放但汞。對(duì)于整體倒放來(lái)說(shuō)宿刮,相對(duì)比部分倒放簡(jiǎn)單,只需要讀取視頻私蕾,然后把每一幀保存僵缺,然后倒著遍歷寫(xiě)入視頻文件保存即可。

具體代碼如下所示:

#視頻整體倒放
def video_Inverted(videoFileName,outputFileName):
    cap = cv2.VideoCapture(videoFileName)
    fps = cap.get(cv2.CAP_PROP_FPS)
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fourcc = cv2.VideoWriter_fourcc(*'MJPG')
    videoWriter = cv2.VideoWriter(outputFileName+".avi", fourcc, fps, (width, height))
    frame_list = []
    while (cap.isOpened()):
        ret, frame = cap.read()
        if ret:
            frame_list.append(frame)
            c = cv2.waitKey(1)
            if c == 27:
                break
        else:
            break
    for frame in frame_list[::-1]:
        videoWriter.write(frame)
    cap.release()
    videoWriter.release()
    cv2.destroyAllWindows()


if __name__ == "__main__":
    video_Inverted("45.mp4","output")

運(yùn)行之后踩叭,我們的視頻就會(huì)倒放磕潮,效果如下:


1.gif

實(shí)現(xiàn)視頻部分倒放

視頻的部分倒放在抖音以及影視作品中也非常的常見(jiàn),比如影視中慣用的回憶容贝,然后加快進(jìn)度等都有倒放的影子自脯。那么如何實(shí)現(xiàn)視頻的中間部分倒放呢?

答案很簡(jiǎn)單斤富,我們分為如下2個(gè)步驟:

  1. 首先設(shè)置需要倒放視頻的幀數(shù)起點(diǎn)與終點(diǎn)
  2. 然后設(shè)置三個(gè)列表膏潮,一個(gè)保存不需要倒放的倒放前的幀數(shù)圖像,一個(gè)保存倒放的幀數(shù)圖像满力,一個(gè)保存不需要倒放的倒放后那段幀數(shù)圖像戏罢。
  3. 最后屋谭,拼接倒放前的圖像,倒放的圖像龟糕,倒放后的圖像桐磁。這樣就完成了視頻里面部分視頻的倒放。

下面讲岁,我們將上面的步驟轉(zhuǎn)換為代碼我擂,具體如下:

# 視頻的部分倒放
def video_part_Inverted(videoFileName, outputFileName):
    cap = cv2.VideoCapture(videoFileName)
    fps = cap.get(cv2.CAP_PROP_FPS)
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fourcc = cv2.VideoWriter_fourcc(*'MJPG')
    videoWriter = cv2.VideoWriter(outputFileName + ".avi", fourcc, fps, (width, height))
    frame_list_start = []  # 倒放前圖像列表
    frame_list_end = []  # 倒放后圖像列表
    inverted_list = []  # 需要倒放的圖像列表
    fps_start = 66# 倒放起始幀
    fps_end = 150# 倒放結(jié)束幀
    i = 0
    while (cap.isOpened()):
        ret, frame = cap.read()
        if ret:
            if i >= fps_start and i <= fps_end:
                inverted_list.append(frame)
            elif i < fps_start:
                frame_list_start.append(frame)
            elif i > fps_end:
                frame_list_end.append(frame)
            i += 1
            c = cv2.waitKey(1)
            if c == 27:
                break
        else:
            break
    for frame in frame_list_start:
        videoWriter.write(frame)

    for frame in inverted_list[::-1]:
        videoWriter.write(frame)

    for frame in frame_list_end:
        videoWriter.write(frame)

    cap.release()
    videoWriter.release()
    cv2.destroyAllWindows()


if __name__ == "__main__":
    video_part_Inverted("45.mp4", "output1")

原理已經(jīng)講清楚了,相信這段代碼很好理解缓艳,這里就不在贅述校摩,也不放運(yùn)行后的圖像。感興趣的讀者阶淘,可以自己找一段視頻測(cè)試衙吩。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市溪窒,隨后出現(xiàn)的幾起案子坤塞,更是在濱河造成了極大的恐慌,老刑警劉巖澈蚌,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摹芙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡宛瞄,警方通過(guò)查閱死者的電腦和手機(jī)浮禾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)份汗,“玉大人盈电,你說(shuō)我怎么就攤上這事”睿” “怎么了匆帚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)轩猩。 經(jīng)常有香客問(wèn)我卷扮,道長(zhǎng)荡澎,這世上最難降的妖魔是什么均践? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮摩幔,結(jié)果婚禮上彤委,老公的妹妹穿的比我還像新娘。我一直安慰自己或衡,他們只是感情好焦影,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布车遂。 她就那樣靜靜地躺著,像睡著了一般斯辰。 火紅的嫁衣襯著肌膚如雪舶担。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,549評(píng)論 1 312
  • 那天彬呻,我揣著相機(jī)與錄音衣陶,去河邊找鬼。 笑死闸氮,一個(gè)胖子當(dāng)著我的面吹牛剪况,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蒲跨,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼译断,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了或悲?” 一聲冷哼從身側(cè)響起孙咪,我...
    開(kāi)封第一講書(shū)人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎隆箩,沒(méi)想到半個(gè)月后该贾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捌臊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年杨蛋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片理澎。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逞力,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出糠爬,到底是詐尸還是另有隱情寇荧,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布执隧,位于F島的核電站揩抡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏镀琉。R本人自食惡果不足惜峦嗤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屋摔。 院中可真熱鬧烁设,春花似錦、人聲如沸钓试。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至恋谭,卻和暖如春糠睡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背疚颊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工铜幽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人串稀。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓除抛,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親母截。 傳聞我的和親對(duì)象是個(gè)殘疾皇子到忽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容