Python实现视频自动打码的示例代码

目录
  • 序言
  • 准备工作
    • 实现原理
    • 模块
    • 素材工具
  • 代码解析
  • 完整代码

序言

我们在观看视频的时候,有时候会出现一些奇怪的马赛克,影响我们的观影体验,那么这些马赛克是如何精确的加上去的呢?

本次我们就来用Python实现对视频自动打码!

准备工作

环境咱们还是使用 Python3.8 和 pycharm2021 即可

实现原理

将视频分为音频和画面;

画面中出现人脸和目标比对,相应人脸进行打码;

处理后的视频添加声音;

模块

手动安装一下 cv2 模块 ,pip install opencv-python 安装

素材工具

我们需要安装一下 ffmpeg 音视频转码工具

代码解析

导入需要使用的模块

import cv2
import face_recognition  # 人脸识别库  99.7%    cmake  dlib  face_recognition
import subprocess

将视频转为音频

def video2mp3(file_name):
    """
    :param file_name: 视频文件路径
    :return:
    """
    outfile_name = file_name.split('.')[0] + '.mp3'
    cmd = 'ffmpeg -i ' + file_name + ' -f mp3 ' + outfile_name
    print(cmd)
    subprocess.call(cmd, shell=False)

打码

def mask_video(input_video, output_video, mask_path='mask.jpg'):
    """
    :param input_video: 需打码的视频
    :param output_video: 打码后的视频
    :param mask_path: 打码图片
    :return:
    """
    # 读取图片
    mask = cv2.imread(mask_path)
    # 读取视频
    cap = cv2.VideoCapture(input_video)
    # 视频  fps  width  height
    v_fps = cap.get(5)
    v_width = cap.get(3)
    v_height = cap.get(4)

    # 设置写入视频参数  格式MP4
    # 画面大小
    size = (int(v_width), int(v_height))
    fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')

    # 输出视频
    out = cv2.VideoWriter(output_video, fourcc, v_fps, size)

    # 已知人脸
    known_image = face_recognition.load_image_file('tmr.jpg')
    biden_encoding = face_recognition.face_encodings(known_image)[0]

    cap = cv2.VideoCapture(input_video)

    while (cap.isOpened()):
        ret, frame = cap.read()
        if ret:
            # 检测人脸
            # 人脸区域
            face_locations = face_recognition.face_locations(frame)

            for (top_right_y, top_right_x, left_bottom_y, left_bottom_x) in face_locations:
                print((top_right_y, top_right_x, left_bottom_y, left_bottom_x))
                unknown_image = frame[top_right_y - 50:left_bottom_y + 50, left_bottom_x - 50:top_right_x + 50]
                if face_recognition.face_encodings(unknown_image) != []:
                    unknown_encoding = face_recognition.face_encodings(unknown_image)[0]

                    # 对比人脸
                    results = face_recognition.compare_faces([biden_encoding], unknown_encoding)
                    # [True]
                    # 贴图
                    if results == [True]:
                        mask = cv2.resize(mask, (top_right_x - left_bottom_x, left_bottom_y - top_right_y))
                        frame[top_right_y:left_bottom_y, left_bottom_x:top_right_x] = mask
            out.write(frame)

        else:
            break

音频添加到画面

def video_add_mp3(file_name, mp3_file):
    """
    :param file_name: 视频画面文件
    :param mp3_file:  视频音频文件
    :return:
    """
    outfile_name = file_name.split('.')[0] + '-f.mp4'
    subprocess.call('ffmpeg -i ' + file_name + ' -i ' + mp3_file + ' -strict -2 -f mp4 ' + outfile_name, shell=False)

完整代码

import cv2
import face_recognition  # 人脸识别库  99.7%    cmake  dlib  face_recognition
import subprocess

def video2mp3(file_name):

    outfile_name = file_name.split('.')[0] + '.mp3'
    cmd = 'ffmpeg -i ' + file_name + ' -f mp3 ' + outfile_name
    print(cmd)
    subprocess.call(cmd, shell=False)

