اريد تحليل دقيق لستايل مونتاج هذا الفيديو بالتفصيل...
생성일: 2026년 5월 18일
답변에 사용된 모델 GPT-5.5 Thinking by Chat01
생성일: 2026년 5월 18일
답변에 사용된 모델 GPT-5.5 Thinking by Chat01
اريد تحليل دقيق لستايل مونتاج هذا الفيديو بالتفصيل الدقيق وعايز اعرف اسم استايل المونتاج دا وعايز اسرع طريقة لعمل مونتاج بطريقة سهله ويكون نفس هذا المونتاج
pythonimport os, json, subprocess, textwrap, math, statistics, sys, glob, pathlib video_path = "/mnt/data/كم دفع لي اليوتيوب في اول شهر بعد تفعيل الربح _ اول 30 يوم !!.mp4" os.path.exists(video_path), os.path.getsize(video_path) if os.path.exists(video_path) else None (True, 7447814)
pythonimport subprocess, json, os, textwrap, re, sys, math, statistics cmd = ["ffprobe","-v","error","-print_format","json","-show_format","-show_streams",video_path] res=subprocess.run(cmd, capture_output=True, text=True) print(res.returncode) print(res.stderr[:500]) meta=json.loads(res.stdout) print(json.dumps(meta, ensure_ascii=False, indent=2)[:4000])
pythonimport os, subprocess, math, json, pathlib, shutil, textwrap out_dir="/mnt/data/video_frames" os.makedirs(out_dir, exist_ok=True) # extract frames at every 10 seconds and also first 5 secs every 1 sec maybe duration=float(meta["format"]["duration"]) times=[0.5,1,2,3,5,8,12,16,20,25,30,40,50,60,75,90,105,120,135,150,165,173] frames=[] for i,t in enumerate(times): out=f"{out_dir}/frame_{i:02d}_{t:.1f}.jpg" subprocess.run(["ffmpeg","-y","-ss",str(t),"-i",video_path,"-frames:v","1","-q:v","2",out], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) if os.path.exists(out): frames.append((t,out)) len(frames), frames[:3], frames[-1 (22, [(0.5, '/mnt/data/video_frames/frame_00_0.5.jpg'), (1, '/mnt/data/video_frames/frame_01_1.0.jpg'), (2, '/mnt/data/video_frames/frame_02_2.0.jpg')], (173, '/mnt/data/video_frames/frame_21_173.0.jpg'))
pythonfrom PIL import Image, ImageDraw, ImageFont imgs=[] for t,path in frames: img=Image.open(path).convert("RGB") img.thumbnail((320,180)) canvas=Image.new("RGB",(320,210),"white") canvas.paste(img,(0,0)) d=ImageDraw.Draw(canvas) d.text((8,185),f"{t:.1f}s",fill=(0,0,0)) imgs.append(canvas) cols=4 rows=math.ceil(len(imgs)/cols) sheet=Image.new("RGB",(cols*320,rows*210),(240,240,240)) for idx,img in enumerate(imgs): sheet.paste(img,((idx%cols)*320,(idx//cols)*210)) sheet_path="/mnt/data/video_contact_sheet.jpg" sheet.save(sheet_path, quality=90) sheet_path '/mnt/data/video_contact_sheet.jpg'
python# ffmpeg scene detection: output timestamps with scene score cmd = ["ffmpeg","-i",video_path,"-filter:v","select='gt(scene,0.18)',showinfo","-f","null","-"] res=subprocess.run(cmd, capture_output=True, text=True) stderr=res.stderr # parse pts_time from showinfo lines times_scene=[] for line in stderr.splitlines(): if "showinfo" in line and "pts_time:" in line: m=re.search(r"pts_time:([0-9.]+)", line) if m: times_scene.append(float(m.group(1))) len(times_scene), times_scene[:50] (5, [50.533333, 52.633333, 148.966667, 149.8, 150.566667])
pythonimport cv2, numpy as np, os, math, statistics, pandas as pd, re, subprocess, json, pathlib cap=cv2.VideoCapture(video_path) fps=cap.get(cv2.CAP_PROP_FPS) nframes=int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) duration=nframes/fps fps,nframes,duration (30.0, 5241, 174.7)
python# sample every 0.5 seconds for visual difference sample_times=np.arange(0, duration, 0.5) prev=None diffs=[] thumbs=[] for t in sample_times: cap.set(cv2.CAP_PROP_POS_MSEC, t*1000) ret, frame=cap.read() if not ret: continue gray=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) small=cv2.resize(gray,(160,90)) if prev is not None: # mean abs diff and structural type diff=np.mean(cv2.absdiff(small, prev)) diffs.append((t,diff)) prev=small # find top changes top=sorted(diffs,key=lambda x:x[1], reverse=True)[:30] top[:20], statistics.mean([d for _,d in diffs]), statistics.median([d for _,d in diffs]) ([(np.float64(53.0), np.float64(210.86729166666666)), (np.float64(50.5), np.float64(203.88611111111112)), (np.float64(149.0), np.float64(103.19854166666667)), (np.float64(151.0), np.float64(99.0825)), (np.float64(150.0), np.float64(32.40541666666667)), (np.float64(10.0), np.float64(21.871805555555557)), (np.float64(104.0), np.float64(21.750416666666666)), (np.float64(161.0), np.float64(19.598055555555554)), (np.float64(34.5), np.float64(19.566805555555554)), (np.float64(10.5), np.float64(19.55701388888889)), (np.float64(19.0), np.float64(19.281041666666667)), (np.float64(133.0), np.float64(16.995208333333334)), (np.float64(166.0), np.float64(15.196527777777778)), (np.float64(104.5), np.float64(15.189375)), (np.float64(161.5), np.float64(15.139305555555556)), (np.float64(169.5), np.float64(14.427777777777777)), (np.float64(37.0), np.float64(14.049097222222223)), (np.float64(82.5), np.float64(13.795902777777778)), (np.float64(41.0), np.float64(13.493333333333334)), (np.float64(38.5), np.float64(13.434722222222222))], np.float64(5.646582696593442), np.float64(1.8749305555555555))
python# Extract frames every 2 seconds for better analysis times2=list(np.arange(0.5, duration, 2.0)) frames2=[] out_dir2="/mnt/data/video_frames_2sec" os.makedirs(out_dir2, exist_ok=True) for i,t in enumerate(times2): out=f"{out_dir2}/f_{i:03d}_{t:.1f}.jpg" subprocess.run(["ffmpeg","-y","-ss",f"{t:.2f}","-i",video_path,"-frames:v","1","-q:v","3",out], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) if os.path.exists(out): frames2.append((t,out)) # make multiple sheets pages 24 frames each sheet_paths=[] for start in range(0, len(frames2), 24): subset=frames2[start:start+24] imgs=[] for t,path in subset: img=Image.open(path).convert("RGB") img.thumbnail((240,135)) canvas=Image.new("RGB",(240,165),"white") canvas.paste(img,(0,0)) d=ImageDraw.Draw(canvas) d.text((5,142),f"{t:.1f}s",fill=(0,0,0)) imgs.append(canvas) cols=4 rows=math.ceil(len(imgs)/cols) sheet=Image.new("RGB",(cols*240,rows*165),(240,240,240)) for idx,img in enumerate(imgs): sheet.paste(img,((idx%cols)*240,(idx//cols)*165)) sp=f"/mnt/data/sheet_{start//24+1}.jpg" sheet.save(sp, quality=90) sheet_paths.append(sp) sheet_paths, len(frames2) (['/mnt/data/sheet_1.jpg', '/mnt/data/sheet_2.jpg', '/mnt/data/sheet_3.jpg', '/mnt/data/sheet_4.jpg'], 88)
python# Extract frames every 2 seconds for better analysis times2=list(np.arange(0.5, duration, 2.0)) frames2=[] out_dir2="/mnt/data/video_frames_2sec" os.makedirs(out_dir2, exist_ok=True) for i,t in enumerate(times2): out=f"{out_dir2}/f_{i:03d}_{t:.1f}.jpg" subprocess.run(["ffmpeg","-y","-ss",f"{t:.2f}","-i",video_path,"-frames:v","1","-q:v","3",out], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) if os.path.exists(out): frames2.append((t,out)) # make multiple sheets pages 24 frames each sheet_paths=[] for start in range(0, len(frames2), 24): subset=frames2[start:start+24] imgs=[] for t,path in subset: img=Image.open(path).convert("RGB") img.thumbnail((240,135)) canvas=Image.new("RGB",(240,165),"white") canvas.paste(img,(0,0)) d=ImageDraw.Draw(canvas) d.text((5,142),f"{t:.1f}s",fill=(0,0,0)) imgs.append(canvas) cols=4 rows=math.ceil(len(imgs)/cols) sheet=Image.new("RGB",(cols*240,rows*165),(240,240,240)) for idx,img in enumerate(imgs): sheet.paste(img,((idx%cols)*240,(idx//cols)*165)) sp=f"/mnt/data/sheet_{start//24+1}.jpg" sheet.save(sp, quality=90) sheet_paths.append(sp) sheet_paths, len(frames2) (['/mnt/data/sheet_1.jpg', '/mnt/data/sheet_2.jpg', '/mnt/data/sheet_3.jpg', '/mnt/data/sheet_4.jpg'], 88) <<ImageDisplayed>>
python# Extract frames every 2 seconds for better analysis times2=list(np.arange(0.5, duration, 2.0)) frames2=[] out_dir2="/mnt/data/video_frames_2sec" os.makedirs(out_dir2, exist_ok=True) for i,t in enumerate(times2): out=f"{out_dir2}/f_{i:03d}_{t:.1f}.jpg" subprocess.run(["ffmpeg","-y","-ss",f"{t:.2f}","-i",video_path,"-frames:v","1","-q:v","3",out], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) if os.path.exists(out): frames2.append((t,out)) # make multiple sheets pages 24 frames each sheet_paths=[] for start in range(0, len(frames2), 24): subset=frames2[start:start+24] imgs=[] for t,path in subset: img=Image.open(path).convert("RGB") img.thumbnail((240,135)) canvas=Image.new("RGB",(240,165),"white") canvas.paste(img,(0,0)) d=ImageDraw.Draw(canvas) d.text((5,142),f"{t:.1f}s",fill=(0,0,0)) imgs.append(canvas) cols=4 rows=math.ceil(len(imgs)/cols) sheet=Image.new("RGB",(cols*240,rows*165),(240,240,240)) for idx,img in enumerate(imgs): sheet.paste(img,((idx%cols)*240,(idx//cols)*165)) sp=f"/mnt/data/sheet_{start//24+1}.jpg" sheet.save(sp, quality=90) sheet_paths.append(sp) sheet_paths, len(frames2) (['/mnt/data/sheet_1.jpg', '/mnt/data/sheet_2.jpg', '/mnt/data/sheet_3.jpg', '/mnt/data/sheet_4.jpg'], 88) <<ImageDisplayed>> <<ImageDisplayed>>
python# Extract frames every 2 seconds for better analysis times2=list(np.arange(0.5, duration, 2.0)) frames2=[] out_dir2="/mnt/data/video_frames_2sec" os.makedirs(out_dir2, exist_ok=True) for i,t in enumerate(times2): out=f"{out_dir2}/f_{i:03d}_{t:.1f}.jpg" subprocess.run(["ffmpeg","-y","-ss",f"{t:.2f}","-i",video_path,"-frames:v","1","-q:v","3",out], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) if os.path.exists(out): frames2.append((t,out)) # make multiple sheets pages 24 frames each sheet_paths=[] for start in range(0, len(frames2), 24): subset=frames2[start:start+24] imgs=[] for t,path in subset: img=Image.open(path).convert("RGB") img.thumbnail((240,135)) canvas=Image.new("RGB",(240,165),"white") canvas.paste(img,(0,0)) d=ImageDraw.Draw(canvas) d.text((5,142),f"{t:.1f}s",fill=(0,0,0)) imgs.append(canvas) cols=4 rows=math.ceil(len(imgs)/cols) sheet=Image.new("RGB",(cols*240,rows*165),(240,240,240)) for idx,img in enumerate(imgs): sheet.paste(img,((idx%cols)*240,(idx//cols)*165)) sp=f"/mnt/data/sheet_{start//24+1}.jpg" sheet.save(sp, quality=90) sheet_paths.append(sp) sheet_paths, len(frames2) (['/mnt/data/sheet_1.jpg', '/mnt/data/sheet_2.jpg', '/mnt/data/sheet_3.jpg', '/mnt/data/sheet_4.jpg'], 88) <<ImageDisplayed>> <<ImageDisplayed>> <<ImageDisplayed>>
python# Extract frames every 2 seconds for better analysis times2=list(np.arange(0.5, duration, 2.0)) frames2=[] out_dir2="/mnt/data/video_frames_2sec" os.makedirs(out_dir2, exist_ok=True) for i,t in enumerate(times2): out=f"{out_dir2}/f_{i:03d}_{t:.1f}.jpg" subprocess.run(["ffmpeg","-y","-ss",f"{t:.2f}","-i",video_path,"-frames:v","1","-q:v","3",out], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) if os.path.exists(out): frames2.append((t,out)) # make multiple sheets pages 24 frames each sheet_paths=[] for start in range(0, len(frames2), 24): subset=frames2[start:start+24] imgs=[] for t,path in subset: img=Image.open(path).convert("RGB") img.thumbnail((240,135)) canvas=Image.new("RGB",(240,165),"white") canvas.paste(img,(0,0)) d=ImageDraw.Draw(canvas) d.text((5,142),f"{t:.1f}s",fill=(0,0,0)) imgs.append(canvas) cols=4 rows=math.ceil(len(imgs)/cols) sheet=Image.new("RGB",(cols*240,rows*165),(240,240,240)) for idx,img in enumerate(imgs): sheet.paste(img,((idx%cols)*240,(idx//cols)*165)) sp=f"/mnt/data/sheet_{start//24+1}.jpg" sheet.save(sp, quality=90) sheet_paths.append(sp) sheet_paths, len(frames2) (['/mnt/data/sheet_1.jpg', '/mnt/data/sheet_2.jpg', '/mnt/data/sheet_3.jpg', '/mnt/data/sheet_4.jpg'], 88) <<ImageDisplayed>> <<ImageDisplayed>> <<ImageDisplayed>> <<ImageDisplayed>>
حللت الفيديو المرفوع. أقرب اسم للستايل هو:
Faceless YouTube Explainer / Infographic Motion Graphics
أو بالعربي: مونتاج شرح يوتيوب بدون ظهور الوجه + موشن جرافيك معلوماتي + كينتيك تايبوجرافي.
هو ليس “سينمائي” ولا “فلوج”، بل ستايل فيديوهات شرح/أرقام/تحليل أرباح، يعتمد على سكرين ريكورد + نصوص متحركة + أيقونات + هايلايت على الأرقام + فويس أوفر.
الفيديو معمول كشرح بصري سريع عن أرباح اليوتيوب. لا يوجد ظهور للشخص، وكل المعلومات تُعرض من خلال:
المقاس الظاهر: 16:9 أفقي، وجودة الفيديو تقريبًا 720p / 30fps.
الخلفية ثابتة جدًا: لون أبيض مائل للرمادي مع vignette خفيف، يعني الأطراف أغمق قليلًا من المنتصف. هذا يعطي إحساس أن العناصر في المنتصف واضحة ومركّزة.
الستايل هنا قريب من:
Clean Explainer Background
أو
Minimal Infographic Background
النصوص هي أهم عنصر في المونتاج. يتم استخدامها بدل ظهور الشخص.
خصائص النص:
أقرب نوع للنصوص:
Kinetic Typography
يعني نصوص تتحرك مع الكلام وتظهر لتأكيد الجملة المهمة.
الحركة بسيطة وليست معقدة. أغلب العناصر تدخل بهذه الطرق:
هذا اسمه:
Simple 2D Motion Graphics
وليس موشن جرافيك معقد.
لقطات YouTube Analytics هي العمود الأساسي للفيديو. المونتاج لا يترك الشاشة كاملة ثابتة لفترة طويلة، بل يعمل:
هذا يسمى:
Screen Recording Callout Editing
أي مونتاج سكرين ريكورد مع توضيحات بصرية.
الأيقونات Flat/Cartoon:
أقرب ستايل للأيقونات: Flat Vector Icons with Pop Animation
الإيقاع سريع لكن ليس مثل تيك توك. هو إيقاع يوتيوب تعليمي:
يعني الفيديو معمول على قاعدة:
كل جملة في الفويس أوفر لازم يقابلها شيء بصري.
من شكل المونتاج، الأساس غالبًا:
أسرع برنامج مناسب: CapCut
ولو تريد نتيجة أنظف: CapCut + Canva.
لا تبدأ بـ After Effects لو هدفك السرعة. After Effects أفضل احترافيًا، لكن أبطأ. هذا الفيديو يمكن تقليده بنسبة كبيرة داخل CapCut.
اكتب الكلام جُمل قصيرة جدًا. مثال:
“بعد أول شهر من تفعيل الربح…”
“الأرقام كانت مفاجأة…”
“الإيرادات وصلت إلى…”
“لكن المشكلة كانت في…”
كل جملة قصيرة = لقطة أو عنصر بصري.
سجل الصوت أولًا. لا تبدأ بالمونتاج قبل الصوت.
المونتاج في هذا الستايل مبني على الكلام.
في CapCut:
سجل YouTube Studio أو أي منصة أرقام عندك.
ثم داخل CapCut:
استخدم خط عربي عريض مثل:
إعدادات النص:
من Canva أو Freepik أو Flaticon.
حمّلها PNG بخلفية شفافة.
كل أيقونة:
في CapCut استخدم:
إعداد سريع للحركة:
أضف SFX بسيط:
خلي صوت المؤثرات منخفض، لا يغطي على الفويس.
هذا الستايل لا يعتمد على ترانزيشنز كثيرة.
استخدم فقط:
رتّب المشروع بهذا الشكل:
لكل 10 ثواني من الفيديو اعمل الآتي:
كرر نفس القالب طوال الفيديو.
ابحث في CapCut / Canva / YouTube عن:
اسم الستايل الأقرب:
Faceless Infographic Explainer with Kinetic Typography
أسرع طريقة لعمله:
CapCut للفيديو + Canva للأيقونات والتصميمات + Screen Recording للأرقام + فويس أوفر قوي.
السر الحقيقي في نفس المونتاج ليس الانتقالات، بل في 4 أشياء:
نصوص قصيرة، أرقام عليها هايلايت، حركة كل ثانيتين، وأيقونات بسيطة توضح الكلام.