技术标签: opencv保存视频 计算机视觉 图像处理 wave保存音频 ffmpeg合并音频
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()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray.shape
(720, 1280)
# 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)
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))
writer.write(gray)
(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)方法二
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()
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读取时却会报错。
ffmpeg -i 野狼disco.mp3 music.wav
注意: 如果电脑上没有ffmpeg,需要下载安装后,配置环境变量,才能正常使用。
import wave
music = wave.open(r'./music.wav', mode='rb')
music
<wave.Wave_read at 0x2c19300f548>
music.getparams()
_wave_params(nchannels=2, sampwidth=2, framerate=44100, nframes=2127744, comptype='NONE', compname='not compressed')
通道数 采样字节长度 采样频率 总帧数(总的采样数)
(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)
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()
import subprocess
cmd = 'ffmpeg -i new_music.wav -i star_gray.mp4 out.mp4'
subprocess.call(cmd)#返回‘0’就说明合并成功了
文章浏览阅读2.6k次,点赞5次,收藏13次。1)5.2.1弹出两次已连接或者未连接这是因为你同时打开了流量和WiFi,他就会发出两次广播。2)5.3.1中发送自定义广播问题标准广播未能弹出消息:Intent intent=new Intent("com.example.broadcasttest.MY_BROADCAST");sendBroadcast(intent);上述已经失效了。修改:Intent intent=new Intent("com.example.broadcasttest...._代码里的广播错误
文章浏览阅读249次。作者 |平名 阿里服务端开发技术专家导读:Kubernetes 作为云原生时代的“操作系统”,熟悉和使用它是每名用户的必备技能。本篇文章概述了容器服务 Kubernet..._k8知识库
文章浏览阅读923次。分别是etc/pear.conf,etc/php-fpm.conf, etc/php-fpm.d/www.conf,lib/php.ini。php8安装基本一致,因为一个服务期内有2个版本,所以注意修改不同的安装目录和端口号。可以直接使用sbin下的nginx命令启动服务。完成编译安装需要gcc支持,如果没有,使用如下命令安装。安装过程基本一致,下面是安装7.1.33的步骤。执行如下命令,检查已经安装的包和可安装的包。执行如下命令,检查已经安装的包和可安装的包。执行如下命令,检查已经安装的包和可安装的包。_tencentos-3.1
文章浏览阅读3.1w次,点赞21次,收藏75次。import urllib.requesturl = 'https://www.python.org'# 方式一response = urllib.request.urlopen(url)print(type(response)) # <class 'http.client.HTTPResponse'># 方式二request = urllib.request.Req..._urllib.request.urlopen(url)
文章浏览阅读1.5k次,点赞12次,收藏15次。如何用ChatGPT+GEE+ENVI+Python进行高光谱,多光谱成像遥感数据处理?
文章浏览阅读1.2k次。RS485总线常识 2010-10-12 15:56:36| 分类: 知识储备 | 标签:rs485 总线 传输 差分 |字号大中小 订阅RS485总线RS485采用平衡发送和差分接收方式实现通信:发送端将串行口的TTL电平信号转换成差分信号A,B两路输出,经过线缆传输之后在接收端将差分信号还原成TTL电平信号。由于传输线通常使用双绞线,又是差分传输,所_rs485 差分走綫間距
文章浏览阅读621次。u-boot、linux烧录_uboot制作
文章浏览阅读1.2w次,点赞10次,收藏44次。windos上git安装,git bash安装_64-bit git for windows setup.
文章浏览阅读196次。环形链表(算法java)的两种解决方法_java 实现环形链表
文章浏览阅读5.7k次。Airflow什么是 Airflow?Airflow 的架构Airflow 解决哪些问题一、docker-compose 安装airflow(postgres)1、创建启动文件airflow-docker-compose.yml.1.1、添加挂载卷,需要修改airflow-docker-compose.yml的位置2、创建本地配置文件airflow.cfg2.1、如果想修改WEB URL地址,需要修改airflow.cfg中以下两个地方3、之后up -d直接启动即可web访问地址:二、存储数据库更换post_airflow docker
文章浏览阅读28次。选题背景:随着社会的发展和教育的普及,高校教务管理系统在现代高等教育中扮演着至关重要的角色。传统的手工管理方式已经无法满足高校日益增长的规模和复杂的管理需求。因此,开发一套高效、智能的教务管理系统成为了当今高校管理的迫切需求。选题意义:高校教务管理系统的开发具有重要的意义和价值。首先,它可以提高高校教务管理的效率和准确性。通过自动化处理学生选课、排课、考试安排等繁琐的事务,大大减轻了教务人员的工作负担,提高了工作效率。同时,系统可以实时更新学生信息和课程信息,减少了数据错误和冗余,保证了管理的准确性
文章浏览阅读132次。首页>基础教程>常用类>常用 Integer类Java Integer转换double,float,int,long,stringjava中Integer类可以很方便的转换成double,float,int,long,string等类型,都有固定的方法进行转换。方法double doubleValue() //以 double 类型返回该 Integer 的值。flo..._java integet接收float类型的参数