python+moviepy音视频处理(一):基本操作

这篇具有很好参考价值的文章主要介绍了python+moviepy音视频处理(一):基本操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

视频处理

视频加载和输出

视频转换gif

视频裁剪

视频音量调节

去掉视频声音

视频中的音频提取与替换

获取视频属性

倍数播放视频

截取视频某帧为封面

多视频拼接

音频处理

替换视频文件的音频

多个音频文件拼接


安装:pip install moviepy

中文官网:moviepy-cn 文档

'''

moviepy.editor模块类

  • VideoFileClip:最常用的视频剪辑类, 用于导入视频文件(mp4、avi等格式皆可)
  • ImageClip:常用的剪辑类, 用于导入图片文件(png、jpg等格式皆可)
  • ColorClip:ImageClip的子类,比较少用, 可以把它当作是单一颜色的图片
  • TextClip:常用的剪辑类, 文字剪辑, 常用于给视频加字幕、水印、标题等
  • CompositeVideoClip:最常用剪辑类, 组合剪辑, 用于组合以上各种视频剪辑类CompositeVideoClip().to_videofile('file_name')
  • AudioClip:最常用音频剪辑类, 与VideoFileClip类似, 用于导入音频文件(mp3, m4a等)
  • CompositeAudioClip:与CompositeVideoClip类似, 是最常用的音频组合剪辑类

'''

视频处理

视频加载和输出

1、视频加载:调用`VideoFileClip(文件名)`即可将视频加载进来,可以支持不同格式的视频文件。VideoFileClip类的构造函数参数如下:

  • filename:视频文件名,一般常见格式都支持;
  • has_mask:是否包含遮罩;
  • audio:是否加载音频;
  • audio_buffersize:音频缓冲区大小;
  • target_resolution:加载后需要变换到的分辨率;
  • resize_algorithm:调整分辨率的算法,默认是 bicubic,可以设置为 bilinear,fast_bilinear;
  • audio_fps:声音的采样频率;
  • audio_nbytes:采样的位数;
  • verbose:是否输出处理信息。

2、视频输出:write_videofile或to_videofile方法用于视频输出,可以将处理之后的视频写入本地。

视频转换gif

from moviepy.editor import VideoFileClip
clip = VideoFileClip('./21.mp4')
clip.write_gif('21.gif')
# clip.write_gif('21.gif', fps=1)  # fps设置每秒的帧数,这将直接影响gif文件的大小(帧数越小,文件越小),不设置的时候,默认取视频的原帧数

gif缩放:视频分辨率往往比较高,直接转化为Gif,比较大,不利于网络传播,所以可以使用resize,来进行缩放

clip = (VideoFileClip("21.mp4").subclip(1, 3).resize(0.5))  # 宽度和高度乘以0.1
clip.write_gif("Video.gif")

视频裁剪

用 subclip 这个方法就可以实现视频的截取,添加参数传入起始时间和结束时间即可截取视频中的指定部分。subclip(t_start,t_end) 方法中的时间参数:

  • t_start默认为开始0秒,t_end 的默认值就是视频的长度(最后时间),可支持负数,表示结束前N时间点
  • 以秒表示: (t_start=10) 表示从开始时间的10s开始裁剪到最后。
  • 以分秒表示: (t_start=(1,20)) 表示从开始时间的1分20秒开始裁剪到最后。
  • 以时分秒表示: (t_start=(1,1,20)) 或者 (t_start=(01:01:20))表示从开始时间的1小时1分20秒开始裁剪到最后
clip = VideoFileClip(video_path)
video_clip = clip.subclip(5, -2)  # 表示从5s开始到结束前2s截止之前的视频
video_clip.to_videofile('demo_video001.mp4')

视频音量调节

video = VideoFileClip(video_path)
video = video.volumex(0.5)   # 调整音量,变为原来的0.5
video_file.write_videofile('volumex_video.mp4')

去掉视频声音

video_file = VideoFileClip('demo_video.mp4')
video_file = video_file.without_audio()
video_file.write_videofile('out_audio.mp4')

视频中的音频提取与替换

video1, video2 = VideoFileClip('demo_video.mp4'), VideoFileClip('21.mp4')
audio1 = video1.audio  # 提取第一个视频的音频部分(可截取部分音频,使用subclip()先将读取的视频文件截取后再操作即可)
# audio1.write_audiofile('audio.mp3') # 可以保存提取的音频为MP3格式文件
video3 = video2.set_audio(audio1)  # 将提取的视频1的音频合成到2视频中
video3.write_videofile('demo001.mp4')

获取视频属性

