§
    |£Èj]A  ã                   ó  — d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
mZmZ ddlZ ee¦  «                             ¦   «         j        j        Zedz  Z ee¦  «        ej        vr$ej                             d ee¦  «        ¦  «         ddlmZmZmZ ddlZ	 	 	 	 	 	 	 d$dededededededededefd„Zdede
eef         fd„Z d%dedededefd„Z! G d„ d ¦  «        Z"e#d!k    r ej$        ed"d#g¦  «         dS dS )&uI  
=============================================================================
THáº¬P NGÅ¨ NIÃŠN (THE FIFTEEN SPRINGS) - ADVERSARIAL AUDIO CONCAT PROBE (M4)
=============================================================================
Milestone: M4 Gate Verification - Empirical Challenger 1
Focus:
  1. Multi-Shot Mode A vs Mode B Audio Duration Drift & A/V Cut Sync
  2. Silent Clip & Missing Audio Track Resilience (Engine vs Orchestrator Fallback)
  3. Boundary Smoothing 0.000s Duration Loss Invariant
=============================================================================
é    N)ÚPath)ÚDictÚListÚAnyÚ05_Production_Pipeline)ÚAudioContinuityEngineÚ
get_ffmpegÚget_ffprobeç       @é¸  ÚblackTFé€»  é   Úoutput_pathÚdurationÚfreqÚcolorÚ	has_audioÚ
mute_audioÚsample_rateÚchannelsÚreturnc                 ót  — t          ¦   «         }| j                             dd¬¦  «         |ddddd|› d|› �g}	|r�|rL|	                     dddd	|› d
|› �dddddddddddddddt	          |¦  «        dt	          |¦  «        g¦  «         nf|	                     dddd|› d|› d|› �dddddddddddddddt	          |¦  «        dt	          |¦  «        g¦  «         n|	                     g d¢¦  «         |	                     dt	          |¦  «        t	          | ¦  «        g¦  «         t          j        |	dd¬¦  «         | S ) uV   Táº¡o video synthetic siÃªu nháº¹ (160x120, ultrafast) Ä‘á»ƒ cháº¡y probe cá»±c nhanh.T)ÚparentsÚexist_okz-yú-fÚlavfiú-izcolor=c=z:s=160x120:d=zaevalsrc=0:s=ú:d=z-mapz0:vz1:aú-c:vÚlibx264ú-presetÚ	ultrafastú-pix_fmtÚyuv420pz-c:aÚaacz-b:aÚ128kz-arz-aczsine=frequency=z:sample_rate=z
:duration=)z-anr    r!   r"   r#   r$   r%   ú-t)Úcapture_outputÚcheck)r	   ÚparentÚmkdirÚextendÚstrÚ
subprocessÚrun)
r   r   r   r   r   r   r   r   ÚffmpegÚcmds
             úEC:\Projects\KieuStory\tests\test_adversarial_m4_audio_concat_probe.pyÚmake_test_clipr4   "   s¹  € õ ‰\Œ\€FØÔ×Ò T°DÐÑ9Ô9Ð9à�Øˆg�tÐF¨ÐFÐF¸HÐFÐFð€Cð ð Øð 	Ø�JŠJØ�g˜tÐ%O°[Ð%OÐ%OÀXÐ%OÐ%OØ˜˜v uØ˜	 9¨k¸:ÀyØ˜˜v v¨uµc¸+Ñ6FÔ6FÈÍsÐS[É}Ì}ð	ñ ô ð ð ð �JŠJØ�g˜tÐ%k°tÐ%kÐ%kÈ+Ð%kÐ%kÐaiÐ%kÐ%kØ˜˜v uØ˜	 9¨k¸:ÀyØ˜˜v v¨uµc¸+Ñ6FÔ6FÈÍsÐS[É}Ì}ð	ñ ô ð ð ð 	�
Š
ð 
ð 
ð 
ñ 	ô 	ð 	ð ‡J‚J�•c˜(‘m”m¥S¨Ñ%5Ô%5Ð6Ñ7Ô7Ð7Ý„N�3 t°4Ð8Ñ8Ô8Ð8ØÐó    Ú
media_pathc                 óè  — t          ¦   «         }|ddddddt          | ¦  «        g}t          j        |ddd¬¦  «        }t	          j        |j        ¦  «        }|                     d	g ¦  «        }|                     d
i ¦  «        }t          d„ |D ¦   «         d¦  «        }t          d„ |D ¦   «         d¦  «        }t          |                     dd¦  «        ¦  «        t          |                     dd¦  «        ¦  «        |du|r|                     d¦  «        nd|r7t          |                     d|                     dd¦  «        ¦  «        ¦  «        nd|du|r|                     d¦  «        nd|r#t          |                     dd¦  «        ¦  «        nd|r#t          |                     dd¦  «        ¦  «        nd|r7t          |                     d|                     dd¦  «        ¦  «        ¦  «        nddœ
S )uF   PhÃ¢n tÃ­ch chi tiáº¿t container, video vÃ  audio streams qua ffprobe.ú-vÚerrorz-show_entrieszYstream=codec_type,codec_name,sample_rate,channels,duration,nb_frames:format=duration,sizez-ofÚjsonT)r)   Útextr*   ÚstreamsÚformatc              3   óL   K  — | ]}|                      d ¦  «        dk    ¯|V — Œ dS )Ú
codec_typeÚvideoN©Úget©Ú.0Úss     r3   ú	<genexpr>zprobe_file.<locals>.<genexpr>Y   ó8   è è € ÐJÐJ˜1¨1¯5ª5°Ñ+>Ô+>À'Ò+IÐ+I�QÐ+IÐ+IÐ+IÐ+IÐJÐJr5   Nc              3   óL   K  — | ]}|                      d ¦  «        dk    ¯|V — Œ dS )r?   ÚaudioNrA   rC   s     r3   rF   zprobe_file.<locals>.<genexpr>Z   rG   r5   r   ç        Úsizer   Ú
codec_namer   r   )
Úformat_durationÚ
size_bytesÚ	has_videoÚvideo_codecÚvideo_durationr   Úaudio_codecr   r   Úaudio_duration)r
   r.   r/   r0   r:   ÚloadsÚstdoutrB   ÚnextÚfloatÚint)	r6   Úffprober2   ÚresÚdatar<   ÚfmtÚv_streamÚa_streams	            r3   Ú
probe_filer_   L   sè  € å‰mŒm€Gà��wØÐtØˆv•s˜:‘”ð€Cõ
 Œ.˜¨T¸ÀDÐ
IÑ
IÔ
I€CÝŒ:�c”jÑ!Ô!€DØ�hŠh�y "Ñ%Ô%€GØ
�(Š(�8˜RÑ
 Ô
 €CåÐJÐJ ÐJÑJÔJÈDÑQÔQ€HÝÐJÐJ ÐJÑJÔJÈDÑQÔQ€Hõ ! §¢¨°SÑ!9Ô!9Ñ:Ô:Ý˜#Ÿ'š' &¨!Ñ,Ô,Ñ-Ô-Ø TÐ)Ø5=ÐG�x—|’| LÑ1Ô1Ð1À4ØW_Ðh�% §¢¨Z¸¿ºÀÈSÑ9QÔ9QÑ RÔ RÑSÔSÐSÐehØ TÐ)Ø5=ÐG�x—|’| LÑ1Ô1Ð1À4Ø>FÐM•s˜8Ÿ<š<¨°qÑ9Ô9Ñ:Ô:Ð:ÈAØ8@ÐG•C˜Ÿš Z°Ñ3Ô3Ñ4Ô4Ð4ÀaØW_Ðh�% §¢¨Z¸¿ºÀÈSÑ9QÔ9QÑ RÔ RÑSÔSÐSÐehðð ð r5   ç      à?ú-50dBÚmin_silence_durÚnoise_thresholdc                 óø  — t          ¦   «         }|dt          | ¦  «        dd|› d|› �dddg}t          j        |dd¬	¦  «        }|j        }g }|                     ¦   «         D ]m}d
|v rg|                     d
¦  «        }		 |                     t          |	d                              ¦   «         d         ¦  «        ¦  «         Œ]# t          $ r Y Œiw xY wŒn|r*|d         }
t          | ¦  «        }|d         }||
k    r||
z
  S dS )uQ   Ä�o thá»�i lÆ°á»£ng im láº·ng á»Ÿ cuá»‘i file Ã¢m thanh qua FFmpeg silencedetect.r   ú-afzsilencedetect=noise=r   r   Únullú-T©r)   r;   zsilence_start:é   r   éÿÿÿÿrM   rJ   )r	   r.   r/   r0   ÚstderrÚ
