文章目录

  • 摘要
  • 下载与安装
  • 工作原理
    • 基本概念
  • 速度对比
    • 测试遍历的方式
    • 测试moviepy方式处理图片的帧
  • 结论

摘要

MoviePy是一个用于视频编辑的Python模块,它可被用于一些基本操作(如剪切、拼接、插入标题)、视频合成(即非线性编辑)、视频处理和创建高级特效。它可对大多数常见视频格式进行读写,包括GIF。
手册:http://doc.moviepy.com.cn/index.html#document-index
示例如下(IPython Notebook环境)

下载与安装

pip install moviepy

工作原理

MoviePy使用ffmpeg软件来读取和导出视频和音频文件。也使用(可选)ImageMagick来生成文字和制作GIF文件。不同媒体的处理依靠Python的快速的数学库Numpy。高级效果和增强功能使用一些Python的图片处理库(PIL,Scikit-image,scipy等)。

基本概念

在MoviePy中,核心对象是剪辑,可以使用AudioClips或VideoClips来处理。剪辑可被修改(剪切、降低速度、变暗等)或与其他剪辑混合组成新剪辑。剪辑可被预览(使用PyGame或IPython Notebook),也可生成文件(如MP4文件、GIF文件、MP3文件等)。以VideoClips为例,它可以由一个视频文件、一张图片、一段文字或者一段卡通动画而来。它可以包含音频轨道(即AudioClip)和一个遮罩(一种特殊的VideoClip),用于表明当两个剪辑混合时,哪一部分的画面被隐藏)。详见生成与导出视频剪辑和混合剪辑。