video = VideoFileClip('demo_video.mp4')
print(video.size)  # 获取分辨率大小
print(video.w, video.h)  # 获取宽高
print(video.fps)  # 获取帧数
print(video.duration)  # 获取视频时长

# 使用OS模块获取大小
import os
# 方法1:
video_size = os.stat('demo_video.mp4').st_size
print(video_size, video_size / 1024 / 1000)  # 经测试除以1024**2与原来的大小相差大,除以(1024*1000)的结果和实际大小基本一致
# 方法2:
size = os.path.getsize('demo_video.mp4')
print(size)

案例:获取视频时长

import cv2
import time
from moviepy.editor import VideoFileClip


def video_duration_1(filename):
    start = time.time()
    clip = VideoFileClip(filename)
    end = time.time()
    spend = end - start
    print("获取视频时长方法1耗时:", spend)
    return float(clip.duration)


def video_duration_2(filename):
    start = time.time()
    cap = cv2.VideoCapture(filename)
    if cap.isOpened():
        rate = cap.get(5)
        frame_num = cap.get(7)
        # print(rate, frame_num)
        duration = frame_num / rate
        end = time.time()
        spend = end - start
        print("获取视频时长方法2耗时:", spend)
        return duration
    return -1


if __name__ == '__main__':
    file = "demo_video.mp4"

    video_time_1 = video_duration_1(file)
    print(video_time_1)

    print("*" * 100)

    video_time_2 = video_duration_2(file)
    print(video_time_2)

python+moviepy音视频处理(一):基本操作

倍数播放视频

speedx()方法设置要加速到的倍数

video = VideoFileClip('demo_video.mp4')
video_speed = video.speedx(2)  # 设置两倍速度播放
video_speed.write_videofile('speed2.mp4')

截取视频某帧为封面

t默认为0,保存0秒时的一帧,t标识保存某时间的那一帧,时间单位为秒

video = VideoFileClip('demo_video.mp4')
video.save_frame('frame.jpg', t=3)

多视频拼接

多视频按顺序前后拼接

多个clip进行拼接,并不需要这些clip之间有相同的尺寸、时长等,仅仅是将它们按照顺序拼接起来

'''

from moviepy import editor

videos = ["1.mp4", "2.mp4", "3.flv", "4.mp4", "5.flv"]

clips = []

for video in videos:

clips.append(editor.VideoFileClip(video))

editor.concatenate_videoclips(clips).write_videofile("xxx.mp4")

'''

from moviepy.editor import VideoFileClip, concatenate_videoclips

video1, video2 = VideoFileClip('demo_video.mp4').subclip(0, 2), VideoFileClip('demo_video.mp4').subclip(-6,-2)
video_con = concatenate_videoclips([video1, video2])   # 可以指定一个transition参数(也是一个VideoFileClip对象),作为衔接之间的过渡
video_con.write_videofile('splicing_video.mp4')

多视频显示在同一个屏幕

from moviepy.editor import VideoFileClip, vfx
from moviepy import editor

video = VideoFileClip('demo_video.mp4').margin(10)  # margin设置外边距
video1, video2 = video.fx(vfx.mirror_x), video.fx(vfx.mirror_y)  # x轴镜像;y轴镜像
video3 = video.resize(.5)  # 等比缩放

# 列表里面有两个列表,所以会将屏幕上下等分
# 上半部分显示 video1, video2
# 下半部分显示video3, video
video_clip = editor.clips_array([[video1, video2], [video3, video]])
video_clip.to_videofile('joint_video.mp4')

音频处理

替换视频文件的音频

from moviepy.editor import VideoFileClip, AudioFileClip

video = VideoFileClip('demo_video.mp4')
audio = AudioFileClip('红尘.mp3')
video = video.set_audio(audio)  # 給視頻文件設置新的音頻
video.audio.to_audiofile('old_audio.mp3')  # 保存在視頻中提取的音頻
video.write_videofile('change_audio.mp4')

多个音频文件拼接

from moviepy.editor import AudioFileClip, concatenate_audioclips

audio1, audiio2 = AudioFileClip('红尘.mp3'), AudioFileClip('听见凉山.mp3')
join_audio = concatenate_audioclips([audio1, audiio2])
join_audio.to_audiofile('new_audio.mp3')

 文章来源地址https://www.toymoban.com/news/detail-422420.html

