实现抖音时光倒流效果---OpenCV-Python开发指南(56)

简介: 实现抖音时光倒流效果---OpenCV-Python开发指南(56)

抖音时光倒流原理


抖音的时光倒流原理,应该来说最好理解,也就是将视频倒放。如果你是掌握PR或者AE的用户,那么视频倒放肯定手到擒来。但是,今天我们要做的是使用OpenCV程序实现视频的倒放效果(当然PR与AE底层实现的效果就是这段代码原理)。


下面,我们来一步步掌握视频的整体倒放,以及部分倒放的操作代码。


实现视频整体倒放


先要了解时光倒流的具体实现,我们不妨先实现一个简单的整体倒放。对于整体倒放来说,相对比部分倒放简单,只需要读取视频,然后把每一帧保存,然后倒着遍历写入视频文件保存即可。


具体代码如下所示:

#视频整体倒放
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")


运行之后,我们的视频就会倒放,效果如下:


实现视频部分倒放


视频的部分倒放在抖音以及影视作品中也非常的常见,比如影视中惯用的回忆,然后加快进度等都有倒放的影子。那么如何实现视频的中间部分倒放呢?


答案很简单,我们分为如下2个步骤:


1.首先设置需要倒放视频的帧数起点与终点

2.然后设置三个列表,一个保存不需要倒放的倒放前的帧数图像,一个保存倒放的帧数图像,一个保存不需要倒放的倒放后那段帧数图像。

3.最后,拼接倒放前的图像,倒放的图像,倒放后的图像。这样就完成了视频里面部分视频的倒放。


下面,我们将上面的步骤转换为代码,具体如下:

# 视频的部分倒放
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# 倒放结束帧
    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")


原理已经讲清楚了,相信这段代码很好理解,这里就不在赘述,也不放运行后的图像。感兴趣的读者,可以自己找一段视频测试。

相关文章
|
6月前
|
数据采集 存储 XML
深入浅出:基于Python的网络数据爬虫开发指南
【2月更文挑战第23天】 在数字时代,数据已成为新的石油。企业和个人都寻求通过各种手段获取互联网上的宝贵信息。本文将深入探讨网络爬虫的构建与优化,一种自动化工具,用于从网页上抓取并提取大量数据。我们将重点介绍Python语言中的相关库和技术,以及如何高效、合法地收集网络数据。文章不仅为初学者提供入门指导,也为有经验的开发者提供进阶技巧,确保读者能够在遵守网络伦理和法规的前提下,充分利用网络数据资源。
|
3月前
|
机器学习/深度学习 XML 搜索推荐
图像自动化保存工具:Python脚本开发指南
图像自动化保存工具:Python脚本开发指南
|
4月前
|
数据采集 JSON API
深入解析:抖音视频标题的Python爬虫提取方法
深入解析:抖音视频标题的Python爬虫提取方法
|
数据采集 JavaScript 前端开发
Web爬虫开发指南:使用Python的BeautifulSoup和Requests库
Web爬虫是一种从互联网上获取数据的自动化工具,它可以用于抓取网页内容、提取信息和分析数据。Python提供了一些强大的库,其中BeautifulSoup和Requests是两个常用的工具,用于解析HTML内容和发起HTTP请求。本文将介绍如何使用BeautifulSoup和Requests库构建一个简单而有效的Web爬虫。
|
前端开发 API 数据库
Python网站开发指南:构建现代化、高效的Web应用
在当今数字化时代,网站已成为企业、组织以及个人展示自己的重要窗口。Python作为一种简洁、高效且易于学习的编程语言,被广泛运用于网站开发领域。本文将向您介绍如何使用Python进行网站开发,包括常用的Web框架、关键技术和最佳实践。
|
Web App开发
Python+selenium 实现趣头条的短视频自动上传与发布实例演示(支持抖音、快手、b站、小红书等平台)
Python+selenium 实现趣头条的短视频自动上传与发布实例演示(支持抖音、快手、b站、小红书等平台)
396 0
|
数据安全/隐私保护 Python
Python抖音视频去水印,并打包成exe可执行文件
Python抖音视频去水印,并打包成exe可执行文件
418 0
|
计算机视觉
实现抖音慢动作效果---OpenCV-Python开发指南(57)
实现抖音慢动作效果---OpenCV-Python开发指南(57)
242 1
|
算法
实现人脸美白算法---OpenCV-Python开发指南(59)
实现人脸美白算法---OpenCV-Python开发指南(59)
634 0
实现人脸美白算法---OpenCV-Python开发指南(59)
|
算法 Python
实现人脸磨皮算法---OpenCV-Python开发指南(58)
实现人脸磨皮算法---OpenCV-Python开发指南(58)
630 0
实现人脸磨皮算法---OpenCV-Python开发指南(58)