为什么要给视频加一个动画?
很完整的视频也就是从短动画开始的。遮盖住LOG用。
C:\Users\Sam\Desktop\desktop\startup\workpython\ocr
Lottie.py
import subprocessdef 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, centeroutput_video = add_webm_animation(bg_video, anim_webm, output="final_output.mp4", position=position)
print("✅ 合成完成:", output_video)