
    i                         d dl Z d dlZd dlZdededee   fdZdee   defdZde	d	edefd
Z
de	defdZedk(  r	dZdZdZdZyy)    Nentryinput_file_pathreturnc                 8  K   dddddddd|  d	d
|g}t        j                  |t         j                  j                  t         j                  j                  d d{   }|j	                          d{   \  }}|r	 t        |j                  d             |j                  dk7  rt        d|j                         |r|j                  d      nd}|r|j                         j                  d      ng }t        |       |S 7 7 # t        $ r Y |w xY ww)ue   
    entry (str) — можно делать списком 

    Возвращает list(str)
    ffprobez-verrorz-hide_bannerz-select_streamszv:0z-show_entrieszstream=z-ofzcsv=p=0:s=|stdoutstderrNignoreerrorsr   zffprobe failed with code  |)asynciocreate_subprocess_exec
subprocessPIPEcommunicateprintdecode	Exception
returncodeRuntimeErrorstripsplit)r   r   entry_get_commandprocr
   r   textouts           /app/server_side_tasks.pyget_video_infor"      s      	
% //	!!&&!!&& D
  ++--NFF	&--x-01 !6t6GHII-36===)D%)$**,

S
!rC	#JJ!
 .  		sI   ADDD4D	5	D?D A.D	D	DDDDcommandc                   K   t        |        t        j                  | t        j                  j                  t        j                  j                  d d{   }|j                          d{   \  }}|r	 t        |j                  d             |r	 t        |j                  d             |j                  dk7  rt        d|j                         |j                  S 7 7 x# t        $ r Y `w xY w# t        $ r Y Qw xY ww)uL   
    Асинхронно запускает программу command
    r	   Nr   r   r   zCommand failed with code )
r   r   r   r   r   r   r   r   r   r   )r#   r   r
   r   s       r!   run_with_command_liner%   .   s      
'N//	!!&&!!&& D
  ++--NFF	&--x-01 	&--x-01 !6t6GHII??%
 .  		
  		sl   ADC&D/C(0	D:C* DC9 34D(D*	C63D5C66D9	DDDDdatatimingsc                 T  K   |d   ^}}}}t         j                  j                  dt         j                   |  t         j                   |       }t         j                  j	                  || d|       }t         j                  j	                  || d|       }	|j                  d      D 
cg c]1  }
|
j                  d      D cg c]  }|j                  dd       c}3 }}
}g }t        |      }|d	k  rt        t        |      D ]=  \  }}d
|d    d|d	    d|d	z    d|d    d|d	    d|d	z    d}|j                  |       ? dj                  dj	                  t        d	t        |      d	z         D cg c]	  }d| d  c}      |dj	                  t        d	t        |      d	z         D cg c]	  }d| d  c}      |      }dj	                  |       d| }dd|d|ddddd|	g}t        |       t        |       d {    |	S c c}w c c}}
w c c}w c c}w 7 w)Nvideoworkdir.z_cut.
-:z\:   z[0:v]trim=start='r   z':end='z',setpts=PTS-STARTPTS[voutz];[0:a]atrim=start='z',asetpts=PTS-STARTPTS[aout]z1{}concat=n={}:v=1:a=0[v];{}concat=n={}:v=0:a=1[a]r   z[voutz[aout;ffmpeg-i-filter_complex-mapz[v]z[a]-y)ospathabspathsepjoinr   replacelen
ValueError	enumerateappendformatranger   r%   )user_idr&   r'   sessionnameext_root_directory
video_pathout_pathlinejarrtime_arrconcat_nntimingr    toutscomplex_statementfinals                         r!   ffmpeg_video_cutterrV   H   s    !']GT3WW__wrvvhwixy%QRNnauo>Jww||NtfE#,?@H FM]]SWEXEXT

3813	8EX   H3xH!|s^	6!&)GF1I;>XYZ]^Y^X__stz{|t}s~  F  GM  NO  GP  FQ  Ql  mn  qr  mr  ls  st  u $ ?EE
E!S]Q5F,GH,GqeA3aL>",GHI
E!S]Q5F,GH,GqeA3aL>",GHI	D 88H-.av6 	E 
%L

