【python代码实现改变视频播放速度】
Abstract短视频做demo太快没感脚?视频太短效果出不来??? 使用python代码更改一下视频流的播放速度,简单易用,美滋滋呀代码实现需要用到 cv2 、 python3 库,可以指定FPS( FramesPerSecond ,为画面每秒传输帧数)或者scale播放速度# 代码描述:改变视频流的播放速度## 创建时间: 2020-04-09# 创建人: 小武问道# 修改时间:# 版本:im
功能说明
短视频做demo太快没感脚?视频太短效果出不来???
使用python代码更改一下视频流的播放速度,简单易用,美滋滋呀
代码实现
需要用到 cv2 、 python3 库,可以指定FPS( FramesPerSecond ,为画面每秒传输帧数)或者scale播放速度
# 代码描述:改变视频流的播放速度
#
# 创建时间: 2020-04-09
# 创建人: Wupke
# 修改时间:
# 版本:
import cv2
from cv2 import VideoWriter, VideoWriter_fourcc
import argparse
def video_speed(video_root, out_root, fps=None, scale=1):
# 当fps和scale同时指定时,fps占主导地位"""
cap = cv2.VideoCapture(video_root) # 读入视频文件
video_width = int(cap.get(3)) # 获取视频流的宽度
video_height = int(cap.get(4)) # # 获取视频流的高度
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
# VideoWriter_fourcc对象为视频编解码器,不同参数确定的文件类型不同
if fps:
videoWriter = cv2.VideoWriter(out_root, fourcc, fps, (video_width, video_height))
else:
fps = int(cap.get(cv2.CAP_PROP_FPS) * scale)
# cv2.CAP_PROP_FPS: 为帧率值
videoWriter = cv2.VideoWriter(out_root, fourcc, fps, (video_width, video_height))
flag = cap.isOpened()
while (flag):
flag, frame = cap.read()
videoWriter.write(frame)
videoWriter.release()
# cv2.VideoCapture.release() 关闭视频文件
if __name__ == '__main__':
parser = argparse.ArgumentParser() # 创建一个argparse解析器
#添加参数——调用
parser.add_argument('--video_name', type=str, default=r'E:\Desktop\change_lane.mp4', help='original video name')
parser.add_argument('--result_name', type=str, default=r'E:\Desktop\result.mp4', help='result name')
parser.add_argument('--fps', type=int, default=None, help='Specify the playback frame rate') # 设定帧率
parser.add_argument('--scale', type=float, default='0.75', help='Change the original video speed') # 设定播放速度
opt = parser.parse_args() # 解析添加的参数
print(opt) # 打印出视频流的转换信息
video_speed(opt.video_name, opt.result_name, opt.fps, opt.scale)
解析助攻
① cv2.VideoCapture.get(propId)
是获取相机 / 视频的各种属性–常见函数** cv2.VideoCapture.get(propId) 这里就是cap.get(propId)访问视频的某些功能,其中propId是一个从0到18的数字,每个数字表示视频的属性(Property Identifier)
其中一些值可以使用 cap.set(propId,value) 进行修改,value是修改后的值。例如:通过cap.get(3)和cap.get(4)来检查帧的宽度和高度,默认的值是>640x480。
现修改为360x256,使用ret = cap.set(3, 360)和ret = cap.set(4, 256)>video_height = int(cap.get(4))② retval,image= cv2.VideoCapture.read([,image]) 抓取,解码并返回下一个视频帧。返回值为true表明抓取成功。该函数是组合了grab()和retrieve(),这是最方便的方法。如果没有帧,该函数返回false,并输出空图像
③ retval = cv2.VideoCapture.grab()从视频文件或相机中抓取下一帧。若为true则抓取成功。该函数主要用于多摄像头时。
2.VideoWriter_fourcc
对象为视频编解码器,不同参数确定的文件类型不同.fourcc意为四字符代码
Four-Character Codes),该编码由四个字符组成,下面是VideoWriter_fourcc
对象一些常用的参数,字符之间的顺序不能弄混:① cv2.VideoWriter_fourcc(‘I’, ‘4’, ‘2’, ‘0’),该参数是YUV编码类型,文件名后缀》为.avi
② cv2.VideoWriter_fourcc(‘P’, ‘I’, ‘M’, ‘I’),该参数是MPEG-1编码类型,文件名后缀为.avi
③ cv2.VideoWriter_fourcc(‘X’, ‘V’, ‘I’, ‘D’),该参数是MPEG-4编码类型,文件名后缀为.avi
④ cv2.VideoWriter_fourcc(‘T’, ‘H’, ‘E’, ‘O’),该参数是Ogg Vorbis,文件名后缀为.ogv
⑤cv2.VideoWriter_fourcc(‘F’, ‘L’, ‘V’, ‘1’),该参数是Flash视频,文件名后缀为.flv
⑥ cv2.VideoWriter_fourcc(‘m’, ‘p’, ‘4’, ‘v’),该参数是Mp4视频,文件名后缀为.mp4
3.argparse解析器
#argparse 模块是 Python 内置的一个用于命令项选项与参数解析的模块,
# argparse 模块可以让人轻松编写用户友好的命令行接口。通过在程序中定义好我们需要的参数,然后 argparse 将会从 sys.argv 解析出这些参数
# 使用为三个步骤:
# 1、创建一个解析器——创建
# ArgumentParser()
# 对象
# 2、添加参数——调用
# add_argument()
# 方法添加参数
# 3、解析参数——使用
# parse_args()
# 解析添加的参数
鸣谢:视觉测控与智能导航研究所大神 DevilXiao-CVer.
更多推荐
所有评论(0)