在本地进行音视频处理时,首先要从视频文件进行音视频加载,最后要将处理结果输出到文件。本节介绍moviepy的音视频的加载和输出方法。
要从视频文件中加载视频非常简单,使用VideoFileClip类的构造方法即可完成加载。其构造方法语法如下:
__init__(self, filename, has_mask=False,
audio=True, audio_buffersize=200000,
target_resolution=None, resize_algorithm='bicubic',
audio_fps=44100, audio_nbytes=2, verbose=False,
fps_source='tbr')
filename:视频文件名,只要是ffmpeg支持的视频文件如 .ogv, .mp4, .mpeg, .avi, .mov等都可以
has_mask:如果视频文件中包含遮罩该参数设置为“True”
audio:如果视频没有声音或者希望加载时不读取音频,则应该将audio设置为False
audio_buffersize:音频缓冲区大小,一般使用缺省值即可
target_resolution:设置为加载后需要变换到的分辨率,类型为列表或元组,第一个元素为分辨率的高,第二个为宽,如果高或宽有一个为None,则保持现有纵横比调整帧的大小。如果保持原分辨率不变,则不需要设置本参数或设置为None。如果设置了新的分辨率,则在调用ffmpeg 返回视频剪辑的帧之前会按新的分辨率调整帧的大小。这比使用转换为高分辨率流然后再调整分辨率会快很多
resize_algorithm:要改变加载后的视频分辨率,可以通过resize_algorithm指定调整分辨率的算法,缺省值为 “bicubic”,还可以是 “bilinear” 、"fast_bilinear"等。关于算法的更多信息请参考:https://ffmpeg.org/ffmpeg-scaler.html
audio_fps:声音的采样频率
audio_nbytes:采样的位数
verbose:是否在标准输出设备上显示处理信息
fps_source:从视频的元数据metadata哪个数据中获取fps值,默认设置为’tbr’,但可以设置为’fps’,这可能有助于导入慢动作视频,否则会弄糟。
返回值为VideoFileClip实例对象。
下面这段代码取1.mp4的分辨率作为2.mp4加载时的分辨率
import moviepy.editor as mpe
clip1 = mpe.VideoFileClip("1.mp4")
clipSize = clip1.size
clip2 = mpe.VideoFileClip("2.mp4",verbose=True,target_resolution=[clipSize[1],clipSize[0])
要从音频文件中加载音 频非常简单,使用AudioFileClip类的构造方法即可完成加载。其构造方法语法如下:__init__(self, filename, buffersize=200000, nbytes=2, fps=44100):
相关参数的含义除了filename指向音频文件外,其他与VideoFileClip对应参数含义一致,nbytes对应VideoFileClip的audio_nbytes。
返回值为一个AudioFileClip对象。
视频输出的方法为VideoFileClip的write_videofile方法,语法如下:
def write_videofile(self, filename, fps=None, codec=None,
bitrate=None, audio=True, audio_fps=44100,
preset="medium",
audio_nbytes=4, audio_codec=None,
audio_bitrate=None, audio_bufsize=2000,
temp_audiofile=None,
rewrite_audio=True, remove_temp=True,
write_logfile=False, verbose=True,
threads=None, ffmpeg_params=None,
logger='bar')
音频的输出调用AudioFileClip的write_audiofile方法,具体语法如下:
write_audiofile(self, filename, fps=None, nbytes=2, buffersize=2000,
codec=None, bitrate=None, ffmpeg_params=None,
write_logfile=False, verbose=True, logger='bar')
相关参数在前面几个方法中都有。
老猿关于PyQt的付费专栏《使用PyQt开发图形界面Python应用》只需要9.9元,本专栏《PyQt+moviepy音视频剪辑实战》文档的同样内容在付费专栏上也有相应内容,总体来说付费专栏介绍更详细或案例更多。本节内容对应付费专栏的《moviepy音视频剪辑:音视频的加载和输出》。如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。