zoukankan      html  css  js  c++  java
  • python--openCV--视频处理

    编码格式

    视频容器中,一般有视频和音频数据,它们采取的编码方式不一样。

    视频常见的编码方式通常有: x264、h264、mpeg-4

    音频常见的编码方式通常有: mp3、AAC、flac

    编码的目的主要是为了高效存储和传输,如果你不采用编码压缩的话,那么视频可以看做是一系列的图片序列,体积会非常大

    FPS 帧率

    我们读初中物理时,大概了解过电影画面一秒钟 24 帧,其实对应的就是 24 fps,frame per second,有些手机有高速摄像的功能,原理就是能够 1 秒钟拍摄 960 张图片,然后用正常的速度放映出来,所以细节比较多。fps 越高,细节越好,体验也越好,但是文件容量也越高

     播放:

    import cv2
    cap = cv2.VideoCapture("1.mp4")  #打开视频
    while (1):
        ret, frame = cap.read()  # 读取一帧视频
        # ret 读取了数据就返回True,没有读取数据(已到尾部)就返回False
        # frame 返回读取的视频数据--一帧数据
        cv2.imshow("capture", frame)  # 显示视频帧
    
        if cv2.waitKey(40) & 0xFF == ord('q'):  # 等候40ms,播放下一帧,或者按q键退出
            break
    cap.release()  # 释放视频流
    cv2.destroyAllWindows() # 关闭所有窗口

    写入视频文件:

    import cv2
    
    cap = cv2.VideoCapture("1.mp4")
    ret, frame = cap.read()
    height=frame.shape[0]
    width=frame.shape[1]
    fps = cap.get(cv2.CAP_PROP_FPS)  #返回视频的fps--帧率
    size=cap.get(cv2.CAP_PROP_FRAME_WIDTH)  #返回视频的宽,等同于frame.shape[1]
    size1=cap.get(cv2.CAP_PROP_FRAME_HEIGHT)  #返回视频的高,等同于frame.shape[0]
    
    
    video = cv2.VideoWriter('2.mp4', cv2.VideoWriter_fourcc('m', 'p', '4', 'v'), fps, (width,height)) #创建视频流对象
    """
    参数1 即将保存的文件路径
    参数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
    参数3 为帧播放速率
    参数4 (width,height)为视频帧大小
    """
    while (1):
        ret, frame = cap.read()
        cv2.imshow("capture", frame)
        video.write(frame)   # 向视频文件写入一帧--只有图像,没有声音
    
        if cv2.waitKey(40) & 0xFF == ord('q'):  # 等候40ms,播放下一帧,或者按q键退出
            break
    cap.release()  # 释放视频流
    cv2.destroyAllWindows()   # 关闭所有窗口

  • 相关阅读:
    [NOIP2020]T2字符串匹配
    【CSGRound2】逐梦者的初心(洛谷11月月赛 II & CSG Round 2 T3)
    【CF1225E Rock Is Push】推岩石
    [HAOI2016]食物链
    求先序排列
    图书管理员
    合并果子
    联合权值
    和为0的4个值
    玩具谜题
  • 原文地址:https://www.cnblogs.com/liming19680104/p/12082429.html
Copyright © 2011-2022 走看看