当我们在观看视频的时候,尤其是国内的综艺出现的某个不该出现的人脸,就出现了一些奇怪的马赛克,影响我们的观影体验,那么这些马赛克是如何精确的加上去的呢?有什么方法批量实现呢?
本次我们就来用Python实现对视频自动打码!

准备工作

环境使用 Python3.8 和 pycharm2021

实现原理

  1. 将视频分为音频和画面;
  2. 画面中出现人脸和目标比对,相应人脸进行打码;
  3. 处理后的视频添加声音;

模块

手动安装一下 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_nameprint(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  heightv_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] = maskout.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 subprocessdef video2mp3(file_name):outfile_name = file_name.split('.')[0] + '.mp3'cmd = 'ffmpeg -i ' + file_name + ' -f mp3 ' + outfile_nameprint(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  heightv_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] = maskout.write(frame)else:breakdef 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学习Q群:1020465983,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),
包括我自己整理的一份2021最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

视频怎么批量打码?Python实现视频自动打码分享相关推荐

  1. python语言编程基础视频_网络编程-5_ Python系列视频(一)——Python语言基础_Python视频-51CTO学院...

    通过学习,对Python有一定的了解,学习Python语法,可以使用Python原生语言开发项目.对于Python的应用于开发有一个系统的认知,对于未来的发展方向有清晰的认识.主要知识点包括基本语法. ...

  2. 竖版视频怎么批量转换成横版视频

    如果我们在发布视频素材的过程中遇到发布不成功的情况,要怎么解决呢?大家可以看看是不是因为不支持横版视频播放的原因呢?今天小编就来分享一下怎么快速将横版视频快速转换成竖版视频,感兴趣的小伙伴快跟着来看看 ...

  3. python为视频加logo_如何用python 在视频上添加自己的logo

    先准备好自己的logo 最好是透明图片,这样添加上去后才不显得突兀.比如下面例子中的logo_sc.png就是一个透明图片. 参照如下代码处理 #!/usr/bin/python3 # -*- cod ...

  4. 财码python官网_财码Python小实验之融资分析

    从本篇开始,财码小秘书将带小伙伴们进入投融资专题,今天的主题是融资分析小实验,欢迎大家来撩 . 01 融 资 概 述融资是指企业为满足生产经营资金的需要,向企业外部单位或个人以及从其企业内部筹措资金的 ...

  5. python提取视频字幕_荐利用Python提取视频中的字幕(文字识别)

    学了好久机器学习的内容有些许枯燥,今天我们来做一个Python的小项目来玩耍吧! 项目背景 通过获取百度API实现视频文字识别. 需求阐述 将.MP4格式视频裁剪成一帧一帧的图片再将图片中的字幕摘取出 ...

  6. 图片合成视频,视频文件过大了,python 改变视频的码率, 压缩视频文件

    from moviepy.editor import VideoFileClipa = VideoFileClip(r'E:\video\2023-01-30_13-38-58_res.mp4') # ...

  7. python把视频取帧_用Python提取视频帧

    我想提取视频帧并保存为图像.import os, sys from PIL import Image a, b, c = os.popen3("ffmpeg -i test.avi" ...

  8. python语言表白源码-python七夕浪漫表白源码

    本文实例为大家分享了python七夕浪漫表白的具体代码,供大家参考,具体内容如下 from turtle import * from time import sleep def go_to(x, y) ...

  9. [附源码]Python计算机毕业设计SSM旅游足迹分享系统(程序+LW)

    环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,St ...

  10. python视频教学视频哪个好-Python入门视频看哪个好?适合初学者的教学视频推荐...

    Python作为一门新手友好的编程语言,对于初学者来说,还是有一定的学习难度的.目前的Python学习资料在网上可以找到很多,那么Python入门视频看哪个好呢?本文就为大家推荐小编的免费Python ...

最新文章

  1. 【评论】一个老程序员的建议
  2. NTP 时间同步流量使用过大 问题解决
  3. Nagios基本搭建
  4. 如果在chrome的新标签中继续打开开发工具
  5. html5中加入音频,使用HTML5在网页中嵌入音频和视频播放的基本方法
  6. discuz安装_手动搭建 Discuz! 论坛
  7. 美团扫码付的前端可用性保障实践
  8. iphone固件降级_iPhone无法开机怎么办?三种快速维修方法
  9. java crs校验_AIX系统学习之-CRS安装后校验
  10. 【例题+习题】【数值计算方法复习】【湘潭大学】(四)
  11. 使用webpack5模块联邦
  12. linux让指定文件具有sudo的权限,Linux学习笔记——使用指定的用户权限执行程序——sudo...
  13. Pytorch 入门之数据处理 -- Dataset、Sampler、DataLoader
  14. Android淘宝客链接自动跳转淘宝APP问题
  15. lily+Solr 原理与配置
  16. 【你好,windows】Windows 7 X64旗舰纯净版版(NVME和USB3.0集合总裁万能网
  17. VS2010 visual studio Microsoft 应用程序错误报告 Microsoft Application Error Reporting 下列组件安装失败 1603 1935解决方法
  18. 使用itext7统计PDF文件中的字数
  19. HTML里img标签里的alt属性解释
  20. python 3d重建_python三维重建

热门文章

  1. 2022广西省安全员A证操作证考试题库及答案
  2. 【产品】小白进阶之产品经理所应具备的素质模型
  3. 在JS中如何去掉千分号
  4. 内存缓存、磁盘缓存、内存傻傻分不清
  5. 分享一波学习资料福利,赶紧收藏!!!
  6. WML与TX联合亚盘联打造飞盘跟风局
  7. 成熟敏捷组织中管理者的角色是咋样的?
  8. python计算复杂公式_复杂指标计算公式
  9. [C/C++]员工考勤记录 - 2019校招编程刷题
  10. 港科荐书|王一教授新书《一说万物:现代物理学百年漫谈》推荐