使用Python-Opencv+ffmpeg.exe对视频进行高斯模糊+边缘检测

程序功能

  1. 从控制台读入 取待处理的视频(.mp4) 位置
  2. 从控制台读入 ffmpeg.exe 位置
  3. 程序将会在视频同目录下生成imgs_cutting_by_opencv目录,存放切帧及图像处理后的图片
  4. 随后通过subprocess库执行命令,将处理后的图片重新合成新视频(fps=24),新视频会在原视频同目录下生成
import cv2
import os
import shutil
import subprocess

def preprocess(raw_video_path,ffmpeg_path):
    '''
    对文件路径进行预处理
    '''
    raw_video_path=raw_video_path.replace('\\','/') # 替换 \
    ffmpeg_path=ffmpeg_path.replace('\\','/')
        
    t_path=raw_video_path.split('/')[:-1] # 获取视频所在目录列表
    video_name=raw_video_path.split('/')[-1] # 获取视频文件名
    video_path='/'.join(t_path)+"/" # 生成视频所在文件目录
    
    image_save=video_path+"imgs_cutting_by_opencv/" # 切割后图片所在的目录
    
    if not os.path.exists(image_save):
        os.mkdir(image_save) # 不存在就新建该目录
    else: # 存在就清空该目录重建
        shutil.rmtree(image_save)
        os.mkdir(image_save)
        
    print("图片文件目录已生成")
        
    return video_path, video_name, image_save, ffmpeg_path

def gaussianblur_and_Canny(video_path,video_name,image_save,ffmpeg_path):
    '''
    对视频切帧后进行高斯模糊+边缘检测
    使用ffmpeg将处理后的图片合成新视频
    '''
    cap=cv2.VideoCapture(video_path+video_name)
    video_frame_count=cap.get(cv2.CAP_PROP_FRAME_COUNT)
    
    # 图片处理并保存图片
    for i in range(int(video_frame_count)):
        _,img = cap.read()
        img = cv2.GaussianBlur(img, (3, 3), 0)
        # 阈值参数可以进行调整
        img_canny = cv2.Canny(img, 30, 100)
        cv2.imwrite(image_save+'image{}.jpg'.format(i), img_canny)
    # 切换工作路径到原视频目录
    os.chdir(video_path)
    # 利用ffmpeg命令合并图片,fps设置为24
    cmd=ffmpeg_path+" -i ./imgs_cutting_by_opencv/image%d.jpg -r 24 -pix_fmt yuv420p output.mp4"
    p = subprocess.Popen(cmd, shell=True, stdout=None, stderr=None)
    stdout, stderror = p.communicate()
    
    if stdout == None and stderror == None: print("视频已生成:"+video_path+"output.mp4")
    else: print(stderror)
    
if __name__=="__main__":
    raw_video_path = input( "输入视频位置(如C:\\Users\\Desktop\\xx.mp4):" )
    ffmpeg_path = input( "输入 ffmpeg.exe 文件位置(如C:\\Users\\Desktop\\bin\\ffmpeg.exe):" )
    video_path, video_name, image_save, ffmpeg_path = preprocess(raw_video_path,ffmpeg_path)
    gaussianblur_and_Canny(video_path, video_name, image_save, ffmpeg_path)

使用说明

需要输入 MP4文件 和 ffmpeg.exe 的路径,然后不出意外就能得到处理后的视频了
在这里插入图片描述

效果预览

原视频
在这里插入图片描述
处理后的视频
在这里插入图片描述

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值