赞
踩
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’就说明合并成功了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。