splitlinesÚsplitÚappendrW   Ú
ValueErrorr_   )r6   rb   rc   r1   r2   rZ   rk   Úsilence_startsÚlineÚpartsÚ
last_startÚmetaÚ	total_durs                r3   Údetect_tail_silencerv   j   s;  € å‰\Œ\€Fà�•c˜*‘o”oØÐK oÐKÐK¸/ÐKÐKØˆf�cð€Cõ
 Œ.˜¨T¸Ð
=Ñ
=Ô
=€CØŒZ€Fà€NØ×!Ò!Ñ#Ô#ð ð ˆØ˜tÐ#Ð#Ø—J’JÐ/Ñ0Ô0ˆEðØ×%Ò%¥e¨E°!¬H¯NªNÑ,<Ô,<¸QÔ,?Ñ&@Ô&@ÑAÔAÐAÐAøÝð ð ð Ø�ðøøøð	 $ð ð *Ø# BÔ'ˆ
Ý˜*Ñ%Ô%ˆØÐ*Ô+ˆ	Ø�zÒ!Ð!Ø˜zÑ)Ð)Øˆ3s   Á<A B=Â=
C
Ã	C
c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú!TestAdversarialM4AudioConcatProbeuQ   Táº­p há»£p cÃ¡c probe thá»±c nghiá»‡m Ä‘á»‘i khÃ¡ng kiá»ƒm chá»©ng Milestone M4.c                 ó’  — d}d}||z  }d}g }t          |¦  «        D ]H}|d|dz   › d�z  }t          ||d|dz  z   ¬	¦  «         |                     t          |¦  «        ¦  «         ŒIt	          ¦   «         }	|d
z  }
|	                     |t          |
¦  «        |dd¬¦  «        }|du sJ ‚|
                     ¦   «         sJ ‚t          |