def mask_video(input_video, output_video, mask_path='mask.jpg'):

    # 读取图片
    mask = cv2.imread(mask_path)
    # 读取视频
    cap = cv2.VideoCapture(input_video)
    # 视频  fps  width  height
    v_fps = cap.get(5)
    v_width = cap.get(3)
    v_height = cap.get(4)

    # 设置写入视频参数  格式MP4
    # 画面大小
    size = (int(v_width), int(v_height))
    fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')

    # 输出视频
    out = cv2.VideoWriter(output_video, fourcc, v_fps, size)

    # 已知人脸
    known_image = face_recognition.load_image_file('tmr.jpg')
    biden_encoding = face_recognition.face_encodings(known_image)[0]

    cap = cv2.VideoCapture(input_video)

    while (cap.isOpened()):
        ret, frame = cap.read()
        if ret:
            # 检测人脸
            # 人脸区域
            face_locations = face_recognition.face_locations(frame)

            for (top_right_y, top_right_x, left_bottom_y, left_bottom_x) in face_locations:
                print((top_right_y, top_right_x, left_bottom_y, left_bottom_x))
                unknown_image = frame[top_right_y - 50:left_bottom_y + 50, left_bottom_x - 50:top_right_x + 50]
                if face_recognition.face_encodings(unknown_image) != []:
                    unknown_encoding = face_recognition.face_encodings(unknown_image)[0]

                    # 对比人脸
                    results = face_recognition.compare_faces([biden_encoding], unknown_encoding)
                    # [True]
                    # 贴图
                    if results == [True]:
                        mask = cv2.resize(mask, (top_right_x - left_bottom_x, left_bottom_y - top_right_y))
                        frame[top_right_y:left_bottom_y, left_bottom_x:top_right_x] = mask
            out.write(frame)

        else:
            break

def video_add_mp3(file_name, mp3_file):

    outfile_name = file_name.split('.')[0] + '-f.mp4'
    subprocess.call('ffmpeg -i ' + file_name + ' -i ' + mp3_file + ' -strict -2 -f mp4 ' + outfile_name, shell=False)

if __name__ == '__main__':
    # 1.
    video2mp3('cut.mp4')
    # 2.
    mask_video(input_video='cut.mp4',output_video='output.mp4')
    # 3.
    video_add_mp3(file_name='output.mp4',mp3_file='cut.mp3')

兄弟们,快去试试吧!

