Python+OpenCV调整视频分辨率


写在前面

今天帮老哥处理视频的时候发现分辨率不一致,需要处理一下,可以借助python+opencv来实现,很方便。

获取视频信息

import cv2
#加载视频
videoCapture = cv2.VideoCapture('video.mp4')
#读取视频fps(帧率)
fps = videoCapture.get(cv2.CAP_PROP_FPS)
#读取视频的宽度
Frame_Width = videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)
#读取视频的高度
Frame_Height = videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)
#读取视频总帧数
FrameNumber = videoCapture.get(cv2.CAP_PROP_FRAME_COUNT)
#获取视频时长,单位为秒
video_time = FrameNumber / fps
#输出信息
print("time:{}s\nfps:{}\nWidth:{}\nHeight:{}\nNumber:{}".format(video_time,fps,Frame_Width,FrameHeight,FrameNumber))

更改帧率

import cv2

videoCapture = cv2.VideoCapture('video.mp4')
#获取原视频帧率
fps = videoCapture.get(cv2.CAP_PROP_FPS)
#读取视频总帧数
FrameNumber = videoCapture.get(cv2.CAP_PROP_FRAME_COUNT)
#预保存的分辨率
size = (1920, 1080)
#创建videoWriter对象
videoWriter = cv2.VideoWriter('video_opencv.mp4', cv2.VideoWriter_fourcc('X', 'V', 'I', 'D'), fps, size)
#对每一帧进行处理
for i in range(int(FrameNumber)):
    #逐帧读取
    success, frame = videoCapture.read()
    if success:
        #利用resize方法处理分辨率并写入videoWriter对象,这里的大小要跟上面的size保持一致
        frame = cv2.resize(frame, (1920, 1080))
        videoWriter.write(frame)
    else:
        print('end')
        break
#释放对象,不然可能无法在外部打开
videoWriter.release()

合并音频

opencv处理过的视频是无声的,我们可以用moviepy模块进行混流

from moviepy.editor import VideoFileClip,AudioFileClip
#读取原视频和处理过的视频
video1 = VideoFileClip('video.mp4')
video2 = VideoFileClip('video_opencv.mp4')
#从原视频获取声音
audio = video1.audio   #.volumex(0.5)
#为处理过的视频添加声音
new_video = video2.set_audio(audio)
#保存新视频
new_video.to_videofile('new_video.mp4',remove_temp = True)

写在后面

以上,权当笔记。