Ë
    Û|¶jú  ã                   ó�   — d Z ddlZddlZddlmZ ddlmZmZ edz  Zdede	fd„Z
defd	„Z	 	 dd
edede	dede	dz  dedz  defd„Zy)zRRender a 9:16 YouTube Short from pre-cleaned footage, narration and ASS subtitles.é    N)ÚPath)ÚFOOTAGE_DIRÚ
OUTPUT_DIRÚcleanÚpathÚreturnc                 óœ   — t        j                  dddddddt        | «      gddd¬	«      j                  }t	        |j                  «       «      S )
NÚffprobez-vÚerrorz-show_entrieszformat=durationz-ofzdefault=nw=1:nk=1T)Úcapture_outputÚtextÚcheck)Ú
subprocessÚrunÚstrÚstdoutÚfloatÚstrip)r   Úouts     ú"/root/workspace/ytshorts/render.pyÚ	_durationr      sQ   € Ü
�.‰.Ø	�D˜' ?Ð4EØ	Ð#¤S¨£Yð	0à $¨dô÷ �fð	 ô
 �—‘“ÓÐó    c                  ó‚   — t        t        j                  d«      «      } | st        d«      ‚t	        j
                  | «      S )Nz*.mp4z0No cleaned footage. Run: python3 prep_footage.py)ÚsortedÚ	CLEAN_DIRÚglobÚFileNotFoundErrorÚrandomÚchoice)Úclipss    r   Ú_pick_footager!      s3   € Ü”9—>‘> 'Ó*Ó+€EÙÜÐ RÓSÐSÜ�=‰=˜ÓÐr   Úmp3_pathÚass_pathÚaudio_durationÚstemÚstart_offsetÚfootage_pathc           
      ó¼  — |xs
 t        «       }t        |› d�z  }|dz   }t        |«      }	|€0t        t	        j
                  dt        d|	|z
  dz
  «      «      d«      }t        |«      j                  dd«      j                  d	d
«      }
g d‘d‘d‘d‘d‘t        |«      ‘d‘t        |«      ‘d‘t        | «      ‘d‘d|
› �‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d ‘d!‘d"‘d#‘d$‘|d%›‘d&‘d'‘t        |«      ‘}t        d(|j                  › d)|d*›d+|d*›d,�«       t        j                  |d-d-¬.«      }|j                  dk7  rt        d/|j                  d0d  › �«      ‚|S )1Nz.mp4g      à?r   g        é   é   ú\ú/ú:z\:Úffmpegz-yz-stream_loopz-1z-ssz-iz-vfzass=z-mapz0:v:0z1:a:0z-c:vÚlibx264z-presetÚfastz-crfÚ21z-pix_fmtÚyuv420pz-c:aÚaacz-b:aÚ192kz-arÚ44100z-tz.2fz	-movflagsz
+faststartz	[render] z start=z.1fzs len=ÚsT)r   r   zFFmpeg failed:
i0øÿÿ)r!   r   r   Úroundr   ÚuniformÚmaxr   ÚreplaceÚprintÚnamer   r   Ú
returncodeÚRuntimeErrorÚstderr)r"   r#   r$   r%   r&   r'   ÚfootageÚoutputÚlengthÚfootage_durÚass_escapedÚcmdÚresults                r   Úrender_shortrG      sn  € ð Ò-œm›o€GÜ˜T˜F $˜-Ñ'€FØ˜cÑ!€FÜ˜GÓ$€KàÐÜœVŸ^™^¨A¬s°3¸ÀfÑ8LÈqÑ8PÓ/QÓRÐTUÓVˆä�h“-×'Ñ'¨¨cÓ2×:Ñ:¸3ÀÓF€KðØðØðàðàðð 	ðô �<Ó ðð 	ð	ô �'‹lð	ð
 	ðô
 �(‹mðð 	ðð �k�]Ð#ðð 	ðð ðð  ðð ")ðð 	ðð ðð %ðð '-ðð /5ðð 7;ðð =Gðð IRðð 	ðð ðð ðð  &ðð (-ðð /6ðð 	ðð ˜�ðð 	ðð "ðô 	ˆF‹ð€Cô 
ˆI�g—l‘l�^ 7¨<¸Ð*<¸FÀ6È#À,ÈaÐ
PÔQÜ�^‰^˜C°¸4Ô@€FØ×Ñ˜AÒÜÐ-¨f¯m©m¸E¸FÐ.CÐ-DÐEÓFÐFØ€Mr   )NN)Ú__doc__r   r   Úpathlibr   Úconfigr   r   r   r   r   r!   r   rG   © r   r   ú<module>rL      s†   ðÙ XÛ Û Ý ç *à˜'Ñ!€	ð�Dð ˜Uó ð �tó  ð /3Ø-1ñ˜4ð ¨4ð Àð Ècð Ø$ t™|ðà# d™{ðà6:ôr   