手机成深情注视对象,热门视频领域工具多样及处理方式探讨
[id_694[id_999236281]2260[id_1540233905]]id_1670933533]

感觉这辈子,最深情绵长的注视,都给了手机。
[id_532632090]
各平台纷纷抢先推出便捷工具,这些工具自带滤镜,还有各种玩法,使得普通人也能够轻松制作出精美视频。
也有不少团队达成了批量视频制作,具备更高的产能,运营效率同样更高 。
如今手机端的剪映,电脑端的爱剪辑,足以满足我们日常视频处理的需求。若想更专业些,还能用PR、FinalCut、Edius等软件进行处理。这些软件都具备可视化编辑功能,能够边剪辑边预览。
但对于那些工作流程相对固定的操作,更适合机器处理,对于产能要求高的操作,同样更适合机器处理。人睡觉时,机器依旧在剪辑。
甚至在需要支持多团队进行视频处理的情况下,可以考虑将剪辑工作迁移到云端,从而能够随时扩大处理能力 。
视频能够被看作是连续的图片,要是你看过用翻书制作的动画,便能够立刻理解 。
连续的图片切换速度足够快,主流认为这个速度是每秒24帧,这时我们就会感受到平滑的视觉效果。
视频的清晰度,与音频类似,主要由帧率决定,还由每帧图像的清晰度决定,每帧图像的清晰度也就是分辨率 。
但需要注意的是,对于已经存在的视频,提升帧率以及分辨率,并不会使视频变得更加清晰,原因在于信息没办法凭空恢复。
当然,这属于人工智能的研究范畴,一般被称作“AI修图”,它能让不清晰的图像变得更加清晰 。
比如前阵子火爆B站的老北京AI修复视频:
视频文件本身是一个容器,里面包含音频信息,包含视频信息,包含字幕等信息,独立字幕是文本文件,音视频经过编码后进行保存。
上一章已经介绍过ffmpeg,它是开源软件里处理视频的最佳选项,很多Python三方模块在处理音视频时,都会调用它编码和读写文件的能力。
Python处理视频主要有3类模块:
opencv-python中,视频本质是连续的图像,图像处理模块可处理视频的每一帧图像,视频的编码和读写依赖ffmpeg完成。
ffmpeg-python这类模块,是对ffmpeg命令的一种包装,其作用等同于用Python调用ffmepg的命令。
moviepy提供了便捷的视频处理接口,文件编码依赖ffmpeg,文件读写也依赖ffmpeg。
其中,moviepy使用门槛低,它足以应付最常见的需求,比如截取需求,拼接需求,简单转场需求和特效需求等。
模块安装:pip install moviepy
它的基本工作原理可以概括为:
要是想在视频里增添图形,要是想在视频里增添文字,那么就需要预先安装ImageMagick软件。
ImageMagick在Mac上安装稍微复杂些,这是因为它基于X11框架。
分两步安装:
安装XQuartz,它是X11框架在MacOS系统下的实现版本。通过Homebrew安装软件,具体操作为brew install imagemagick
本文会以moviepy为主来介绍视频处理,图像特效等部分会兼用opencv模块,也会兼用skimage等模块。
视频处理的常见场景包括:
下面将分成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”的视频,其帧率为15帧每秒。该视频格式为mp4 。)
vout_scale_path = path.joinpath(“008视频基础视频缩放.mp4”)
vout_speed2x_path = path.joinpath(名为“008video_basic_video_speed2x.mp4”的文件)
vout_speed05x_path = path.joinpath(“008视频基础视频速度0.5倍.mp4”)
vout_webm_path = path.joinpath(零零八视频基础视频格式,网络视频文件)
vout_gif_path = path.joinpath(“008视频基础视频动态图.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