¦  «        }|d         du sJ ‚t          |
d¬¦  «        }|dz
  |z  }t          d¦  «         t          d|d         d›d�¦  «         t          d|d         d›d�¦  «         t          d|d›d|d›d�¦  «         ||dz
  k    sJ d|› d�¦   «         ‚|dz  }|	                     |t          |¦  «        |dd¬¦  «        }|du sJ ‚|                     ¦   «         sJ ‚t          |¦  «        }|d         du sJ ‚t          |d¬¦  «        }t          |d         |z
  ¦  «        }t          |d         |d         z
  ¦  «        }t          d ¦  «         t          d|d         d›d�¦  «         t          d!|d         d›d�¦  «         t          d"|d#›d�¦  «         t          d$|d#›d�¦  «         t          d|d›d�¦  «         |d%k     sJ d&|› d�¦   «         ‚|d'k     sJ d(|› d�¦   «         ‚|dk     sJ d)|› d�¦   «         ‚d*S )+uÏ  
        PROBE 1: Ä�o Ä‘á»™ co rÃºt thá»�i lÆ°á»£ng (duration shrinkage) vÃ  lá»‡ch pha A/V giá»¯a Mode A vÃ  Mode B.
        - Táº¡o 6 shots x 2.0s = 12.0s tá»•ng.
        - Mode B (acrossfade, d=0.5s):
          * Ä�á»™ co rÃºt Ã¢m thanh lÃ½ thuyáº¿t = (6 - 1) x 0.5s = 2.5s!
          * Audio bá»‹ apad Ä‘á»‡m 2.5s cÃ¢m á»Ÿ Ä‘uÃ´i.
          * Ná»™i dung Ã¢m thanh cá»§a shot 6 bá»‹ Ä‘áº©y sá»›m 2.5s so vá»›i hÃ¬nh áº£nh (phÃ¡ vá»¡ cut sync).
        - Mode A (boundary_smoothing, 30ms micro-fade):
          * Ä�á»™ co rÃºt Ã¢m thanh = 0.000s!
          * Ã‚m thanh shot 6 báº¯t Ä‘áº§u chÃ­nh xÃ¡c táº¡i timestamp 10.0s (khá»›p 100% video cut).
          * KhÃ´ng cÃ³ khoáº£ng cÃ¢m nhÃ¢n táº¡o á»Ÿ Ä‘uÃ´i.
        é   r   r`   Úshot_ri   ú.mp4i,  éd   ©r   r   zprobe_mode_b_acrossfade.mp4FÚ
acrossfade©Úcrossfade_durÚnormalize_lufsÚmodeTr   ç      ð?)rb   z
[PROBE 1 - Mode B Results]:z  Total Video Duration: rQ   ú.3frE   z  Container Duration:   rM   z  Detected Tail Silence: zs (Theoretical shrinkage: zs)zHMode B must have tail silence caused by acrossfade shrinkage! Detected: z#probe_mode_a_boundary_smoothing.mp4Úboundary_smoothingrS   z
[PROBE 1 - Mode A Results]:z  Total Audio Duration: z  Duration Difference:  ú.4fz  A/V Drift:            çš™™™™™¹?z&Mode A duration difference too large: gš™™™™™©?zMode A A/V drift too large: z/Mode A should NOT have tail silence! Detected: N)Úranger4   rn   r.   r   Ústitch_with_audio_crossfadeÚexistsr_   rv   ÚprintÚabs)ÚselfÚtmp_pathÚ	num_shotsÚshot_durÚtotal_expected_durr�   ÚclipsÚiÚpÚengineÚ
out_mode_bÚok_bÚmeta_bÚtail_silence_bÚexpected_shrinkageÚ
out_mode_aÚok_aÚmeta_aÚtail_silence_aÚduration_diffÚav_diffs                        r3   Ú8test_probe_01_mode_a_vs_mode_b_multi_shot_timeline_driftzZTestAdversarialM4AudioConcatProbe.test_probe_01_mode_a_vs_mode_b_multi_shot_timeline_drift‰   sÕ  € ð ˆ	ØˆØ&¨Ñ1ÐØˆàˆÝ�yÑ!Ô!ð 	!ð 	!ˆAØÐ, 1 Q¡3Ð,Ð,Ð,Ñ,ˆAÝ˜1 x°c¸AÀ¹G±mÐDÑDÔDÐDØ�LŠL�˜Q™œÑ Ô Ð Ð å&Ñ(Ô(ˆð Ð =Ñ=ˆ
Ø×1Ò1ØÝ�
‰OŒOØ'Ø Øð 2ñ 
ô 
ˆð �tˆ|ˆ|ˆ|ˆ|Ø× Ò Ñ"Ô"Ð"Ð"Ð"å˜JÑ'Ô'ˆØ�kÔ" dÐ*Ð*Ð*Ð*Ý,¨ZÈÐMÑMÔMˆØ'¨!™m¨}Ñ<ÐåÐ.Ñ/Ô/Ð/ÝÐH¨Ð0@Ô)AÐHÐHÐHÐHÑIÔIÐIÝÐI¨Ð0AÔ)BÐIÐIÐIÐIÑJÔJÐJÝÐr¨.ÐrÐrÐrÐXjÐrÐrÐrÐrÑsÔsÐsØÐ!3°cÑ!9Ò9Ð9Ð9ØhÐWeÐhÐhÐhñ :Ô9Ð9ð
 Ð EÑEˆ
Ø×1Ò1ØÝ�
‰OŒOØ'Ø Ø%ð 2ñ 
ô 
ˆð �tˆ|ˆ|ˆ|ˆ|Ø× Ò Ñ"Ô"Ð"Ð"Ð"å˜JÑ'Ô'ˆØ�kÔ" dÐ*Ð*Ð*Ð*Ý,¨ZÈÐMÑMÔMˆå˜FÐ#3Ô4Ð7IÑIÑJÔJˆÝ�fÐ-Ô.°Ð8HÔ1IÑIÑJÔJˆåÐ.Ñ/Ô/Ð/ÝÐH¨Ð0@Ô)AÐHÐHÐHÐHÑIÔIÐIÝÐH¨Ð0@Ô)AÐHÐHÐHÐHÑIÔIÐIÝÐ=¨Ð=Ð=Ð=Ð=Ñ>Ô>Ð>ÝÐ7¨Ð7Ð7Ð7Ð7Ñ8Ô8Ð8ÝÐ?¨.Ð?Ð?Ð?Ð?Ñ@Ô@Ð@à˜sÒ"Ð"Ð"Ð$]È]Ð$]Ð$]Ð$]Ñ"Ô"Ð"Ø˜Š~ˆ~ˆ~ÐH¸gÐHÐHÐH‰~Œ~ˆ~Ø Ò#Ð#Ð#Ð%hÐWeÐ%hÐ%hÐ%hÑ#Ô#Ð#Ð#Ð#r5   c           	      óž  — d}d}||z  }g }t          |¦  «        D ]I}|d|dz   d›d�z  }t          ||d|dz  z   ¬	¦  «         |                     t          |¦  «        ¦  «         ŒJt	          ¦   «         }|d
z  }	|                     |t          |	¦  «        ddd¬¦  «        }
|
du sJ ‚|	                     ¦   «         sJ ‚t          |	¦  «        }|d         du sJ ‚|d         dk    sJ ‚|d         dk    sJ ‚|d         dk    sJ ‚t          |d         |z
  ¦  «        }t          d|› d|d         d›d|d›d�¦  «         |dk     sJ d|› d�¦   «         ‚d S )!uÿ   
        PROBE 2: Kiá»ƒm chá»©ng quy mÃ´ lá»›n 10 shots (chuáº©n 10 shots x 1.0s).
        XÃ¡c nháº­n vá»›i 10 shots, Mode A váº«n giá»¯ vá»¯ng 0.000s duration loss,
        trong khi Mode B sáº½ gÃ¢y co rÃºt nghiÃªm trá»�ng (9 x crossfade_dur).
        é
   r„   Úscale_shot_ri   Ú02dr|   i�  é2   r~   zprobe_10_shots_mode_a.mp4g333333Ó?Fr†   r€   Tr   rR   r&   r   r   r   r   rS   z-
[PROBE 2 - 10 Shots Scale Mode A]: Expected zs | Actual r…   zs | Drift = r‡   rE   rˆ   z)10-shot Mode A drift must be < 0.1s, got N)
r‰   r4   rn   r.   r   rŠ   r‹   r_   r�   rŒ   )rŽ   r�   r�   r‘   Úexpected_totalr“   r”   r•   r–   Úout_scale_aÚokrt   Údrifts                r3   Ú;test_probe_02_ten_shot_scale_mode_a_zero_drift_verificationz]TestAdversarialM4AudioConcatProbe.test_probe_02_ten_shot_scale_mode_a_zero_drift_verificationÚ   sú  € ð ˆ	ØˆØ" XÑ-ˆàˆÝ�yÑ!Ô!ð 	!ð 	!ˆAØÐ6¨¨1©Ð6Ð6Ð6Ð6Ñ6ˆAÝ˜1 x°c¸AÀ¹F±lÐCÑCÔCÐCØ�LŠL�˜Q™œÑ Ô Ð Ð å&Ñ(Ô(ˆØÐ!<Ñ<ˆà×/Ò/ØÝ�ÑÔØØ Ø%ð 0ñ 
ô 
ˆð �TˆzˆzˆzˆzØ×!Ò!Ñ#Ô#Ð#Ð#Ð#å˜+Ñ&Ô&ˆØ�KÔ  DÐ(Ð(Ð(Ð(Ø�MÔ" eÒ+Ð+Ð+Ð+Ø�MÔ" eÒ+Ð+Ð+Ð+Ø�JÔ 1Ò$Ð$Ð$Ð$å�DÐ)Ô*¨^Ñ;Ñ<Ô<ˆÝð  O¸~ð  Oð  OÐZ^Ð_oÔZpð  Oð  Oð  Oð  CHð  Oð  Oð  Oð  Oñ  	Pô  	Pð  	PØ�sŠ{ˆ{ˆ{ÐPÈÐPÐPÐP‰{Œ{ˆ{ˆ{ˆ{r5   c           	      ó  — t          |dz  ddd¬¦  «        }t          |dz  dd¬¦  «        }t          |d	z  ddd¬
¦  «        }t          |dz  ddd¬¦  «        }t          |¦  «        t          |¦  «        t          |¦  «        t          |¦  «        g}d}t          ¦   «         }|dz  }	|                     |t          |	¦  «        ddd¬¦  «        }
|
du s
J d¦   «         ‚|	                     ¦   «         sJ ‚t          |	¦  «        }|d         du sJ ‚|d         dk    sJ ‚|d         dk    sJ ‚|d         dk    sJ ‚t          |d         |z
  ¦  «        dk     sJ ‚t          d|d         › d|d         › d|d         d›d �¦  «         d!S )"u�   
        PROBE 3A: XÃ¡c nháº­n AudioContinuityEngine chá»‘ng chá»‹u hoÃ n háº£o vá»›i clip thiáº¿u stream audio (-an) vÃ  clip cÃ¢m.
        zc1_normal.mp4gš™™™™™é?r   T)r   r   r   zc2_no_audio.mp4F)r   r   zc3_mute.mp4)r   r   r   zc4_normal.mp4ip  gš™™™™™	@zprobe_silent_engine.mp4rˆ   r†   r€   zFAudioContinuityEngine must handle missing audio streams without crash!r   rR   r&   r   r   r   r   rM   g      Ð?z(
[PROBE 3A - Engine Concat Resilience]: ú zHz stereo, dur=z.2fz
s [PASSED]N)r4   r.   r   rŠ   r‹   r_   r�   rŒ   )rŽ   r�   Úc1Úc2Úc3Úc4r“   r¨   r–   Ú
out_engineÚok_engÚmeta_engs               r3   Ú:test_probe_03a_engine_silent_and_missing_stream_resiliencez\TestAdversarialM4AudioConcatProbe.test_probe_03a_engine_silent_and_missing_stream_resilience  s  € õ ˜H Ñ6ÀÈ3ÐZ^Ð_Ñ_Ô_ˆÝ˜HÐ'8Ñ8À3ÐRWÐXÑXÔXˆÝ˜H }Ñ4¸sÈdÐ_cÐdÑdÔdˆÝ˜H Ñ6ÀÈ3ÐZ^Ð_Ñ_Ô_ˆå�R‘”�#˜b™'œ'¥3 r¡7¤7­C°©G¬GÐ4ˆØ ˆå&Ñ(Ô(ˆØÐ 9Ñ9ˆ
Ø×3Ò3ØÝ�
‰OŒOØØØ%ð 4ñ 
ô 
ˆð ˜ˆ~ˆ~ˆ~Ðg‰~Œ~ˆ~Ø× Ò Ñ"Ô"Ð"Ð"Ð"å˜jÑ)Ô)ˆØ˜Ô$¨Ð,Ð,Ð,Ð,Ø˜Ô&¨%Ò/Ð/Ð/Ð/Ø˜Ô&¨%Ò/Ð/Ð/Ð/Ø˜
Ô# qÒ(Ð(Ð(Ð(Ý�8Ð-Ô.°Ñ?Ñ@Ô@À4ÒGÐGÐGÐGÝð  h¸(À=Ô:Qð  hð  hÐT\Ð]jÔTkð  hð  hð  }Eð  FWô  }Xð  hð  hð  hð  hñ  	iô  	ið  	ið  	ið  	ir5   c                 óÌ  — t          ¦   «         }|                     dd¦  «        }t          j                             |¦  «        }t          d¦  «         t          d|› �¦  «         t          d|› �¦  «         t          d|› �¦  «         d|v r|du s
J d	¦   «         ‚t          ¦   «         }t          d
|› �¦  «         t          j                             |¦  «        s
J d¦   «         ‚dS )u>  
        PROBE 3B [CRITICAL VULNERABILITY]:
        Kiá»ƒm chá»©ng lá»—i Ä‘Æ°á»�ng dáº«n ffprobe táº¡i production_orchestrator.py:1170.
        Biá»ƒu thá»©c `ffmpeg_exe.replace('ffmpeg', 'ffprobe')` Ä‘Ã£ biáº¿n Ä‘á»•i:
        `ffmpeg-9.0.2-full_buildinfmpeg.exe` thÃ nh `ffprobe-9.0.2-full_buildinfprobe.exe` (khÃ´ng tá»“n táº¡i!).
        Háº­u quáº£: Lá»—i FileNotFoundError bá»‹ nuá»‘t chá»­ng bá»Ÿi `except Exception: has_a = True`,
        khiáº¿n Fallback Concat luÃ´n phÃ¡n Ä‘oÃ¡n clip cÃ³ audio, dáº«n tá»›i crash `:a matches no streams` trÃªn FFmpeg.
        r1   rY   z2
[PROBE 3B - FFprobe Path Vulnerability Analysis]:z  ffmpeg_exe:        z  corrupted_ffprobe: z  Path exists?:      zffmpeg-9.0.2-full_buildFzFEmpirical proof: corrupted_ffprobe points to a non-existent directory!z  canonical_ffprobe: z*get_ffprobe() points to a valid executableN)r	   ÚreplaceÚosÚpathr‹   rŒ   r
   )rŽ   r�   Ú
ffmpeg_exeÚcorrupted_ffprobeÚis_corrupted_path_existingÚcanonical_ffprobes         r3   Ú5test_probe_03b_orchestrator_fallback_ffprobe_path_bugzWTestAdversarialM4AudioConcatProbe.test_probe_03b_orchestrator_fallback_ffprobe_path_bug!  s  € õ  ‘\”\ˆ
Ø&×.Ò.¨x¸ÑCÔCÐÝ%'¤W§^¢^Ð4EÑ%FÔ%FÐ"åÐDÑEÔEÐEÝÐ2 jÐ2Ð2Ñ3Ô3Ð3ÝÐ9Ð&7Ð9Ð9Ñ:Ô:Ð:ÝÐBÐ&@ÐBÐBÑCÔCÐCð %¨
Ð2Ð2Ø-°Ð6Ð6Ð6ØXñ 7Ô6Ð6õ
 (™MœMÐÝÐ9Ð&7Ð9Ð9Ñ:Ô:Ð:ÝŒw�~Š~Ð/Ñ0Ô0Ð^Ð^Ð2^Ñ^Ô^Ð0Ð^Ð^r5   c           
      ót  ‡— t          |dz  dd¬¦  «        }t          |dz  dd¬¦  «        }t          |¦  «        t          |¦  «        g}t          ¦   «         }|dz  }|                     |t          |¦  «        dd	d
¬¦  «         |dz  }|                     |t          |¦  «        dd	d¬¦  «         t	          |¦  «        }t	          |¦  «        }	t          |d         dz
  ¦  «        dk     sJ ‚t          |	d         dz
  ¦  «        dk     sJ ‚t          ¦   «         Šdt          dt          dt          dt          dt          f
ˆfd„}
 |
|ddd¬¦  «        } |
|ddd¬¦  «        }t          d¦  «         t          d|d›d�¦  «         t          d|d›d�¦  «         |d k     s||d!z
  k     sJ d"|› d#|› d$�¦   «         ‚d%S d%S )&uK  
        PROBE 4: Kiá»ƒm chá»©ng tÃ­nh Ä‘á»“ng bá»™ tuyá»‡t Ä‘á»‘i cá»§a lá»�i thoáº¡i / Ã¢m thanh á»Ÿ cuá»‘i timeline.
        - Shot 1 (0.0s - 2.0s): Táº§n sá»‘ tháº¥p 220Hz.
        - Shot 2 (2.0s - 4.0s): Táº§n sá»‘ cao 1000Hz (Ä‘áº¡i diá»‡n cho thoáº¡i quan trá»�ng á»Ÿ shot 2).
        - Trong Mode A: Ã‚m thanh 1000Hz cá»§a Shot 2 Báº®T BUá»˜C báº¯t Ä‘áº§u chÃ­nh xÃ¡c táº¡i timestamp 2.0s (Â±0.03s do micro-fade).
        - Trong Mode B (crossfade=1.0s): Ã‚m thanh 1000Hz bá»‹ kÃ©o vá»� báº¯t Ä‘áº§u táº¡i timestamp 1.0s (sá»›m 1.0s trÆ°á»›c khi chuyá»ƒn cáº£nh video!).
        zdialogue_s1.mp4r   éÜ   r~   zdialogue_s2.mp4iè  zprobe_sync_mode_a.mp4r„   Fr†   r€   zprobe_sync_mode_b.mp4r   rM   g      @rˆ   Ú
video_fileÚstartr   r   r   c                 óŽ  •— ‰dt          |¦  «        dt          |¦  «        dt          | ¦  «        dd|› d�ddd	g}t          j        |d
d
¬¦  «        }|j                             ¦   «         D ]Y}d|v rS	 t          |                     d¦  «        d                              ¦   «         d         ¦  «        c S # t          $ r Y ŒUw xY wŒZdS )Nz-ssr(   r   re   zbandpass=f=z:width_type=h:w=50,volumedetectr   rf   rg   Trh   zmean_volume:ri   r   g     ÀXÀ)r.   r/   r0   rk   rl   rW   rm   Ú	Exception)rÂ   rÃ   r   r   r2   rZ   rq   r1   s          €r3   Úextract_sample_volumezvTestAdversarialM4AudioConcatProbe.test_probe_04_dialogue_cut_alignment_at_timeline_tail.<locals>.extract_sample_volumeY  sê   ø€ à˜�s 5™zœz¨4µ°X±´ÀÅcÈ*ÁoÄoØÐJ TÐJÐJÐJØ�f˜cðˆCõ
 ”. °TÀÐEÑEÔEˆCØœ
×-Ò-Ñ/Ô/ð ð �Ø! TÐ)Ð)ðÝ$ T§Z¢Z°Ñ%?Ô%?ÀÔ%B×%HÒ%HÑ%JÔ%JÈ1Ô%MÑNÔNÐNÐNÐNøÝ$ð ð ð Ø˜ðøøøð *ð
 �5s   Á2?B4Â4
CÃ Cg333333ó?gš™™™™™Ù?)rÃ   r   r   z4
[PROBE 4 - Dialogue Cut Alignment at t=1.2s..1.6s]:z7  Mode A (Boundary Smoothing) 1000Hz Volume at t=1.4s: z.1fz dB (Clean separation)z7  Mode B (Acrossfade)         1000Hz Volume at t=1.4s: z dB (Audio leaked prematurely!)g     €AÀg      $@z<Mode A must prevent premature audio leak before cut! Vol A: zdB vs Vol B: ÚdBN)r4   r.   r   rŠ   r_   r�   r	   r   rW   rX   rŒ   )rŽ   r�   Ús1Ús2r“   r–   Úout_aÚout_brž   r™   rÆ   Ú
vol_a_1000Ú
vol_b_1000r1   s                @r3   Ú5test_probe_04_dialogue_cut_alignment_at_timeline_tailzWTestAdversarialM4AudioConcatProbe.test_probe_04_dialogue_cut_alignment_at_timeline_tail>  sD  ø€ õ ˜HÐ'8Ñ8À3ÈSÐQÑQÔQˆÝ˜HÐ'8Ñ8À3ÈTÐRÑRÔRˆå�R‘”�#˜b™'œ'Ð"ˆÝ&Ñ(Ô(ˆàÐ2Ñ2ˆØ×*Ò*¨5µ#°e±*´*ÈCÐ`eð  mAÐ*ñ  	Bô  	Bð  	BàÐ2Ñ2ˆØ×*Ò*¨5µ#°e±*´*ÈCÐ`eÐlxÐ*ÑyÔyÐyå˜EÑ"Ô"ˆÝ˜EÑ"Ô"ˆå�6Ð+Ô,¨sÑ2Ñ3Ô3°cÒ9Ð9Ð9Ð9Ý�6Ð+Ô,¨sÑ2Ñ3Ô3°cÒ9Ð9Ð9Ð9å‘”ˆð	­dð 	½5ð 	ÍEð 	ÕY\ð 	Õafð 	ð 	ð 	ð 	ð 	ð 	ð +Ð*¨5¸ÀcÐPTÐUÑUÔUˆ
Ø*Ð*¨5¸ÀcÐPTÐUÑUÔUˆ
åÐFÑGÔGÐGÝÐnÈ
ÐnÐnÐnÐnÑoÔoÐoÝÐwÈ
ÐwÐwÐwÐwÑxÔxÐxà˜EÒ!Ð! Z°*¸tÑ2CÒ%CÐ%CÐ%CØrÈ:ÐrÐrÐdnÐrÐrÐrñ &DÔ%CÐCÐ!Ð!Ð%CÐ%Cr5   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r¢   r¬   r¶   r¿   rÎ   © r5   r3   rx   rx   †   sw   € € € € € Ø[Ð[ðOið Oið Oiðb%Qð %Qð %QðNið ið ið@_ð _ð _ð:3
ð 3
ð 3
ð 3
ð 3
r5   rx   Ú__main__r8   z-s)r   r   r   TFr   r   )r`   ra   )%rÒ   r¹   Úsysr:   ÚmathÚshutilr/   Úpathlibr   Útypingr   r   r   ÚpytestÚ__file__Úresolver+   ÚPROJECT_ROOTÚPIPELINE_DIRr.   rº   ÚinsertÚaudio_continuity_enginer   r	   r
   Úproduction_orchestratorÚporW   rX   Úboolr4   r_   rv   rx   rÏ   ÚmainrÓ   r5   r3   ú<module>rå      s[  ðð
ð 
ð 
€	€	€	Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø €€€àˆt�H‰~Œ~×%Ò%Ñ'Ô'Ô.Ô5€ØÐ6Ñ6€Ø€3€|ÑÔ˜CœHÐ$Ð$Ø„H‡O‚O�A�s�s˜<Ñ(Ô(Ñ)Ô)Ð)à RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ $Ð $Ð $Ð $ð
 ØØØØØØð'ð 'Øð'àð'ð ð'ð ð	'ð
 ð'ð ð'ð ð'ð ð'ð 
ð'ð 'ð 'ð 'ðT˜4ð  D¨¨c¨¤Nð ð ð ð ð<ð  Dð ¸5ð ÐY\ð Ðkpð ð ð ð ð8k
ð k
ð k
ð k
ð k
ñ k
ô k
ð k
ð\ ˆzÒÐØ€F„K�˜4 Ð&Ñ'Ô'Ð'Ð'Ð'ð Ðr5   