
    Y&j
                         d dl Z d dlZd dlZd dlZd dlmZ  ed          ZdZdZ	dZ
edz  Zedz  Zed	z  Zed
z  Zedz  Zedz  Zedz  Zedz  ZdZd ZddZd ZddZd Zd Zedk    r e             dS dS )    N)PathzG/data/video-pipeline/Youtube-Video-Maker/Project/01062026-005-Ly-Nam-Dezhttp://192.168.1.104:8002/probez192.168.1.10411210119zoutput/main_story.mp4zoutput/main_story_probe.jsonzoutput/concat_report.jsonzparts/part_ranges.jsonzoutput/qa_main_storyframesz output/main_story_qa_report.jsonz'logs/step16_qa_main_story_manifest.jsong      ?c                 R    t          t          j        d          | z   d           d S )Nz%Y-%m-%d %H:%M:%S T)flush)printtimestrftime)msgs    $scripts_run_step_16_qa_main_story.pylogr      s+    	$-,
-
-
34@@@@@@    x   c                    t           j                            | t          j        |d                              d          ddid          }t           j                            ||          5 }t          j        |                                	                    d                    cd d d            S # 1 swxY w Y   d S )	NFensure_asciiutf-8zContent-Typezapplication/jsonPOST)dataheadersmethodtimeout)
urllibrequestRequestjsondumpsencodeurlopenloadsreaddecode)urlpayloadr   reqresps        r   	post_jsonr(      s    
.
 
 Ze444;;GDD!34	 !  C 
		W		5	5 7z$))++,,W55667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   .9B44B8;B8c           
         t          t          dt          |           i          }|                    di           }|                    dg           }d |D             }d |D             }t          |           t	          |                    d          pd          |                    d          t          |                    d	          pd          t          |          t          |          |||d
	S )N
input_pathformatstreamsc                 D    g | ]}|                     d           dk    |S )
codec_typevideoget.0ss     r   
<listcomp>zprobe.<locals>.<listcomp>*   .    BBB1155#6#6'#A#AQ#A#A#Ar   c                 D    g | ]}|                     d           dk    |S )r.   audior0   r2   s     r   r5   zprobe.<locals>.<listcomp>+   r6   r   durationr   format_namesize)	pathduration_secr:   r;   	has_video	has_audiovideo_streamsaudio_streamsraw)r(   PROBE_ENDPOINTstrr1   floatintbool)r<   docfmtr,   r/   r8   s         r   proberJ   &   s    
N\3t99$=
>
>C
''(B

Cggi$$GBBBBBEBBBBBED		cggj116Q77ww}--CGGFOO(q))%[[%[[
 
 
r   X  c                     ddt           ddddddddt           | g}t          j        |d	d	|
          }|j        |j        |j        | dS )Nsshpassz-psshz-ozStrictHostKeyChecking=noz!PreferredAuthentications=passwordzPubkeyAuthentication=nozroot@T)capture_outputtextr   )
returncodestdoutstderrcmd)WORKER_PASSWORKER_HOST
subprocessrunrQ   rR   rS   )rT   r   fullps       r   workerr[   9   sd    4e(1'sD 	tDtWMMMA,!(ahWZ[[[r   c           	          t           | d| ddz  }dt            d| ddt           d| d	}t          |d	
          }|t          | d          t	          |          |                                |dS )N_z.3fz.jpgz
mkdir -p 'z0' && ffmpeg -y -hide_banner -loglevel error -ss z -i 'z' -frames:v 1 -q:v 2 ''r   r      )labeltimestamp_sec
frame_pathokr[   )
FRAMES_DIR
MAIN_VIDEOr[   roundrD   exists)tsnameoutrT   ress        r   extract_framerl   E   s    
$------
-C	&Z 	& 	&68Q	& 	&CM	& 	&"	& 	& 	& 
 c
"
"
"CE"aLLCX[XbXbXdXdpstttr   c                  
   t                               dd           t                              dd           t          j                            dd           t
                                          st          t
                    t          j	        t                              d                    } t          j	        t                              d                    d         }t          t
                    }t          d |D                       }|d         |z
  }|d         }dt          d	t!          d
|dz                      fd|dz  fdt!          d
|dz
            fg}d}g }t#          |d d         d          D ]\  }	}
|t%          |
d                   z  }|                    d|	dd|	dz   ddt!          d|dz
            f           |                    d|	dd|	dz   ddt          |dz
  |dz             f           d ||z   D             }dt
           d}dt
           d}t)          |d           }t)          |d           }d! |d"                                         |d#                                         z   D             }d$ |d"                                         |d#                                         z   D             }t
                                          |d%         |d&         t-          |          t.          k    |                     d'          d(k    t3          d) |D                       t5          |          d*k    t5          |          d+}t3          |d,         |d%         |d&         |d-         |d.         |d/         |d0         g          }i d1t6          j        d2d3d'|rd4nd5d4|d6t;          t
                    d|d         d7|d8t=          |d9          d:|d;t;          t                    d<|d=d> |D             d?d@ |D             dAdB |D             dC|dD|dE|rdFndGdHdIdJgi}t>                               t          j!        |dKdLM          d           t                               t          j!        t6          j        d3|d'         t;          t>                    t;          t
                    |d         t;          t                    dNdKdLM          d           tE          dOt          j!        |d'         ||d         t5          |          t5          |          t5          |          dPdKQ          z              d S )RNT)parentsexist_okr   )encodingpartsc              3   @   K   | ]}t          |d                    V  dS )r=   N)rE   )r3   rZ   s     r   	<genexpr>zmain.<locals>.<genexpr>Y   s/      @@AuQ~.//@@@@@@r   r=   earlyg      >@g      ?g{Gz?midg      ?lateg     F@g           )startjoin_02dr]   _beforeg      ?_afterg?c                 4    g | ]\  }}t          ||          S  )rl   )r3   ri   rh   s      r   r5   zmain.<locals>.<listcomp>i   s&    JJJ($mB%%JJJr   z!ffmpeg -hide_banner -nostats -i 'zC' -vf blackdetect=d=0.30:pix_th=0.10 -an -f null - 2>&1 | tail -200zA' -af silencedetect=n=-45dB:d=0.80 -vn -f null - 2>&1 | tail -200i  r   c                     g | ]}d |v |	S )black_r   r3   lines     r   r5   zmain.<locals>.<listcomp>u   s$    uuuTdlptdtdtDdtdtdtr   rR   rS   c                     g | ]}d |v |	S )silence_r   r   s     r   r5   zmain.<locals>.<listcomp>v   s$    }}}tjtx|j|j|dj|j|j|r   r?   r>   status	completedc              3   &   K   | ]}|d          V  dS )rc   Nr   r3   fs     r   rs   zmain.<locals>.<genexpr>~   s&      88A$888888r   r   )main_existsr?   r>   duration_reasonableconcat_completedframes_extractedblackdetect_clearsilencedetect_events_countr   r   r   r   r   
project_idstep   passedneeds_reviewinput_videotarget_total_duration_secduration_diff_secr_   rJ   concat_reportcheckscheckpointsc                 :    g | ]\  }}|t          |d           dS r_   )r`   ra   rf   r3   nts      r   r5   zmain.<locals>.<listcomp>   s,    [[[tq!!eAqkkBB[[[r   
part_joinsc                 :    g | ]\  }}|t          |d           dS r   r   r   s      r   r5   zmain.<locals>.<listcomp>   s,    TTTdaU1a[[AATTTr   r   c                 J    g | ] }d  |                                 D             !S )c                 &    i | ]\  }}|d k    ||S )r[   r   )r3   kvs      r   
<dictcomp>z#main.<locals>.<listcomp>.<dictcomp>   s#    @@@TQ!x--Aq---r   )itemsr   s     r   r5   zmain.<locals>.<listcomp>   s/    QQQQ@@QWWYY@@@QQQr   blackdetect_eventssilencedetect_eventsdecisionzsCan proceed to intro/outro/BGM packaging only after human visual sync spot-check of extracted frames/video samples.z4Do not proceed until QA findings are reviewed/fixed.manual_qa_requiredzOWatch early/mid/late checkpoints and part joins to confirm voice/subtitle sync.zZConfirm transitions are smooth and no heading image holds under following scene narration.F   )r   indent)r   r   r   	qa_reportr   r=   
frames_dirzDONE )r   r   r9   r   black_eventssilence_eventsr   )#QA_DIRmkdirrd   MANIFESTparentre   rg   FileNotFoundErrorr   r!   CONCAT_REPORT	read_textPART_RANGESrJ   summinmax	enumeraterE   appendr[   
splitlinesabsDURATION_TOLERANCEr1   alllenPROJECTri   rD   rf   REPORT
write_textr   r   )concatrangesmediatarget_totalduration_diffr9   r   
cumulativejoinsidxpartr   	black_cmdsilence_cmdblacksilencer   r   r   r   reports                        r   mainr   P   s   
LLL---TD111O$666 ,
+++Z///AABBFZ--w-??@@IF*E@@@@@@@L.)L8M^$H	#dCX_55667	3	S(T/**+K
 JEvcrc{!444 d d	TeD0111
:c:::A::::CZRVEV<W<WXYYY9c999A99993x#~z\`O`;a;abccccJJkE6IJJJF	MJ 	M 	M 	M 
	KJ 	K 	K 	K  9c***E[#...GuuU8_%?%?%A%AE(OD^D^D`D`%`uuuL}}wx'8'C'C'E'EPXHYHdHdHfHf'f}}}N "((**;';'"=115GG"JJx00K?8888888 ..!3&).&9&9
 
F }vk2F;4G$%v.@'A6J\C]"#  F
gl 	f8((. 	&	
 	s: 	n- 	$\ 	U=!44 	 	]++ 	& 	[[{[[[ 	TTeTTT 	QQ&QQQ 	l  	!" 	  NT  P  J  J  ZP#$ 	]h
% F. djeAFFFQXYYY
l"[[:n-*oo$ $ !% % % 07  8 8 8 $*x(8FX]^lXmy|  ~D  zE  zE  WZ  [g  Wh  Wh  |  @N  |O  |O  P  P  _d  e  e  e  	e  f  f  f  f  fr   __main__)r   )rK   )r   rW   r	   urllib.requestr   pathlibr   r   rC   rV   rU   re   
MAIN_PROBEr   r   r   rd   r   r   r   r   r(   rJ   r[   rl   r   __name__r   r   r   <module>r      sV                  
$X
Y
Y2..
55
5500	)	)h
	5	5>> A A A7 7 7 7  &	\ 	\ 	\ 	\u u uYf Yf Yfx zDFFFFF r   