Python处理视频文件的实用姿势

本文介绍了Python处理视频的实用技巧,涵盖基本使用、视频拼接裁剪、效果处理与水印添加,以及智能处理如字幕提取和人脸追踪。通过OpenCV、moviepy等库,实现视频的读写、截取、滤镜应用、水印添加等操作,还探讨了智能处理中的OCR字幕识别和人脸追踪技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python处理视频文件的实用姿势

感觉这辈子,最深情绵长的注视,都给了手机。

视频是目前最热门的领域之一。

各平台争先推出便捷工具,自带滤镜和玩法,普通人也能轻松制作精美视频。

也有不少团队实现了批量视频制作,拥有更高产能,运营效率也更高。

现在手机上的剪映,电脑的爱剪辑,已经足够我们应付日常视频处理需求。再专业点,也可以用PR、FinalCut、Edius等软件处理。这些软件都提供可视化的编辑,可以边剪辑边预览。

但对于那些工作流程相对固定、产能要求高的操作,更适合机器处理。当人睡觉时,机器依旧在剪辑。

甚至如果需要支持多团队的视频处理,可以考虑把剪辑工作搬到云上,随时扩大处理能力。

视频可以看成是连续的图片,如果你看过翻书做的动画就能马上理解。

animate

当连续的图片切换足够快时(主流认为每秒24帧),我们就会感受到平滑的视觉效果。

和音频类似,视频的清晰度,主要由帧率和每帧图像的清晰度(即分辨率)决定。

但需要注意的是:对于已有视频,提高帧率和分辨率,并不能让视频更清晰,因为信息无法凭空还原。

当然,这是人工智能的研究领域之一,俗称“AI修图”,把不清晰的变得更清晰。

比如前阵子火爆B站的老北京AI修复视频:

还原时代原声,AI修复老北京再次火爆全网!民俗乐队,街边地摊、剃头匠,网友:有内味儿了

视频文件本身是个容器,内含音频、视频、字幕等信息,独立字幕是文本文件,音视频经编码后保存。

上一章已经介绍过ffmpeg,它是开源软件中处理视频的最佳选择,不少Python三方模块在处理音视频时,都会调用其编码和读写文件的能力。

Python处理视频主要有3类模块:

  1. opencv-python,由于视频本质上就是连续的图像,所以图像处理模块也能处理视频中的每一帧图像。最后对视频的编码和读写会依赖ffmpeg完成。

  2. ffmpeg-python,这类模块是对ffmpeg的命令包装,相当于用Python调用ffmepg的命令。

  3. moviepy,提供了便捷的视频处理接口,文件编码和读写也依赖ffmpeg

其中,moviepy使用门槛低,足够应付最常见的需求,如截取、拼接、简单转场和特效等。

模块安装:pip install moviepy

它的基本工作原理可以概括为:

  • 基于ffmpeg读写视频文件。
  • 基于numpyscipyopencvPIL处理内部图像数据。
  • 两大核心类:AudioClipVideoClip分别处理音频和视频。

moviepy

如果要在视频中增加图形或文字,需要提前安装ImageMagick软件。

ImageMagick的安装在Mac上稍微复杂些,因为它基于X11框架。

分两步安装:

  1. 安装XQuartz:即X11框架的MacOS版实现。
  2. Homebrew安装软件:brew install imagemagick

本文将以moviepy为主介绍视频处理,图像特效等部分会兼用opencvskimage等模块。

视频处理的常见场景包括:

  • 分段截取:剪掉前几秒或后几秒,或取中间某段
  • 素材提取:音频提取,视频截图
  • 清晰调整:帧率、分辨率
  • 倍速播放:加速、减速
  • 格式转换:视频编码选择、GIF转换
  • 视频拼接:如添加片头、添加片尾
  • 视频剪裁:裁剪某个区域内容
  • 水印处理:加文字水印、加图片水印、加动画水印
  • 视频特效:镜像、滤镜、过长切换、遮照
  • 字幕处理:提取字幕,添加字幕
  • 智能处理:人脸追踪、马赛克、换脸

下面分成4个部分介绍:基本使用、拼接裁剪、效果水印、智能处理。

基本使用

视频的基本处理包括:文件读写、分段截取、音量调整、素材提取、清晰度参数、倍速播放、格式转换。

import pathlib
from moviepy.editor import VideoFileClip

path = list(pathlib.Path.cwd().parents)[1].joinpath('data/automate/008video')
mp4_path = path.joinpath('input.mp4')
vout_path = path.joinpath('008video_basic_video.mp4')
vout15_path = path.joinpath('008video_basic_video_fps15.mp4')
vout_scale_path = path.joinpath('008video_basic_video_scale.mp4')
vout_speed2x_path = path.joinpath('008video_basic_video_speed2x.mp4')
vout_speed05x_path = path.joinpath('008video_basic_video_speed05x.mp4')
vout_webm_path = path.joinpath('008video_basic_video_format.webm')
vout_gif_path = path.joinpath('008video_basic_video_gif.gif')
aout_path = path.joinpath('008video_basic_audio.mp3')
img_path = path.joinpath('008video_basic_images')
clip = VideoFileClip(str(mp4_path))
# 获取基本信息:时长、
print('基本信息:')
print(clip.duration, clip.size, clip.fps)
# 截取前50秒视频
clip = clip.subclip(0, 50)
# 提取音频素材
audio = clip.audio
audio.write_audiofile(str(aout_path))
# 视频截图
ts = [5, 10, 20, 30, 40, 50] # 单位:秒
for t in ts:
    clip.save_frame(str(img_path.joinpath(f'{t}.png')), t=t)
# 调低音量
clip.volumex(0.6)
# 保存文件,audio_codec指定音频编码,默认视频编码为libx264
clip.write_videofile(str(vout_path), audio_codec='aac')
# 清晰度参数:帧率、分辨率
clip_fps15 = clip.set_fps(15) # 调整帧率,并不会减少多少文件大小
# 如果不指定audio,就会生成一个临时音频文件
clip_fps15.write_videofile(str(vout15_path), audio_codec='aac')
# 调整分辨率,可以很明显降低文件大小
# clip_scale = clip.resize((clip.w//2, clip.h//2))
clip_scale = clip.resize(0.5) # 等比缩放0.5
clip_scale.write_videofile(str(vout_scale_path), audio_codec='aac')
# 倍速播放
clip_sp2x = clip.speedx(2)
clip_sp2x.write_videofile(str(vout_speed2x_path), audio_codec='aac')
clip_sp05x = clip.speedx(0.5)
clip_sp05x.write_videofile(str(vout_speed05x_path), audio_codec='aac')
# 格式转换,根据后缀选择编码器
clip.write_videofile(str(vout_webm_path), audio=True)
# 转GIF图
clip.subclip(0,10).set_fps(1).write_gif(str(vout_gif_path))

视频拼接和裁剪

视频拼接是指在时间维度上,把多个视频段连起来,常见如每个视频的片头片尾。

视频裁剪是指在屏幕上划出一个区域当成新的视频。

import pathlib
from moviepy.editor import VideoFileClip, TextClip
from moviepy
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值