广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python实现视频自动打码的示例代码
  • 316
分享到

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

2024-04-02 19:04:59 316人浏览 八月长安

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视频打码内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python实现视频自动打码的示例代码

本文链接: https://www.lsjlt.com/news/117214.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python实现视频自动打码的示例代码
    目录序言准备工作实现原理模块素材工具代码解析完整代码序言 我们在观看视频的时候,有时候会出现一些奇怪的马赛克,影响我们的观影体验,那么这些马赛克是如何精确的加上去的呢? 本次我们就...
    99+
    2022-11-10
  • Python怎么实现视频自动打码
    今天小编给大家分享一下Python怎么实现视频自动打码的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。准备工作环境咱们还是使用...
    99+
    2023-06-29
  • Python实现视频裁剪的示例代码
    目录前言环境依赖代码验证一下前言 本文提供将视频按照自定义尺寸进行裁剪的工具方法,一如既往的实用主义。 环境依赖 ffmpeg环境安装,可以参考文章:windows ffmpeg安装...
    99+
    2022-11-13
  • NodeJS实现视频转码的示例代码
    视频转码就是一个先解码,再编码的过程,从而将原来的视频转换成我们需要的视频。这种转换可能包括各式(mp4/avi/flv等)、分辨率、码率、帧率等。 传统的视频转码中,很常用的工具是FFmpeg。FFmp...
    99+
    2022-06-04
    示例 代码 视频
  • python+opencv实现视频抽帧示例代码
    1、数据集简述:        虽然有主流庞大的COCO、VOC数据集,但是科研人员仍需要特殊领域要求的数据集,所以采用人工实地采集的方式进行收集...
    99+
    2022-06-02
    python opencv视频抽帧 python opencv视频
  • Python实现视频画质增强的示例代码
    目录前言原理实现步骤拆分处理合成效果总结前言 前面通过文章 几行代码,实现Python捕获、播放和保存摄像头视频!给大家介绍了如何读取、播放和保存视频,后面又通过文章&nb...
    99+
    2022-11-10
  • Python实现视频下载与合成的示例代码
    目录模块使用开发环境案例实现1.明确需求2.代码实现步骤实现代码模块使用 requests >>> pip install requests (数据请求 第三方模块...
    99+
    2022-11-10
  • vue实现监控视频直播的示例代码
    要想使用videojs我们势必是需要安装videojs的, 而且在生产环境中我们也需要依赖它, 所以如下 npm:  npm install video.js -S npm inst...
    99+
    2022-11-13
  • Android视频悬浮窗口实现的示例代码
    前言 本文例子实现了点击显示悬浮窗口,同时窗口可播放视频,拖动位置,点击关闭及返回 APP 页面,通过例子来讲述悬浮窗口实现原理及细节处理,效果图如下所示: 悬浮窗口.gif...
    99+
    2022-06-06
    悬浮窗口 示例 Android
  • Vue实现自定义视频和图片上传的示例代码
    使用el-upload 上传视频总是报404错误,具体也不知道什么原因(如有知道的请评论告知,谢谢),去网上查了很多,代码写法确定是没有问题的,最后改为axios上传视频,...
    99+
    2023-05-17
    Vue视频 图片上传 Vue视频上传 Vue 图片上传
  • python绘制字符画视频的示例代码
    目录 读取视频转为字符动画已经11月了,不知道还有没有人看华强买瓜。。。要把华强卖瓜做成字符视频,总共分为三步 读取视频 把每一帧转为字符画 把字...
    99+
    2022-11-12
  • python+appium实现自动化测试的示例代码
    目录1.什么是Appium2.启动一个app自动化程序的步骤3.appium服务介绍4. appium客户端使用5.adb的使用 6.Appium启动过程分析1....
    99+
    2022-11-12
  • Python实现自动整理文件的示例代码
    目录一、前言二、遍历文件三、移动文件四、自动整理文件1、将图片集中存放2、同步整理文件3、获取文件属性一、前言 今天我们就带大家来实现一下文件自动整理的操作。在我们日常生活中,文件总...
    99+
    2022-11-11
  • python实现自动抢课脚本的示例代码
    目录自动抢课脚本使用手册1.准备工作2.配合使用py脚本和xlsx文件3.auto_get_lesson_pic_recognize功能介绍4.坐标版本(不建议使用)5.代码自动抢课...
    99+
    2022-11-12
  • Python实现自动整理表格的示例代码
    目录前言原理目标实现运行效果前言 今天,在工作的时候,我的美女同事问我有没有办法自动生成一个这样的表格: 第一列是院校+科目,第二列是年份,第三列是数量。 这张表格是基于这一文件夹...
    99+
    2023-03-02
    Python自动整理表格 Python整理表格 Python表格
  • PHP实现腾讯云视频加密的示例代码
    目录前言实现加密1、打开腾讯云视频开启key防盗链2、导入csv文件到数据库3、加密前言 上传到腾讯云上面的视频,如何实现防盗链? 当我们的视频放到,腾讯云上面,播放的时候如何实现指...
    99+
    2022-11-13
  • C#实现文字视频生成器的示例代码
    目录前言实现功能开发环境实现代码实现效果前言 简单的描述下写这个软件的背景吧。之前短视频平台很火的时候,相信很多人都想进去分一杯羹,俺当然也不能免俗,但是人丑家穷又没才艺,咋办呢?看...
    99+
    2022-11-13
  • Python实现抓取腾讯视频所有电影的示例代码
    目录运行环境实现目的与思路目的思路完整代码视频缓存ts文件实现效果运行环境 IDE丨pycharm版本丨Python3.6系统丨Windows 实现目的与思路 目的 实现对腾讯视频目...
    99+
    2022-11-10
  • python实现自幂数的示例代码
    1、什么是自幂数? 前文介绍过 python 实现水仙花数,其实水仙花数为自幂数的一种,即,3位自幂数。 自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它...
    99+
    2022-11-11
  • ssm实现视频的上传与播放的示例代码
    实现的功能: 1:实现视频的上传与播放。 2:使用shiro框架进行登录注册。 3:视频分页展示在页面上。 4:视频简介 5:视频评论 6:发表评论 简单介绍一下大概实现的思路: 首...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作