视频怎么批量打码?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_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实现视频自动打码分享相关推荐
- python语言编程基础视频_网络编程-5_ Python系列视频(一)——Python语言基础_Python视频-51CTO学院...
通过学习,对Python有一定的了解,学习Python语法,可以使用Python原生语言开发项目.对于Python的应用于开发有一个系统的认知,对于未来的发展方向有清晰的认识.主要知识点包括基本语法. ...
- 竖版视频怎么批量转换成横版视频
如果我们在发布视频素材的过程中遇到发布不成功的情况,要怎么解决呢?大家可以看看是不是因为不支持横版视频播放的原因呢?今天小编就来分享一下怎么快速将横版视频快速转换成竖版视频,感兴趣的小伙伴快跟着来看看 ...
- python为视频加logo_如何用python 在视频上添加自己的logo
先准备好自己的logo 最好是透明图片,这样添加上去后才不显得突兀.比如下面例子中的logo_sc.png就是一个透明图片. 参照如下代码处理 #!/usr/bin/python3 # -*- cod ...
- 财码python官网_财码Python小实验之融资分析
从本篇开始,财码小秘书将带小伙伴们进入投融资专题,今天的主题是融资分析小实验,欢迎大家来撩 . 01 融 资 概 述融资是指企业为满足生产经营资金的需要,向企业外部单位或个人以及从其企业内部筹措资金的 ...
- python提取视频字幕_荐利用Python提取视频中的字幕(文字识别)
学了好久机器学习的内容有些许枯燥,今天我们来做一个Python的小项目来玩耍吧! 项目背景 通过获取百度API实现视频文字识别. 需求阐述 将.MP4格式视频裁剪成一帧一帧的图片再将图片中的字幕摘取出 ...
- 图片合成视频,视频文件过大了,python 改变视频的码率, 压缩视频文件
from moviepy.editor import VideoFileClipa = VideoFileClip(r'E:\video\2023-01-30_13-38-58_res.mp4') # ...
- python把视频取帧_用Python提取视频帧
我想提取视频帧并保存为图像.import os, sys from PIL import Image a, b, c = os.popen3("ffmpeg -i test.avi" ...
- python语言表白源码-python七夕浪漫表白源码
本文实例为大家分享了python七夕浪漫表白的具体代码,供大家参考,具体内容如下 from turtle import * from time import sleep def go_to(x, y) ...
- [附源码]Python计算机毕业设计SSM旅游足迹分享系统(程序+LW)
环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,St ...
- python视频教学视频哪个好-Python入门视频看哪个好?适合初学者的教学视频推荐...
Python作为一门新手友好的编程语言,对于初学者来说,还是有一定的学习难度的.目前的Python学习资料在网上可以找到很多,那么Python入门视频看哪个好呢?本文就为大家推荐小编的免费Python ...
最新文章
- 【评论】一个老程序员的建议
- NTP 时间同步流量使用过大 问题解决
- Nagios基本搭建
- 如果在chrome的新标签中继续打开开发工具
- html5中加入音频,使用HTML5在网页中嵌入音频和视频播放的基本方法
- discuz安装_手动搭建 Discuz! 论坛
- 美团扫码付的前端可用性保障实践
- iphone固件降级_iPhone无法开机怎么办?三种快速维修方法
- java crs校验_AIX系统学习之-CRS安装后校验
- 【例题+习题】【数值计算方法复习】【湘潭大学】(四)
- 使用webpack5模块联邦
- linux让指定文件具有sudo的权限,Linux学习笔记——使用指定的用户权限执行程序——sudo...
- Pytorch 入门之数据处理 -- Dataset、Sampler、DataLoader
- Android淘宝客链接自动跳转淘宝APP问题
- lily+Solr 原理与配置
- 【你好,windows】Windows 7 X64旗舰纯净版版(NVME和USB3.0集合总裁万能网
- VS2010 visual studio Microsoft 应用程序错误报告 Microsoft Application Error Reporting 下列组件安装失败 1603 1935解决方法
- 使用itext7统计PDF文件中的字数
- HTML里img标签里的alt属性解释
- python 3d重建_python三维重建