相关文章推荐
腼腆的柠檬  ·  python ...·  1 周前    · 
有情有义的大白菜  ·  python ...·  1 周前    · 
完美的馒头  ·  python QTreeWidget ...·  1 周前    · 
失眠的烤红薯  ·  python qt textBrowser ...·  1 周前    · 
慷慨的葡萄酒  ·  Azure OpenAI Service ...·  7 月前    · 
爽快的春卷  ·  js中 ...·  8 月前    · 

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 preprocess
t1=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:
        break
    image = 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 center
    curvature = (left_curverad + right_curverad) / 2
    car_pos = image.shape[1] / 2
    center = (abs(car_pos - curvature) * (3.7 / 650)) / 10
    curvature = '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 time
import cv2
import preprocess
import calibrateCamera
import laneDetection
from moviepy.editor import VideoFileClip
def 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 center
    curvature = (left_curverad + right_curverad) / 2
    car_pos = image.shape[1] / 2
    center = (abs(car_pos - curvature)*(3.7/650))/10
    curvature = '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 frame
def 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 for
    frame = pipeline(frame)
    cv2.imshow('Frame', frame)
    cv2.waitKey(10000)
def processFrames(infile, outfile):
    output = outfile
    clip = 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 pictures
    processFrames(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

为什么程序在运行几秒后视频写入速度变得特别慢。下面是全部代码了from moviepy.editor import VideoFileClipfrom moviepy.editor import CompositeVideoClipfrom moviepy.editor import concatenate_videoclipsimport xlrd#文件路径path = ".\\sources\... 很多人在创作视频时都需要进行剪辑,例如删减无用镜头、调整视频长度等等。这些任务通常需要使用视频编辑软件,例如Adobe Premiere和Final Cut Pro等。然而,如果你想批量剪辑大量视频,或者想用编程方式剪辑视频Python将为你提供方便的解决方案。在本文中,我们将介绍如何使用Python进行视频剪辑的完整攻略。我们将探讨如何使用Python库FFmpeg和MoviePy来剪切、合并和转换视频。安装FFmpegFFmpeg是一种流行的开源软件,可以用于处理视频和音频文件。 我的脚本以两个电影文件作为输入,并编写一个2x1数组的电影输出(立体并排半宽)。输入的视频片段具有等分辨率(1280x720)、速率(60)、数(23899)、格式(mp4)。。。当write-videofile函数开始处理时,它提供了一个非常合理的估计完成时间~20min。当它处理每一时,处理变得越来越慢(由进度条和估计完成时间表示)。在我的例子中,输入的电影片段大约有6分钟长。经过3分钟... 你知道吗,用moviepy一行代码就能够快速剪辑视频中某个区间的片段: # 这一段代码,能够在3秒内将videoplayback.mp4的50秒-60秒的视频片段提取出来,非常方便。 clip = VideoFileClip("videoplayback.mp4").subclip(50,60) 0. 环境依赖库的安装 pip install moviepy 1. 视频剪辑 from moviepy.editor import* # 剪辑50-60秒的音乐 00:00:50 - 00:00:60 首先要指出的是。MoviePy 基于ffmpeg ,视频的最后生成,用的就是ffmpeg。所以,讨论MoviePy的性能问题,归根到底是讨论ffmpeg的性能。 关于moviepy的程序执行过程,理论上所有耗时操作只发生在将clip写出到文件的时候。基于此因素,在实际操作中,尽量只在合成最后才进行视频的导出操作,即 write_videofile 关于,ffmpeg的性能呢,一般需要看C... Python 可以通过 MoviePy 库轻松实现视频处理的功能,包括调整视频的播放速度。使用 speedx 方法,我们可以方便地将视频速度减慢或加快,针对不同的需求进行调整。 moviepy,一个Python写的视频处理库。包括常见的视频切割,拼接,插入标题等,甚至可以做一些非线编辑,特效等等。可以读取和写入所有最常见的音频和视频格式,包括GIF。 MoviePy MoviePy(完整文档)是一个用于视频编辑的 Python 库:剪切、连接、标题插入、视频合成(又名非线性编辑)、视频处理和自定义效果的创建。 有关使用示例,请参阅图库。 MoviePy 可以读取和写入所有最常见的音频和视频格式,包括 GIF,并在 Windows/Mac/Linux 上运行,使用 Python 3.6+。 这是在 IPython notebook 中的操作: 示例 在此示例中,我们打开一个视频文件,选择 t=50s 和 t=60s 之间的子剪辑,在屏幕中央添加标题,并将结果写入新文件: from moviepy.editor import * video = VideoFileClip("myHolidays.mp4").subclip(50,60) # 制作文本。 还有更多选项可用。 txt_clip = ( TextClip("My Holidays 2013" MoviePy (full documentation) is a Python library for video editing: cutting, concatenations, title insertions, video compositing (a.k.a. non-linear editing), video processing, and creation of... pip install imageio pip install skimage 这时候会报错Please install the `scikit-image` package (instead of `skimage`) 所以按照提示操作即可: pip install scikit-image 环境安装成功。 1、快进(加速)在时间轴轨道的剪辑上右击,选择“速度/持续时间”。速度:100%,表示正常速度速度超过100%,即为加速播放。如果改变速度百分比值,下面的“持续时间”也...