到了这里,关于python+moviepy音视频处理(一):基本操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pydub,一个有趣的 Python 音视频处理库!

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。   目录 ​编辑 前言 什么是 pydub? 安装 pydub 基本用法  1. 播放音频文件  2. 剪切音频文件 高级用法  1. 合并音频文件  2. 调整音量 实际

    2024年02月21日
    浏览(75)
  • 「Python|音视频处理|场景案例」如何使用ffmpeg下载m3u8视频到本地并保存成mp4

    本文主要介绍如何使用ffmpeg批量下载视频到本地并保存成指定格式。 当我们希望将网页上的视频下载到本地的时候,我们可能获取到的视频地址是指向 .m3u8 格式的,当视频多的时候,手动下载并使用工具转换格式就显得工作量过大。 ffmpeg 是一个强大的音视频处理工具,具体

    2024年02月16日
    浏览(77)
  • 音视频 FFmpeg音视频处理流程

    推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家: 零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核) https://xxetb.xet.tech/s/VsFMs

    2024年02月12日
    浏览(69)
  • 音视频基本概念

    充分利用cpu资源的工具  多线程管理问题 资源 有限多个人去抢 有序进行 读写锁 读写分离 自旋锁 等待资源释放(例如) 可重入锁 SDL锁 互斥锁 SDL_CreateMutex/SDL_DestroyMutex SDL_LockMutex/SDL_UnlockMutex 信号量 SDL_CreateCond/SDL_DestroyCond SDL_CondWait/SDL_CondSignal pts:Presentation timestamp  展示音

    2024年01月22日
    浏览(50)
  • 【音视频原理】音视频 “ 采样 - 编码 - 封装 过程 “ 和 “ 解封装 - 解码 - 播放 过程 “ 分析 ( 视频采集处理流程 | 音频采集处理流程 | 音视频文件解封装播放流程 )

    本篇文件主要分析 音视频文件 是怎么产生的 , 以及 音视频文件是如何播放的 ; 视频文件从录像到生成文件的全过程 : 采集图像帧 : 摄像头 硬件 负责 采集画面 , 采集的 初始画面 称为 \\\" 图像帧 \\\" , 一秒钟 采集 的 图像帧 数量 称为 \\\" 帧率 \\\" , 如 : 60 帧 就是 一秒钟采集 60 个画

    2024年02月11日
    浏览(80)
  • Py之AV:Python下音视频处理的良伴,AV库的全面介绍、详细安装和使用方法!

    Py之AV:Python下音视频处理的良伴,AV库的全面介绍、详细安装和使用方法! Python作为一门广泛使用的编程语言,其实也可以用来进行音视频的处理。AV库就是一个功能强大、易于使用的Python音视频处理库,能够方便地完成多种音视频格式的读取、解码和编码等操作。 本文将全

    2024年02月12日
    浏览(67)
  • 音视频中的基本概念

    操作系统中的文件名都有后缀,即扩展名,例如1.doc,2.jpg,3.avi等。设置扩展名的目的是让系统中的应用程序来识别并关联这些文件,让相应的文件由相应的应用程序打开。常见的文件格式如1.avi,2.mpg,3.mp4这些都叫做视频的文件格式,可由电脑上安装的视频播放器关联和打

    2024年02月17日
    浏览(45)
  • opencv 图像和视频处理的基本操作(python)

    原图:   1 图片的获取 主要通过cv2.imread(src)函数进行获取 2 图片的显示 3 ROI区域(图片截取) 4 图片的RGB通道划分 注意cv2.imread()获取的图片通过顺序为BGR,而非RGB,即B为0,G为1,R为2  保留R通道  保留G通道   保留B通道   5 RGB通道合成   6 边界填充 主要是通过cv2.copyMakeBo

    2023年04月21日
    浏览(67)
  • [音视频处理] FFmpeg使用指北1-视频解码

    本文将详细介绍如何使用ffmpeg 4.4在C++中解码多种格式的媒体文件,这些媒体文件可以是视频、视频流、图片,或是桌面截屏或USB摄像头的实时图片。解码文件后,还将每帧图片转换为OpenCV的Mat格式以供后续使用。 目录 1 基于ffmpeg的媒体文件解码 1.1 简介 1.2 详细代码 2 ffmpeg函

    2024年02月07日
    浏览(67)
  • Java音视频处理——JavaCV

    目录   简介 Maven 软件环境 JavaCV-Examples OpenCV Cookbook Examples 概述 示例 OpenCV文档 如何使用JavaCV示例 示例代码的组织结构 示例列表 Why Scala? 学习地址 图像简单处理代码示例 1.打开保存一张图  2.画直线 3.画圆圈 4.画折现 5.添加文字水印 6.裁剪并局部放大 7.人脸检测 视频简单处

    2024年02月03日
    浏览(94)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包