到此这篇关于Python实现视频自动打码的示例代码的文章就介绍到这了,更多相关Python视频打码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于Python实现丝滑换装视频剪辑

    目录 软硬件.技能需求 颜色变换说明 Python 应用插件 思路流程 MiVOS 模块交互式 看到人家用PR什么编辑软件做这种丝滑一键换装的视频,自己也想尝试一下.不过PR这破玩意太难用了,还不如敲代码来的省事. 最开始想用 moviepy 的 moviepy.video.fx.all.mask_color 蒙版处理,发现还要结合目标识别这个复杂度就有点上头了.然后换了一个思路进行处理之后就算成功了吧.来看看成品效果先. python 丝滑换衣算法演示 还是老套路先说机器配置,机器配置不够的玩

  • Python 图片视频模糊化实现案例

    目录 前言 环境依赖 代码 前言 本文主要分享一个可以将图片或者视频模糊化的工具代码.技术路线主要是使用ffmpeg滤镜. 环境依赖 ffmpeg环境部署,依赖包下载,给大家介绍一个调用ffmpeg比较好的库ffmpy.安装命令: pip install ffmpy -i https://pypi.douban.com/simple 代码 不废话上代码. #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/11/18 0:06

  • Python提取视频帧图片实例代码

    为了从视频中提取每一帧图片,编写Python脚本实现该功能 video_path为指定的视频路径 interval为指定分割视频是是否跳帧,默认不跳帧,即全部分割 width, height 为指定对分割帧图片调整大小,默认不调整 该脚本自动对帧图片编号,设置为7位编码,最多可分割9999999帧图片,即92小时的30FPS视频 # !/usr/bin/env python # -*- coding: utf-8 -*- # ===================================

  • Python实现视频裁剪的示例代码

    目录 前言 环境依赖 代码 验证一下 前言 本文提供将视频按照自定义尺寸进行裁剪的工具方法,一如既往的实用主义. 环境依赖 ffmpeg环境安装,可以参考文章:windows ffmpeg安装部署 本文主要使用到的不是ffmpeg,而是ffprobe也在上面这篇文章中的zip包中. ffmpy安装: pip install ffmpy -i https://pypi.douban.com/simple 代码 不废话,上代码. #!/user/bin/env python # coding=utf

  • Python实现视频自动打码的示例代码

    目录 序言 准备工作 实现原理 模块 素材工具 代码解析 完整代码 序言 我们在观看视频的时候,有时候会出现一些奇怪的马赛克,影响我们的观影体验,那么这些马赛克是如何精确的加上去的呢? 本次我们就来用Python实现对视频自动打码! 准备工作 环境咱们还是使用 Python3.8 和 pycharm2021 即可 实现原理 将视频分为音频和画面: 画面中出现人脸和目标比对,相应人脸进行打码: 处理后的视频添加声音: 模块 手动安装一下 cv2 模块 ,pip install opencv-pyt

  • Python之qq自动发消息的示例代码

    准备:pip install win32gui 可能遇到的麻烦: No module named 'win32gui' 的解决方法(踩坑之旅) 源码: import win32gui import win32con import win32clipboard as w import time def send(name, msg): # 打开剪贴板 w.OpenClipboard() # 清空剪贴板 w.EmptyClipboard() # 设置剪贴板内容 w.SetClipboardData(

  • Python实现视频下载与合成的示例代码

    目录 模块使用 开发环境 案例实现 1.明确需求 2.代码实现步骤 实现代码 模块使用 requests >>> pip install requests (数据请求 第三方模块) re # 正则表达式 去匹配提取数据 json 开发环境 Python 3.8 解释器 Pycharm 2021.2 版本 建议 win + R 输入cmd 输入安装命令 pip install 模块名 如果出现爆红 可能是因为 网络连接超时 切换国内镜像源 案例实现 1.明确需求 采集内容, 先分析一个视频

  • python实现自动打卡的示例代码

    自己也百度了一下,然后写的,分为了三个部分,见三段代码 代码:主程序代码 import timefrom selenium import webdriverfrom private_info import * import send_mail def signin_and_email(): #谷歌浏览器驱动的位置 driver=webdriver.Chrome("D:/...../chromedriver") driver.get('http://****.edu.cn/login.p

  • python实现串口自动触发工作的示例

    最近在一个python工具中需要实现串口自动触发工作的功能,之前只在winform上面实现,今天使用python试试.这里简单记一下: 首先用wxpython实现一个Button,点击事件绑定函数OnButtonAutoStopAll self.button_autoStopAll = wx.Button(id=wxID_FRAME1BUTTONAUTOSTARTALL, label=u'AUTO STOP ALL', name='button_autoStop', parent=self.st

  • Python实现自动签到脚本的示例代码

    实训课期间忙里偷闲的学习了python的selenium包,唯一一点不好是要自己去查英文文档,明摆着欺负我这种英语不好的,想着用谷歌翻译一下,代码也给我翻译了,不知道是几个意思. 大二的时候就让我们做自动签到脚本,说用JS可以写一下,但是说着说着就给忘了,现在学了python后又想起来要写一个自动签到的脚本,不得不佩服python的强大,短短二十行左右的代码就实现了,虽然说脚本还需要手动操作去运行,以后还是可以慢慢优化的. 开发环境 : Windows10 + sublime(编辑器装好pyth

  • python实现图书馆抢座(自动预约)功能的示例代码

    脚本功能 系统开放座位时快速预约指定位置 可以设置预约的时间段 运行以后会一直帮你抢,需要手动停止 即使遇到更强的脚本自动帮抢下一个座位 实现 首先解决登录问题,通过F12找出登录请求包,分析对比一下包可以发现一般只有用户名和密码这个参数是变化的,然后用requests.session()的实例化去请求登录接口,登录成功. 然后预约座位抓一下包,分析包找到变化的关键的参数,一般情况下关键参数只有座位id.开始时间.结束时间,其他的参数一股脑照搬就行了,接下来用刚刚登录成功的那个requests.

  • Python实现钉钉/企业微信自动打卡的示例代码

    每天急匆匆赶地铁上班的时候总会一不小心就会忘记打卡,尤其是软件打卡,那有没有什么办法可以解决忘打卡的问题呢?今天给大家推荐一下一款神器,利用Python实现定时自动打卡. 1 前期工具准备 不用说的Python 一部24小时可以放公司的安卓手机或电脑安装模拟器 ADB工具 2 ADB的安装配置 去下载ADB安装包,安装后在环境变量Path中添加目录 2.1 UIautomator2的安装 # 安装 uiautomator2(PC端) pip3 install -U uiautomator2 3

  • 三行代码使用Python将视频转Gif的方法示例

    目录 一.前言 二.教程 1. 安装必备库moviepy 2. 写入代码 3. 转换效果 4. GIF很大的解决方案 5. 截取视频长度转换 5. 指定转换后的图片大小(分辨率) 一.前言 很多网站提供视频转GIF的功能,但要么收费要么有广告 实际上我们通过python,几行代码就能够实现视频转gif 二.教程 1. 安装必备库moviepy pip install moviepy -i https://pypi.tuna.tsinghua.edu.cn/simple 2. 写入代码 from

  • python实现自动抢课脚本的示例代码

    目录 自动抢课脚本使用手册 1.准备工作 2.配合使用py脚本和xlsx文件 3.auto_get_lesson_pic_recognize功能介绍 4.坐标版本(不建议使用) 5.代码 自动抢课脚本使用手册 @danteking dating from 2021.12.7 and last updating at 2021.12.8 gitee仓库 github仓库 借助pyautogui库,我们可以轻松地控制鼠标.键盘以及进行图像识别,实现自动抢课的功能 1.准备工作 我们在仓库里提供了2个

随机推荐