1. 视频的读取
主要使用python的cv2
主要介绍:视频帧读取、视频宽高读取、FPS读取
import cv2 as cv
vc = cv.VideoCapture('12.mp4') # 读入视频文件
fps=vc.get(cv.CAP_PROP_FPS) #获取fps
size = (int(vc.get(cv.CAP_PROP_FRAME_WIDTH)),int(vc.get(cv.CAP_PROP_FRAME_HEIGHT))) #获取宽高
rval, frame = vc.read()
while(rval):
rval, frame = vc.read() # 循环读取每一视频帧
2. 视频的保存
1)PIL
给图片视频上添加矩形框、文字
from PIL import Image, ImageFont, ImageDraw
img_draw= Image.open(filename) #返回一个Image对象
img_draw.show()
draw = ImageDraw.Draw(img_draw)
draw.rectangle((x,y,h,w), width=5)
fontpath = "font/simsun.ttc"
font = ImageFont.truetype(fontpath, 32)
draw.text((x,y)), '你好', font=font, fill=(255, 255, 255))
draw.save(outfile)
2) CV2
将所需的视频帧进行保存成视频形式
提取音频形式
将视频配上音频
import subprocess
import cv2 as cv
def video2mp3(file_name):
"""
将视频转为音频
:param file_name: 传入视频文件的路径
:return:
"""
outfile_name = file_name.split('.')[0] + '.mp3'
subprocess.call('ffmpeg -i ' + file_name
+ ' -f mp3 ' + outfile_name, shell=True)
def video_add_mp3(file_name, mp3_file):
"""
视频添加音频
:param file_name: 传入视频文件的路径
:param mp3_file: 传入音频文件的路径
:return:
"""
outfile_name = file_name.split('.')[0] + '-txt.mp4'
subprocess.call('ffmpeg -i ' + file_name
+ ' -i ' + mp3_file + ' -strict -2 -f mp4 '
+ outfile_name, shell=True)
def save_new_video(file_name):
""" 将视频帧保存
:param file_name: 传入视频文件的路径
:return:
"""
outfile_name = 'new_'+file_name.split('.')[0] + '.mp4'
vc = cv.VideoCapture(file_name)
interval=vc.get(cv.CAP_PROP_FPS)
fourcc = cv.VideoWriter_fourcc(*"mp4v")
size = (int(vc.get(cv.CAP_PROP_FRAME_WIDTH)),int(vc.get(cv.CAP_PROP_FRAME_HEIGHT)))
out = cv.VideoWriter(outfile_name, fourcc, interval, size)
rval, frame = vc.read()
while(rval):
out.write(frame)
rval, frame = vc.read()
vc.release()
out.release()
if __name__ == '__main__':
# video2mp3(file_name='MyVideo_3.mp4')
#save_new_video(file_name='MyVideo_3.mp4')
video_add_mp3(file_name='new_MyVideo_3.mp4', mp3_file='MyVideo_3.mp3')
3. 视频的裁剪 moviepy
from moviepy.editor import *
my_clip = VideoFileClip(videoPath)
# 按照时间裁剪视频,单位:秒
my_clip.subclip(start_time, end_time).write_videofile(out_video_path)
# 按照画面裁剪视频
my_clip.crop(x1=0,y1=0,x2=360,y2=480).write_videofile(out_video_path)
# 关闭视频流
my_clip.reader.close()
my_clip.audio.reader.close_proc()
Reference: