给视频加一个动画。

为什么要给视频加一个动画?

   很完整的视频也就是从短动画开始的。遮盖住LOG用。

C:\Users\Sam\Desktop\desktop\startup\workpython\ocr

Lottie.py

import subprocess

def run_ffmpeg(cmd):
    print("Running:", " ".join(cmd))
    subprocess.run(cmd, check=True)

def get_video_duration(video_file):
    """获取视频时长(秒)"""
    result = subprocess.run(
        ['ffprobe', '-v', 'error', '-show_entries',
         'format=duration', '-of', 'default=noprint_wrappers=1:nokey=1', video_file],
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT
    )
    return float(result.stdout)

def get_overlay_position_expr(position):
    """根据快捷写法返回overlay表达式"""
    pos_map = {
        "top-left": "10:10",
        "top-right": "(W-w-10):(10)",
        "bottom-left": "10:(H-h-10)",
        "bottom-right": "(W-w-10):(H-h-10)",
        "center": "(W-w)/2:(H-h)/2"
    }
    if isinstance(position, str) and position in pos_map:
        return pos_map[position]
    elif isinstance(position, (tuple, list)) and len(position) == 2:
        return f"{position[0]}:{position[1]}"
    else:
        raise ValueError("Position必须是 ('x', 'y') 或快捷词,比如 'top-left', 'center', 'bottom-right'")

def add_webm_animation(bg_video, anim_webm, output="final_output.mp4", position="top-left"):
    pos_expr = get_overlay_position_expr(position)

    # 获取背景视频时长
    bg_duration = get_video_duration(bg_video)

    run_ffmpeg([
        "ffmpeg", "-y",
        "-i", bg_video,
        "-stream_loop", "-1", "-i", anim_webm,  #  动画循环
        "-filter_complex", f"[0:v][1:v] overlay={pos_expr}:format=auto:shortest=1",
        "-t", str(bg_duration),
        "-c:a", "copy",
        output
    ])
    return output

# === 主流程 ===
bg_video = "1v.mp4"
anim_webm = "en/animation.webm"
position = "bottom-left"  #  快捷词:top-left, top-right, bottom-left, bottom-right, center

output_video = add_webm_animation(bg_video, anim_webm, output="final_output.mp4", position=position)
print("✅ 合成完成:", output_video)

你可能感兴趣的:(音视频)