為什么要給視頻加一個動畫?
? ?很完整的視頻也就是從短動畫開始的。遮蓋住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)