文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python怎么实现视频自动打码

2023-06-29 21:57

关注

今天小编给大家分享一下Python怎么实现视频自动打码的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

准备工作

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

实现原理

将视频分为音频和画面;

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

处理后的视频添加声音;

模块

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

素材工具

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

Python怎么实现视频自动打码

代码解析

导入需要使用的模块

import cv2  import face_recognition  # 人脸识别库  99.7%    cmake  dlib  face_recognitionimport 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_recognitionimport subprocessdef 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:            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怎么实现视频自动打码”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