&&&OE 	9 IH* 'sP   B,H(.HHH$BH(:H,H(4H!AH(
H&H(HH(c                 z  K   |d   \  }}}}}t         j                  j                  dt         j                   |  t         j                   |       }t         j                  j	                  || d|       }t         j                  j	                  || d|       }	|d   dk(  rdnd}
d	}t        d
|       d{   }t        |       t        |d         t        |d         }}|d   }t        |d         }t        d| d| d| d| d| 
       ||kD  rt        d       d}d}nt        d       d}d}|dk(  rt        d|        g d}nt        d|        g }d| d | d!}d"g|d#|d#|
d#|d$d%d#d&| d'| d(| d)|d*d+d*d,d-d.d/d0d1|	}t        |       d{    |	S 7 7 w)2u  
    Производит list с аргументами для командной строки ffmpeg. 

    user_id — получается из message.from_user.id, его нужно передавать для формирования пути 

    data получается из State.get_data(). Можно закидывать всё, алгоритм ищет только значения по ключам 'subs', 'watermark', и список по ключу 'video'.
    Возвращает список из 2 элементов. 1 — аргументы; 2 — прямая ссылка на выходной файл в системе
    r)   r*   r+   z_edited.	watermarkwzklops_icon_white.pngzklops_icon_black.pngzklops_logo_white.pngz!width,height,color_space,duration)r   r   Nr   r/         u   Ширина из data: u   , реальная: u   
Высота из data: u   
Длительность: u'   Видео горизонтальноеzscale=w=oh*dar:h=rw/5zscale=w=rh/3:h=ow/daru#   Видео вертикальноеzscale=w=rh/5:h=ow/darzscale=w=rw/3:h=ow/darreserveduC   У видео нестандартное пространство: )z-bsf:vzQh264_metadata=colour_primaries=1:transfer_characteristics=1:matrix_coefficients=1z-colorspacer/   z
-color_trcr/   z-color_primariesr/   u?   У видео стандартное пространство: z[1][3:v]z|[icon];[3:v][icon]overlay=(W-w)/2:(H-h)/2:format=auto[iot];[0:v][iot]blend=all_mode=overlay:all_opacity=0.5[back];[2:v][3:v]zD[logo];[back][logo]overlay=(W-w)-h:h:format=auto,format=yuv420p[out]r2   r3   z-flavfizcolor=c=0x7F7F7F:s=xz:d=r4   r5   z[out]z0:a?z-c:vlibx264z-presetfastr6   )
r7   r8   r9   r:   r;   r"   r   intfloatr%   )rC   r&   rD   rE   rF   widthheightrH   rI   rJ   watermark_path	logo_path
video_info
real_widthreal_heightcolor_spaceduration	scaleExpr
RscaleExprr   rT   rU   s                         r!   ffmpeg_logo_writerrn   t   s     )-W%GT3vWW__wrvvhwixy%QRNnauo>Jww||NtfHSE,BCH"&{"3s":@V  'I%1" J 
*!*Q-0#jm2DJQ-KZ]#H	$UG+?
|Keflem  nB  CN  BO  Ok  lt  ku  v  wK78+	,
34+	,
j ST_S`ab	
 	OP[}]^"9+  .j  ku  jv  vz  { 		 	 		
 	 	 	 	 	 	 	 j\;-s8*E 	 	 	  	!" 	#$ 	%& 	'( 	)* 	+, 	-. 	/0 	1E6  
&&&OC@ 's%   B8F;:F7;C5F;0F91F;9F;__main__z%E:\pythonB0T\834893201\test2\root.mp4z(E:\pythonB0T\834893201\test2\wat_sub.mp4z1E:\pythonB0T\834893201\test2\klops_logo_white.pngz%E:\pythonB0T\834893201\test2\root.srt)r   r7   r   spstrlistr"   ra   r%   dictrV   rn   __name__input_videooutput_videorX   subs     r!   <module>rz      s     
 " "c "d3i "Lc s 4)T )C )C )XQD QS Qj z:K>LDI3D	 ry   