单个视频自动删除带人脸镜头合并不带人脸成新视频

import cv2
import face_recognition
import os
import subprocess
from tqdm import tqdm

def process_video(input_path, output_path, temp_dir=“temp_frames”):
# 创建临时帧存储目录
os.makedirs(temp_dir, exist_ok=True)

# 初始化视频捕获
cap = cv2.VideoCapture(input_path)
if not cap.isOpened():
    raise ValueError("无法打开视频文件")

# 获取视频参数
fps = cap.get(cv2.CAP_PROP_FPS)
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

print(f"视频参数:{width}x{height} @ {fps}fps,总帧数:{total_frames}")

# 创建进度条
pbar = tqdm(total=total_frames, desc="处理进度")

# 逐帧处理
saved_frames = 0
frame_count = 0
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    # 转换颜色空间 BGR -> RGB
    rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    
    # 人脸检测(使用HOG模型,可改为CNN提升准确率)
    face_locations = face_recognition.face_locations(rgb_frame)
    
    # 如果没有检测到人脸,保存帧
    if not face_locations:
        frame_filename = os.path.join(temp_dir, f"frame_{saved_frames:08d}.jpg")
        cv2.imwrite(frame_filename, frame)
        saved_frames += 1

    frame_count += 1
    pbar.update(1)

cap.release()
pbar.close()

print(f"处理完成,保留帧数:{saved_frames}/{total_frames}")

# 合并保留的帧为视频
print("合并视频...")
output_temp = "temp_output.mp4"
(
    ffmpeg
    .input(f'{temp_dir}/frame_%08d.jpg', pattern_type='sequence', framerate=fps)
    .output(output_temp, vcodec='libx264', pix_fmt='yuv420p')
    .overwrite_output()
    .run()
)

# 合并原始音频
print("合并音频...")
final_output = output_path
(
    ffmpeg
    .output(
        ffmpeg.input(output_temp).video,
        ffmpeg.input(input_path).audio,
        final_output,
        vcodec='copy',
        acodec='copy',
        shortest=None
    )
    .overwrite_output()
    .run()
)

# 清理临时文件
shutil.rmtree(temp_dir)
os.remove(output_temp)
print(f"处理完成!输出文件:{final_output}")

if name == “main”:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-i", “–input”, required=True, help=“输入视频路径”)
parser.add_argument("-o", “–output”, required=True, help=“输出视频路径”)
args = parser.parse_args()

# 检查ffmpeg可用性
try:
    import ffmpeg
except ImportError:
    raise ImportError("请先安装ffmpeg-python:pip install ffmpeg-python")

process_video(args.input, 以下是使用`face-recognition`库实现的完整视频人脸镜头删除+合并解决方案:
import cv2
import face_recognition
import os
import subprocess
from tqdm import tqdm

def process_video(input_path, output_path, temp_dir="temp_frames"):
    # 创建临时帧存储目录
    os.makedirs(temp_dir, exist_ok=True)
    
    # 初始化视频捕获
    cap = cv2.VideoCapture(input_path)
    if not cap.isOpened():
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值