你可使用MoviePy的很多效果对一个剪辑进行修改(如clip.resize(width=“360”)、clip.subclip(t1,t2)、clip.fx(vfx.black_white)或使用用户自行实现的效果。MoviePy提供许多函数(如clip.fl、clip.fx等),可以用简单的几行代码实现你自己的效果。详见视频转换与效果。

你还可以在moviepy.video.tools找到一些高级的效果来对视频中的对象进行追踪、画简单的形状和颜色渐变(对于遮罩来说很有用)、生成字幕和结束时的演职人员表等。参见高级工具中的详细描述。

最后,尽管MoviePy没有生动的用户界面,它也有许多方法来预览剪辑,使你能够调试脚本,从而确保你的视频在高质量的同时一切正常。详见如果更有效率地使用MoviePy。

速度对比

测试遍历的方式

新建脚本Opencv_demo.py,插入代码:

import laneDetection
import time
import cv2
import preprocesst1=time.time()
vs = cv2.VideoCapture('..\\data\\dashcam_video_trim.mp4')
fps = 30    #保存视频的FPS,可以适当调整
size=(1280,720)#宽高,根据frame的宽和高确定。
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
videoWriter = cv2.VideoWriter('3.mp4',fourcc,fps,size)#最后一个是保存图片的尺寸
# 循环播放图像流中的帧
while True:# 从视频流中读取下一帧并调整其大小(grabbed, frame)  = vs.read()if not grabbed:breakimage = frameframe, invM = preprocess.warp(frame)frame = preprocess.grayscale(frame)frame = preprocess.threshold(frame)frame, left_curverad, right_curverad = laneDetection.search_around_poly(frame)frame = cv2.warpPerspective(frame, invM, (frame.shape[1], frame.shape[0]), flags=cv2.INTER_LINEAR)frame = cv2.addWeighted(frame, 0.3, image, 0.7, 0)# Add curvature and distance from the centercurvature = (left_curverad + right_curverad) / 2car_pos = image.shape[1] / 2center = (abs(car_pos - curvature) * (3.7 / 650)) / 10curvature = 'Radius of Curvature: ' + str(round(curvature, 2)) + 'm'center = str(round(center, 3)) + 'm away from center'frame = cv2.putText(frame, curvature, (50, 50), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 2, cv2.LINE_AA)frame = cv2.putText(frame, center, (50, 100), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 2, cv2.LINE_AA)videoWriter.write(frame)key = cv2.waitKey(1) & 0xFF# 如果按下“ q”键,则退出循环if key == ord("q"):break
videoWriter.release()
cv2.destroyAllWindows()
vs.release()
t2=time.time()
print(t2-t1)

结果如下:

测试moviepy方式处理图片的帧

新建main.py,插入代码:

import timeimport cv2
import preprocess
import calibrateCamera
import laneDetection
from moviepy.editor import VideoFileClipdef pipeline(frame):image = frame#Disabled, techinically each frame needs to be undistored before being processed.#objpoints, imgpoints = [] #Add them manually#frame = calibrateCamera.calibrate(objpoints, imgpoints, frame)frame, invM = preprocess.warp(frame)frame = preprocess.grayscale(frame)frame = preprocess.threshold(frame)frame, left_curverad, right_curverad = laneDetection.search_around_poly(frame)frame = cv2.warpPerspective(frame, invM, (frame.shape[1], frame.shape[0]), flags=cv2.INTER_LINEAR)frame = cv2.addWeighted(frame, 0.3, image, 0.7, 0)#Add curvature and distance from the centercurvature = (left_curverad + right_curverad) / 2car_pos = image.shape[1] / 2center = (abs(car_pos - curvature)*(3.7/650))/10curvature = 'Radius of Curvature: ' + str(round(curvature, 2)) + 'm'center = str(round(center, 3)) + 'm away from center'frame = cv2.putText(frame, curvature, (50, 50), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 2, cv2.LINE_AA)frame = cv2.putText(frame, center, (50, 100), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 2, cv2.LINE_AA)return framedef debugFrames(file):cap = cv2.VideoCapture(file)if(cap.isOpened()==False):print('Error opening the file, check its format')cap.set(1, 100)res, frame = cap.read()#frame = pipeline(objpoints, imgpoints, frame) uncomment if using forframe = pipeline(frame)cv2.imshow('Frame', frame)cv2.waitKey(10000)def processFrames(infile, outfile):output = outfileclip = VideoFileClip(infile)processingClip = clip.fl_image(pipeline)processingClip.write_videofile(output,fps=30, audio=True)def main(infile, outfile):#objpoints, imgpoints = calibrate() uncomment, provided you have calibration picturesprocessFrames(infile, outfile)if __name__ == "__main__":infile = "..\\data\\dashcam_video_trim.mp4"outfile = "..\\data\\dashcam_video_trim_output.mp4"t1=time.time()main(infile, outfile)t2=time.time()print(t2-t1)

结果如下:

结论

moviepy处理图片的帧比直接遍历快了7秒。速度提升了不少。
本例用到代码和资料详见:
https://download.csdn.net/download/hhhhhhhhhhwwwwwwwwww/86757342

moviepy处理视频帧和遍历的方式处理视频帧速度对比。相关推荐

  1. 音视频处理基础知识扫盲:数字视频YUV像素表示法以及视频帧和编解码概念介绍

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一. ...

  2. moviepy音视频剪辑:与大小相关的视频变换函数crop、even_size、margin、resize介绍

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>介绍了剪辑基类的fl.fl_time.fx方法,在<movi ...

  3. python爬取视频自动播放_介绍一个python视频处理库:moviepy

    处理视频是一个常见的需求.那么在python中如何用代码处理视频呢?最近我无意间发现了一个很好用的python视频处理库moviepy,其使用起来简单易用,而且功能比较强大,这里记录一下分享给大家. ...

  4. 视频质量评估的新方式:VMAF百分位数

    正文字数:4964  阅读时长:7分钟 在这篇博客文章中,我们介绍了一种新的基于计算视频多方法评估融合(VMAF)百分位数的视觉质量评估方法. 作者 / Adeel Abbas 原文链接 / http ...

  5. 视频编码之I,P,B帧

    视频编码之I,P,B帧 编码主要是想办法压缩视频的大小. 使用帧间编码技术可以去除时间上的冗余信息,具体包括以下几个部分. 运动补偿:运动补偿是通过先前的局部图像来预测.补偿当前的局部图像,它是减少帧 ...

  6. 音视频开发之旅(58) -H.264 帧内预测

    目录 编码流程和数据格式回顾 4 × 4亮度块的9中预测模式 16 × 16亮度块的4种预测模式 8 × 8 色度块的4种预测模式 JM代码 资料 收获 一.编码流程和数据格式回顾 我们先看下下图来回 ...

  7. php截取视频第一帧为图片,把视频变成一帧一帧的图片(ae怎么把视频变成单帧) 视频截图视频画面每帧图片截取...

    AE怎么把视频变成单帧?这是小编今天要与大家讨论及解决的一个问题.在视频后期处理中,有时为实现某个场景效果,需要把视频中的某帧变成静态帧图片:或者需要视频截图视频画面每帧图片截取出来,把视频变成一帧一 ...

  8. 自媒体视频改帧数消重软件 修改视频的md5

             自媒体视频改帧数消重软件 修改视频的md5         视频伪原创是进行短视频引流的积累粉丝.今天的头条新闻特别近推出了一系列政策,鼓励媒体积累和煽动粉丝..        核心 ...

  9. 音视频从入门到精通——FFmpeg 播放器实现音视频同步的三种方式

    老人们经常说,播放器对音频和视频的播放没有绝对的静态的同步,只有相对的动态的同步,实际上音视频同步就是一个"你追我赶"的过程. 音视频的同步方式有 3 种,即:音视频分别向系统时钟 ...

最新文章

  1. matlab 多元多项式回归_Python机器学习之?线性回归入门(二)
  2. 常用的绘图约定——提高绘图和读图的效率
  3. 测试String, StringBuilder,StringBuffer 的数据,我居然发现这些了~~
  4. charles 华为手机使用_华为手机EMUI9.0健康使用手机怎么用?如何控制手机使用时长?...
  5. 快速排序 python 4种写法_[算法] 关于快速排序的四种写法
  6. spring整合hibernate初步
  7. 8. 额外的并发实用程序(Additional Concurrency Utilities)
  8. Java-JVM第一篇认识JVM
  9. 淘宝获得淘宝商品类目 API
  10. Cesium gltf(1.70)三维人物动画制作
  11. 现在谁还会LOL钻石网吧特权?
  12. win系统下非系统盘msdia.dll文件怎么处理
  13. 硬盘分区表故障和丢失的原因
  14. 程序员赚的辛苦钱及好朋友借钱[借钱时你是爷爷,借出去后丢一个朋友不说还多出一个爷爷]
  15. Linux内核和用户空间通信的方法
  16. 尚硅谷Web前端Promise教程从入门到精通——笔记
  17. flashback总结六之Flashback_Transaction_Query
  18. 简单易学的机器学习算法——梯度提升决策树GBDT
  19. PYTHON文件操作(读/写文件)
  20. r语言和python的区别-Python和R语言之分析对比

热门文章

  1. SSD训练的优化器们
  2. 构建 Git 服务器的权限管理
  3. Qt5_简易画板_详细注释
  4. Linux下的Tomcat调优
  5. android画布旋转,Android Canvas 平移、缩放、旋转的理解
  6. 【数通学员心得】成功没有捷径,HCIE也没有侥幸
  7. 赛后詹姆斯和韦德联手出席了发布会
  8. OSPF路由协议知识点总结 2023.1.7
  9. 区块链在物流行业中的应用应该怎样去实现?
  10. 野指针概念、定义、及如何规避野指针