为什么要给视频加一个动画?
很完整的视频也就是从短动画开始的。遮盖住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)