DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录.
  • DmozDir.org
DMOZ目录快速登录入口-免费收录各类优秀网站的中文网站目录.由人工编辑,并提供网站分类目录检索及地区分类目录检索,是站长免费推广网站的有力平台!

图像处理之opencv保存视频+wave保存音频+ffmpeg合并

  • 图像处理之opencv保存视频+wave保存音频+ffmpeg合并

  • 已被浏览: 69 次2020年09月12日    来源:  https://www.dmozdir.org/
  • 文章目录1、opencv保存视频1.1、读取并展示视频1.2、灰色处理1.3、调整视频大小——分辨率1.3.1、查看视频的分辨率1.3.2、调整视频的分辨率1.3、保存视频1.3.1、设置保存对象参数1.3.2、调用写入函数保存1.4、获取

    文章目录

    • 1、opencv保存视频
      • 1.1、读取并展示视频
      • 1.2、灰色处理
      • 1.3、调整视频大小——分辨率
        • 1.3.1、查看视频的分辨率
        • 1.3.2、调整视频的分辨率
      • 1.3、保存视频
        • 1.3.1、设置保存对象参数
        • 1.3.2、调用写入函数保存
      • 1.4、获取视频自身的宽高
      • 1.5、保存视频源码汇总
    • 2、wave保存音频
      • 2.1、读入音频
      • 2.2、ffmpeg转换格式
      • 2.3、重新读入音频
      • 2.4、获取音频参数
      • 2.5、音频切片
      • 2.6、将音频写入文件夹
    • 3、音频和无声视频合并

    1、opencv保存视频

    1.1、读取并展示视频

    import cv2
    import numpy as np
    
    cap = cv2.VideoCapture('./vod.mp4')#加载视频
    while True:
        flag, frame = cap.read()#以图片方式读取。flag为状态, frame为图片
        if flag == False:#结束退出机制
            break
        cv2.imshow('video', frame)
        if ord('q') ==cv2.waitKey(40):#键盘退出和等待
            break
    #释放资源
    cv2.destroyAllWindows()
    cap.release()
    



    1.2、灰色处理

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    



    1.3、调整视频大小——分辨率

    1.3.1、查看视频的分辨率

    gray.shape
    
    (720, 1280)
    
    • 返回的数据为高720px,宽1280px。

    1.3.2、调整视频的分辨率

    • 黑白是二维数据,不能直接cv2.write方法
    # 1、先要设置好要转化的大小
    gray = cv2.resize(gray, dsize = (480, 270))
    
    # 2、将它的形状进行反转
    gray = gray.reshape(270, 480, 1)
    
    # 3、concatenate,级联,将多个ndarray数组合并到一起
    np.concatenate([gray, gray, gray],axis = -1)
    



    1.3、保存视频

    1.3.1、设置保存对象参数

    1. 视频保存地址
    2. 视频编码格式
    3. 视频采样频率
    4. 视频的尺寸
    writer = cv2.VideoWriter('./star_gray.avi', cv2.VideoWriter_fourcc('M','P','4','1'), 24, (w, h))
    writer = cv2.VideoWriter('./star_gray.flv', cv2.VideoWriter_fourcc('F','L','V','1'), 24, (w, h))
    writer = cv2.VideoWriter('./star_gray.mp4', cv2.VideoWriter_fourcc('M','P','4','1'), 24, (w, h))
    

    1.3.2、调用写入函数保存

    writer.write(gray)
    

    1.4、获取视频自身的宽高

    (1)方法一

    cap = cv2.VideoCapture('./vod.mp4')
    w = int(cap.get(propId = cv2.CAP_PROP_FRAME_WIDTH))
    h  = int(cap.get(propId = cv2.CAP_PROP_FRAME_HEIGHT))
    print ("该视频的宽=%s,高=%s"%(w,h))
    
    该视频的宽=1280,=720
    

    (2)方法二

    1.5、保存视频源码汇总

    import cv2
    import numpy as np
    
    #设置保存视频的参数
    w = 480
    h = 270
    writer = cv2.VideoWriter('./star_gray.mp4', cv2.VideoWriter_fourcc('M','P','4','1'), 24, (w, h))
    
    cap = cv2.VideoCapture('./vod.mp4')#加载视频
    while True:
        flag, frame = cap.read()
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)#黑白是二维数据,不能直接cv2.write方法    
        #调整像素大小
        gray = cv2.resize(gray, dsize = (480, 270))
        gray = gray.reshape(270, 480, 1)
        #concatenate,级联,将多个ndarray数组合并到一起
        np.concatenate([gray, gray, gray],axis = -1)
        writer.write(gray)#保存视频
        cv2.imshow('video', gray)
        if ord('q') == cv2.waitKey(40):
            break
    #释放资源        
    cv2.destroyAllWindows()
    cap.release()
    writer.release()
    


    2、wave保存音频

    2.1、读入音频

    import wave
    music = wave.open(r'./铃声-野狼disco-铃声版.wav', mode='rb')
    music
    
    ---------------------------------------------------------------------------
    Error                                     Traceback (most recent call last)
    <ipython-input-23-3931b967d1fa> in <module>
          1 import wave
    ----> 2 music = wave.open(r'./铃声-野狼disco-铃声版.wav', mode='rb')
          3 music
    
    Error: file does not start with RIFF id
    

    总结: wave只能保存wav,上面的wav是我直接用mp3改的格式,虽然在播放器可以播放,但是wave读取时却会报错。

    2.2、ffmpeg转换格式

    • 直接在当前文件夹进入控制台,使用cmd命令
    ffmpeg -i 野狼disco.mp3 music.wav
    

    注意: 如果电脑上没有ffmpeg,需要下载安装后,配置环境变量,才能正常使用。

    2.3、重新读入音频

    import wave
    music = wave.open(r'./music.wav', mode='rb')
    music
    
    <wave.Wave_read at 0x2c19300f548>
    

    2.4、获取音频参数

    music.getparams()
    
    _wave_params(nchannels=2, sampwidth=2, framerate=44100, nframes=2127744, comptype='NONE', compname='not compressed')
    
    • 返回值分别对应 通道数 采样字节长度 采样频率 总帧数(总的采样数)

    2.5、音频切片

    (1)转化音频数据形状

    data = music.readframes(nframes=2127744)
    data = np.frombuffer(data, dtype = np.int16)#音频的格式通常都是16位;buffer缓冲器
    data = data.reshape(2127744, 2)
    data.shape
    
    (2127744, 2)
    

    (2)切片

    part1 = data[:15*44100]#切片,切出前15秒,44100是framerate=44100
    part1
    
    array([[   0,    0],
           [   0,    0],
           [   0,    0],
           ...,
           [1652, 8927],
           [1407, 7052],
           [1355, 5892]], dtype=int16)
    

    2.6、将音频写入文件夹

    fp = wave.Wave_write('./new_music.wav')
    #设置fp的参数
    fp.setframerate(44100)
    fp.setnframes(37*44100)
    fp.setnchannels(2)
    fp.setsampwidth(2)
    
    #写入目录
    fp.writeframes(part1.tobytes())
    fp.close()
    

    3、音频和无声视频合并

    import subprocess
    cmd = 'ffmpeg -i new_music.wav -i star_gray.mp4 out.mp4'
    subprocess.call(cmd)#返回‘0’就说明合并成功了
    
    • subprocess库可以控制cmd命令到控制台执行
    • 合并前需要安装ffmpeg并配置环境变量

    以上信息来源于网络,如有侵权,请联系站长删除。

    TAG:图像处理 音频 视频

  • 上一篇:【Leetcode】494. 目标和(递归)
  • 与“图像处理之opencv保存视频+wave保存音频+ffmpeg合并”相关的资讯
  • 使用Python+OpenCV进行图像处理之入门教程
  • 大流行杀死家庭视频;链条关闭剩余的商店
  • 狂神Docker视频学习笔记(基础篇)
  • 基于Opencv的简单图像处理
  • 支持国标GB28181协议的视频大数据/视频云计算平台EasyGBS/EasyCVR能在哪些领域发挥作用?