/tplayer

一个Linux终端播放器 , 使用字符绘制图片/视频 , 并按照帧率播放

Primary LanguagePython

tplayer

A termial media play for linux

Usage :

Usage : 
        python tplayer.py [VIDEO_PATH|IMAGE_PATH]
Author : 
        WangYihang <wangyihanger@gmail.com>

Example :

python tplayer.py BruceLee.jpg
oottzzzzzkotkkkkkeeewsVVwVlsssewswwwVeVsseJweVJJJkeeeeJtootokk@CCCUxxzxzoozxJJJJJJJVVwwVVVwwwwwJJJJJJJJJeewwwwwwwweeeeeeeeeeJkJJttttttttttttttttttttttttt
ozzzzookkeJJeVVVVwwVsssVsaa$$$l$$$aalllllsssssVVlsweeewVlJk[#iUCU[qvTT?F?uy)]CokJkeJJJJJJewwwwwwwwwwwwwwVVwwwwwwwweeeeeeeeeeeJJJkkJkkkkkkkkkkkkkkkkkkkkkk
zzxzzztkJJJJwVwwwVsVVaaaaaaP$$aP$aaalaalssssslsssVeJeeJkJh#)I(\:     n     ;;}\Yy)i[htkJkeeweeewVsewwwwwwweeeewwwweeeeeeeeeeeJJJJkJJkkkkkkkkkkkkkkkkkkkkk
oootttttJJJeeeweVVVVsa$aaaa$$$aaaaaaaaaaaaassslVtoxI(%iC#r|<          =!ycYnT}*!L;1Ycn/\n@zkweVVVsweewVVVVVVVVVVVVwwwweeeeeeeJJJJJkkkJJJkkkkkkkkkkkkkkkkk
ototkkkkkkJeeeeeVVVVVsVaaaaaaaalaaaaalVaallVJo[%;                            : /Yv|}!uL|}}}nzswVVVVVVVVVVVVVwwwwwwwwwweeeeeeeJJJJJkkkJJJkkkkkkkkkkkkkkkJJ
ototkkkkJJeeeeewVVVVssVVVVaaaassVlasaVssasJq=                         {  r  <{\;*; *<=: ;!*=TnxJJswVVsalsVVswwwwwweeeeeeeeeeeeeweekkkJJJkkJJJkttkkktkJeww
oottkktJJJJeweeeeVVVVsVVsVVslalaaaa$Vallt1                               1  {  }?T*;! <L/}:\*!}!L]ktslslsssllsVVVVwwwVwwwwwwwwwwewJJJJJJJkkJJkkkJJJJeJJJe
otttkktkJeeeeeewVVssalasVlaaaaaaalll$4({;                             ;      =1          !   ;;=1;!(kssslslslsllllVssVwwVVwwwwVVwVeJeJkJkVwVweeeJeeeeeeJe
ktJkttJJeewwwwVVVsssalalaaaaaaaaaalUiqF;              ;               |yu<L!  L  :                |}u]CowlllllasssssssssVVVwVssVwVVVVVVVVVVweeeeeVeeewekw
kkJJJJJJwwwwVVVVwVVsssllla$PPPa$$JJr=::              !r               :: > <>                      <}/c[oeslslllllsVssssssVslssVaVVVVVVVVVVVVeeJeVVVVVeJw
eeJeeeeeVVVVwwVVwVVVVVslVlal$a$s)=;:     < };         q     r  =*  =!   *                            :}cqtVlaalllsVVVVssssllslVlsVVVVVVVVVVVVVVVVVVVVVwVs
eJwwwVVVweVVwwVVwVVsasaaaaaaaP@n{       r  ;   >= =} !   =   <nL|/{Y <rm;                              ;<m4tslllllssssssssssVsssssVVVVwVwVVVVVVVVwVVVVVsV
wewwweeeeeVVVVVVVVVVVlaa$$aa$k?>       T   q   <q<=: :    ;}\rY:TTTT*< T}7F                             : =yJVsVaslslaaallsssssssVVVwslVVVwwwslssVssssssV
wwwwwVVVwVVVwVVVVVVV$aaa$$$J){:  :     ;:=(   L;}%} *   !T         :={1r                                    LioValllaa$laaalsslsslaassaVVllVssssssVVVssVV
wwVVwwVVsssssssVs$$aaaaPPVhq>         ; <v!   ={Yn}{  =                               =                      =y4ts$$aaa$$aaaaaalalaaaaaaassssllllllsslsss
wwVVVssssssssVslaaaaa$aez[y=      u;==  :r|    ;* :   :=             =y71?1=1T                                 <yoa$aaPP$$aaaaaaa$llaaaaaaalllalsllsllsss
wwVVwVssssVVsllaaaaaaPPJ)r    =; Tr<=    1//=L!!|{*>*; )%VJn|;;;       ::L{{<*<?T=                             =FqtsPPPPa$$aaaaaaaaaaaaal$alllalslllaalll
wewVVVVVVsssllllaaaaaawI;==   nT rmcnI|<:L!77#[fNddZbRNgeKZb$Pkq{<<>  ;><L\Luq(1>*|*: ::                       >u[JlPPPPP$aaaalaaaaaaaaala$lsaaaaallalsls
VVsVsssasssssssaaalaasH ;<;=;yo\ %!(\C1T=r|(VMPN5dZbdbbAARRRARRAdKge7F]Ycnccc(%Ynu?!<;=:::                       q$EQQPP$$aaas$laaaaalls$$$lsslslssssssss
VVVVVlslslalsssssllaa#*=r ;*<;y*; =!}%{| {:UQKKODddDdbRRRRRRAAZRdbNDXd2GNNNOdO3fMaVJIT}*>;=                     <UaaPQEPP$aaaaaaaaaaasllslsslssssssssssls
VVVVsssllllallaaaaaal)7=*{}<}!?   pp<h  <!}$GX55NONXdXZZRRRRRZZbdDONNXNdddbONKKMf3QsJsV4m*:;;<;                 1]agQQEEPPaaaaaaaaaaa$laaslaaaaaaaallaaaa
$sssssssalaaaal$l$PaJH{TTF*TY{>> \7> :   {rMN55KNONNXdZRRRRRRRRbNdGNKfQZOKM2g2llka4UH%qqpcuL ;<<                FKQEQQEEQEP$aaaaaaaaaaaalaa$aaaaaaalaaaaa
$sssssssaaaaaaaaa$Q$apum\I!]!=  *c}   > :!rPGGKKXDOOOXNDO5GjfQohJtkssks3MQaJJ4@ynL*                             |fgQQQQEPPPEPPaa$PP$aaaaa$aaallllllllllll
aslalaaaa$$$aa$$aPQPa4m!rrI}*;:<mr      L>nMgM3GOj532$VIFr*:   =                                                )g2ggQQEPPPPPPPPPPPPPPP$$$$$a$aalaallaall
$aaa$$aa$a$EEEEEEEEQQl(r{r\!><;LTr      /rsojjqq !rcYF{;:                               ;;;;;                   $E22gggQEEPPPPPEPPPPPQP$$$$$$aaaa$$$$aaaa
EP$PEEEEEEPEEEEEEEEgQa#T!F1FL*vu}>      ceC   m/FIymnvmvn?|;:                         = <T|*>>**!*             ;xgggggQQQEQEPPPPPPPPPPP$P$$$$$$$$PPP$PPa$
E$PPPPPPEEEEEEEEEEEQQa@F\7/u>|Fc=*      Fn} 4yzx4UJolPzy7?FFuYr}<; =         :!!           ;;;;>;;:           :\3fMgggggQQEEQEPPPPPPPQEPPEEP$EEPPPPEEEPPP
2PPPPPEEEEEEPPPPPEEQQekm\/I]}!nu;;=     TL Qwtzzh4o4?<=         :>::   <*     }*              =;;;   <:r ;     HKfj2MgggQEEEQEEEPPPgQgEEQQEP$$$$PPEPPPPPP
gEPPPEEEEEQEPPEQQQQEQgPHFYycnn{( <:      : awJkoh(F===:           :;  !yWOu    ;               =:===   Y :     %j2fMMgggQEEEQEQEPPPPPEQQ2MME$PEPEEPEEQEPP
gEPEPEEEEEEEEQQgQggggMfg7u{TuF=|| ==    :I JeJz]%c};<!r|         !y7 L&&AdKJ7     >=;;;;=;:==: :=;*!:          <MjffM2gQQQEEEEEEEEEEEEEQQEEQPPPQEQQggEPPP
QEEQEEEEEEQQQQEQQggMMMfs4(In%cyL*   :  : myIJkVk[hmYumqyu1r<>>{\ch* gb&WZXf4hHm   >>==;;;;===;<;  *}*           e3ffM2gQQQQQQQQQQQQQQQQQQQEEP$QQQggQQQQQQ
ggQQQEQQQQQgQQQQQg2MMffjMCp(ccL|4>;     = ; rxlw@UC#)mu1!r\/\Fv@H {ASRW&dOMsxhy?Y   {T\\\\{!;=><<>;;:          :J2fff2gggggQQQQQQQQQQQQQQQQQQEQQQgggggggQ
ggQgQgQQQQggggggg2MfMjj33PYuy\u{LY=    =PV*{<Tp(iH@oxo4CmYuuuFv<}oSARASZX33$Vi/?T#|  ;<**!|}}}<;=;|  |        : ojjffM22ggQQQQQQQQQQQQQQQQQQQQQQQggggQQEE
2Qgggggggggggg22MMMfj3jGKGHuu1Lc1c!;  :*@d& > :7c#qyqmY??TL|L=:z0ZdddRZZdN5glsp**{]a/*:           }%(%         }g2fjjMM22ggggQQQQQQQQQQQQQQQQQQQgggggQEEE
MQQgggggggggggg2MMMfffjGG3Mycyr{vu7|!: L@ZRZAs=  >!<>>=1Zy  k9&SEKOXbRARRDOQPkke#/r)EPM$4nrTLL{T17v)Hp     < ==pGfMMffMMMMggggQQQgQQQQQQQQQQQQQQQgggggQEE
fgg2g2gggggg222MMMMffjjGGGG2puI#hu1?}::</dDdDdM%F  =>::>hW6A0Wa[QdddXdRSNMso#YmyIIyr[t$PQQEQa#u7/?uy))=   !* :*lj3ffffMMM2g2ggggQQQQQQQQQQQQQQEQgggggggQQ
f2g2g222gggggg2gg22MffjjjjjGPmqrMhT\m|::!MOdXdDDdZSS&00ASSbdQHqEZddNMekx]I/L!|}{!1F!r]ihozxUqY///Fuy(H:: r!T!m(333jffjMMM2g2ggggQQQQQQQQQEEQQQEQQggggQQQQ
f22g22g2MM2222222fMMfffjjjj3Ks]WbNEuFz:=<mO555ONOOONNXNOKMak#)dZgz)r  ;!rr{r<    *!><\4C]i)qnF??/7nv)I!=:%yvo4KG3jffffMMM2gggggQQQQEEQQQQQQQQEQQQggggggQQ
f2M2222MM22222222fMffjfjjjjGG3MJZNSSSX===*jGKO5OKGGjfjfQsJzh3AAARsL<**!< :     =:=;<!*!q@[qmu11\\7cIh[L;cq%JMKKGjjMMffMMggggggggQQQQEQQQQQQQQQQgggggggQQQ
f2222MffMM22222MMMfffjjjjjjGGjg4XbbSSS7;=*2KOOO5K3jffQPskV3dAARRZbbbbbZX[r!>*=>=:==>>*|{\(cc\T1T1?c)#h%*u[aKOKG3jMMMfffM2222gggggQgggEQQQQQQQQQQgggggQQQQ
2ggg2MMfffMMMMMMMfMj3jjjjjj33jME(bRdXDG/*!gXONN3GOjjMPs$2NDZRRRbddbdddbOK5ODXG)=<<>>>***!!u/rTrT?/YyIU)?tKKGG3G3jMfMfffMMMMM2ggggQgggggggggggggQQQQggQQgg
fg222MMMMMfMMMffj3333GGGG33GGGG3x\qDZXRZDC2DXXNNNN5Kfg2GOXDdZdXN5NZDSdXwaE3Em\T{1u}<<>><**}1{Lr1?YIcq]yrKGGGG3jjfMfMffffMMMMM2ggggggggggggggggggQQQQQQQgg
fg2MfMjjjjjfffffjGGGGKKKKGGGGGKGjp!: mh]mYbdXXNOOOKKKKKONDONOEwkVfRCIyF1Lr1!;;;;;;>;<=;>**!T7Lr?1nmmpCqcOKKG33jjfMfMffffMMMMMM2fggQQQggggQQQQgPEPPgQQQQQQ
3Mffffjjjjjjffffjf3GGGKKKKKKKKKGjPH*;;= : PDddODKNKKKKKKK5Kjzq1\puL<}==Fvyn}rT//r;     :;<*rF{T\/cqI)U1]N3G3jjjjjjjfffffMMMMfMMM2gggggggEEQQQPPaa$EQQQQQQ
M2ffffffffffffMfjj333GKKKKKKKKKKKGK#!>;: ::bZDNONOG5GGGGjMgkq};IjgZddbNSddbX5MlzUHvT!!|****LFrT17YyIix|wKGG3jjjjjjjjffffMMM2MMgMgggggggggQQQEQ$aaEgQQQQQQ
MgMMMfffffjjjfj33GGKKKKKKGKKGKKKKKK5f/;=;==yXbNXKKKG3jGGjQas$NddDXXNGfaJ#F\T{<*><<!|Tcccv||}TT//mmv%@ n2KKG3jjjjjjfjjfffMMMM22gMgggggggggQgggEPaa$EQQQQQQ
MMffjj3GGKKKKGGKKKKOOOOKKKKKKKKKKKKOGgC<;:: )OGKKjf22ggggQ$P2G5XD33jMsx%u\1}*<<T}*>|FYyn{!{LrT/uumI[|>kG33jjjjjfMjfjMMMMMMMM22MMMgggggggQEEEEQ$$$$QQQQQQQ
GGK5K5555OOO5OOONOOOONNOKKKKKKKKKK5555G4>:: }oQ2QfggggEslae$PEgGKf3ffMaoC(C#(H[(%%pImc1L}||}r?Fun%): ngG33jjjjffjfMMMMMMMMMMMMMMMgggggggQQQEEQ$sVlQQQQQQQ
5K5555NNNNNO55OOONNNNONO5KGGKKKKKKKKK555j!; L?f@VPPPP$EE$l$sPQPgQ3K5XdbRdddXObNNfkJ#)Y\1T{}r??uYmpm:=zfG33jjjjjjfMffMffMMMffMMMMMggggggggQQEM5OKGM2QQQQQE
5555KKKOKK55555555K5O55OO5KKKKGKKKKGGGK55NXpFLNO]%kVVEgg2QEPgMgjjKKXdRZRZbbbON2PkzU#mcT}TL}r\F/YuFn*vGKjjjjjjjjjfffMMfM22222MMMMMM2MgggQQEPf5XXXOGMQ$EPEQ
GK5KKKK3GGGGKKKK5KK555K5555K5KKKGKKKKKKKKOO){cjX5G77%ztaggQQQQMfjj35XNdddXXNGMaekC(c1*!}{}r1?TrT?\n#K5KKjfjjjjjjMffMMMM22222MMMMMMM22gggggQGONXX5MM$aPPQQ
Q3j3GGjjjjjjGjjj3jfjjKKKK55555KKKGGGG3KKKjKOkszNNNOQL}1)(]hokPQgMgEMMfjfjffE$Vh#(/T*><!!|{T{{{{rT\YzN5KGjjjjjjjjjjffffMMMMMMMMMM22ggggggggM35553fg$EaEgQg
$g22MM2gMMM2MM22Mg2ggQQQQg2QQQQ$P$$QPa$EPalQPsyKONNNKFL}|r\Yy[[JaVsewsaVw@h)i%n/{;><<<*!|!<|}}}{1TFHO55KKKK5G3KGG3fjjfffMMfM222222222MgQg23GGKKGQalEllgQQ
lE$aaasVwwVwVs$aaVJkxzotJkkJtketkJJktkttkkkzoxHOKNNNNf@FL|!***|\c(%)ymYnmY71{<;;;;;<<*<>;>****!}{L1YNNNff$%?TT/mJOK33jffffffffMMfM22222f2fjGfffMeoteawggQ
PPP$lVssJekxx4zzx4xzooootJJekJktkkktozzzzzzzzz4sKNNNOKQ%m?{{r!<<<<<<<<<<<<<<<<<<<<><;;>;<*****!|}}{1>           : CKG3jjfffffffffMMMMMMg2j3GfMMQJoJaaaggQ
jf2MEQQQEawt4@@4xxxxxoooooootottkkozzx4zzoxz4ox4XONOOOGghI7r}}LL|!!!!!!||!!||!**<<<<><*******!!!|}}}r              <PNGjjjjjfffffMMMM2MgMjGjj3MPakellaggQ
ffM2EaasJo4444oxozzooozoozottkJJJJkkktotzzx4444xk3O5OO5KMEV(cYrL{}}}}||}|!!!!*<*<<><<*********!||}|!}                :/KG3jjfffjM2222gggfK5OK3jMMPQa$gQEg
jgQasekx4@@@@@@@zx44xzoktootJJJJJeJJJktoo@@44xzz4G3K55NGG3GjjGGlYr{{|!!**<>;;;<;;><<<>!**|!*!!!**!!<<                 ==<Q3jjfMggggMMgg35NNNOK2M3fg2GGjQ$
VJt@hhhhhh@@@@@hxx44xxotoJJeJJJJeJeJzx44x@@x4ozozKGK55OOOONOXDdDdG]{{!|!<<<>;;;><***!!!||}}|!!|!!|!!*=                 =::;Qg$$$Pgggg2f5ONNOOKgEPa$23G3Q$
CUhhhhhhh@@@@@h4zzzzzkkJJJeeJJJJtoo4x4xxz4xxzzkeVQ5OXOOONNXXXDXdddbXM\\r}!!*<*<!!!!!!!!}}}}}}||!!!!*<    :             ::   =iktkeVV$$KO5NNONOjQ$$Qjfjj2Q
HhhhhhhhU@@@@@4xzxxttJeeeeJekktxxzzxxxzozzzzotwlq!bXXXXNNNNXOK5ONNNXXNj\L{L!!**!!!!!!}{}}}}}}||!!!*;;   :               =      H@@@@C4w235KKjgEaaPEMMg$VJ
i[[[CCCCUU@h@@xzzztkekeeeJJtoooxxx4xxxozzzz4ot7; =@XXXXXXDXNOKGMfGM3ffM$J/L}{|!||!|!!}{{{}}}}}}!!<<>:                           =hh4hUVgQf3QQa@%ympkksk4C
Hi][CCCCh@@@@444xzzokkJJkkkokJJJeJtx4xxxoooCm;;; :>XXDDDDDXXNN3MfgE$ez4CyYr}!|!||||}}{{{{}L{}}!*<>>=:   :   :                     !x4zEGOK5OKQE@CzVQfjMls
)i[C@444xz44444@@xkV$$PEEPseJJkeeJooxxtokh}  =     pOXNNXXNNNNKK5j$Vtz)cTT{{}}}}}}}!}{L{{{L{}**<<>;=    :::::                        43OXNN55fasJJlgfjMas
piChxzxxtotzoJseJes$QgfKK5fskkkekxxz4ssh>=;:   :    KNONNNXXKKGGKfM$l4%mFTL{{{{}{{{}rLLL{L{}}*<<>;;;    ::==:      }Y\\\T*       :/?rrL<>=!IVEfgM2Q2fj2aV
(tssekoztotzVlaaawJVeQMKO5jatkkkktxksJ{ ;           33OOOO55NNOK5jfQQlhHymvn/rr{LL{r?1TTr{L{|*<*<>==:  :====:=  :?{TFF\\1{;     1/???TTT}}|!!|}{1u%Q5jfMM
CPEQEVwkto@htesVJJott$fO55Mstkea$$jC}< T>:          lQ3jGj3GKK5O5OK3j2zz@C[qyvFrTr11\?TrTL{}|**<><=:    ====;= 1?//!c%\/rL!    <T?1??Trrr{}}}}|*|*!!r?/kf
H4tssVVJsaQQfGGjMGG5jGGO5fPa$2jNNU;    <T;          fQQQf2EfjKGKO5KGGjPPtx[]qmcmqiHY71TTr{}|!**<<;;;:===;==;= c<       TL}}=  TTrrrrrrrr{{{{}{{{}}|*!|!*|
%#HCh4z4oV255K3KGKNNKg$s$lfGDGVm       ?T! =        jjggfQEggGGG3ffg$atx]%q)Ivcqp4$P$Y\1{{{}!!!!!<<==;<<*<;              T<<: ;1Lrr{{}{LrL{{}{{}{L{L{L}|!
p)%)pq#HiUVgfjktw$j3PJUim\1\/L      :*   }!         XjMQQMMM2M3OO53fEwehCH(iiH%4kfGKMJ)7TrL{}}{}}|<;;><}{}<               *;< >|rrrLLTT1TTrrrLLLLrLr{}!||
HiHqyyp(UVfO5jletkeI1{{r1??               r; =:     dO5jj22gfONDXNKG3MMMswt4CzxV$3NOfJU[I\r{LLrrr{!;;<*!}}                 ={>!}}{LrL{|}}{{TT1}{LrLrL{||}
sgjMfjjG5XNfkcTL}!|!!}/7                   *r1<:    dbNNONGfMfKXXNKj2EaltoC@C4z2KXbdOjozxez/T?\\?T}<;><!|{}                  *!}|{}{L{LT1111?11?}rL{{}}!!
VQfM3f)\L<<*|||||!!|r/                           L: $ddDdddDXXNNXNXjfEJzChi[oVQdZARRNj5DbAAS&suF1\T{!!|!!>>         <        | 1}|{LT1/\?\??TTTT1|LTrL{|}
MOamcYun/==<{!|||}!}1                       r ;\  !FCNDDdbbbbbdddDdOf2ex4kV$3dASAAAZdbSASSAAAASZbyycYmnm;          q1  r?1\7/TTL =LT1\/\??TTrT??\\7|LL}}}
Jvvmu\\cc; {TrLLL{}/                     ;!}u ;T7  17MDXZbDDbbbbbbddNOfjGOdZAAASSSSRRAAASSSSSAASSARbAjzY{;/Y7;=>  pY  }//77/?}}{}   |nr7TT1???1\7FFFL?TrT
cccv1}{\c= }?1{LrTLF                   \qYYvn L}Ycv7mL{XdXXDbbRRRRRZbNONNbRAAAAAAAAAASSSAASRRWAANVozt5Gn7i;7<?uu=ymT *T\/7F\Tr{{{1!      |u/7?/FFFFuc\/\?
cYuYu1}|v* }\11T?/T\             FT!{mq%q%my/ {umy?;\\1TnKddbAZRdZZZRdXdbbAAAAAAAAASA&RRSSp>*!!|}}ryI%pF1{>y*{Fn I\!|}T1777//Tr}TT\/?;         /YYcYuYu7Y
7/\\Fu11y< !1\?\uuTY            qu\?7mvIycncm <Fy}  Yuu rvuF7c2XXbZdZZZbbZRRAAAAAAZRSAC<T77I0WWWWSSSWAR}L7nIL Fp/c{}{{T\7uFu/TrT\//777Ymc1{        ruYYu/
Y?11/u?Tm> !1\\/Y/?\;         :Ip\1/nmvpmcFmY; cm1  YYu>)SRSbHLY7VdbZZbbbZRRAAAAAZ(Y}Rg\1bASWSSSSASWS&17Fucmr !cIrr1L{r\/uu\\TTT\///7FcccT}/uFYYF}   <unm
Fu{|\?\rc; !T1?FmYu7/      *\uc)nrLFnnvmc7FYYT I<< \uuYF>SRRbRZbbYTr7mPRZZbRAAAr1<NWPYnjWAASAZZRAAARAA?7T?un{ <\nT7T<!T1\\//?1TT1r7/77YYv7{T/uu7\//u\T   
LF} {\?rc> |???uImn?*}=    \7uIp\}TuFFmyYFF/n\|{c  cFFYY;5RRRRRRbZZZImu\uF/yTrXRSANFnO&SAAARRRRAAAA&Rp77TTuF{ \y7u/*;{T\/7F\1TT?\1\\/FnccYT*7F///\\?TT1Fc
|{* *\??Y{ *1?\YIIY*  =:   \FFpmTLFuFYcvm?1YyYc>* /n7FF7}4RRRARAAAbZAW{;>;\/7\aAAcYeS&AAARZbdbRRASSW&\FF7FyY= uvunT }T\\7/\?TrT1/\?7/7FuYcu>?//71?//1T\Fc
{/|  T1?u} ;??\YynL   !{}  !7cqur1YuYYYvc1r7mcu{  YYuF77\|ZWSSSA0sT>|:V6Ag7Fqv/?77Fa&WSARRRRASSSSASA6/uFFuu7  }cv1|>rFuF/7/\/TT\\?7777YYYYu/ \7F//F//T?uF
<//  }T?FL<=T11uI?   |T/F\= YmI\{rFYuucvmTr/cv|  1u7FuFuu??=Ipij&WbRdZZbSZRSU\/?)fXv71}1hbWSWSSSSAAAjFuuFuv1 <{%F{L}?7F7uuF/\11\?/7FuYncnncu}1//77FF\?\uc
}!L1  r?Yr}<rT1cmL   T\F77uYmqm\}r7YYuYImTr7Yv=  Y/7F} !1>wRAASASSARRRRZbbOv#&W5(cvc$bW0a\|r{/kD9&&&mYnYYyc\ vYI\r{L/uu///7//TTr?/FFcYcccnYmF /1?7F\\1\uF
{}*T  L1u{{>}r?Yu   {T/FuFuFmyn\Tr/uYuFmmrLFnc   c77u !|> TZSASASS&RZAGQUIeW0SSSSWWlycI)OWASSb&90dE1|!}rF)Y  Yyn1T}1/777FF7/7/TT??F7uu7YuYYcu1<T177?TT?un
|r{!T  r\r{;!L?Y\  <L\/uuYcccyc\1T/uYYunvL}Fcn <<FF?H H>   </\1FFIUoaASAAAARASSWSWSSWASWO[yyx5AW&SSf:<;;=FF F{u/r}{/F7/7uF//\/11?\\/77uYFuuF7u;r////\?7uu
<!}!*= ;TL|<<{/u> >TT/uuuYnmyyY7TT/FuccImr}\Yn <1uF1FuYuu?=M0SSAAAAAAARRAAAASWSSSSSSSSSSSASSSA0SDJpq/71!Yc1 I!Y?}{17uYFFuu//\?11?\?Y?///FFFFFT7 FFF71\/Y7
{*={;{  r{{;|!FT  {T/unuYnccvyu711?Funncc/}r/n:!}FY7uu//FF FFbAAAAAAAAAbRRRRWWSSSSSSSSSSSWWSWWW96<LFF/FFpu:?cr?L|T\\7u7//77/\\/?T1\//?T7FF\\7/?\ FF7T1//\
<*> !   =!!:=}F} *r?7unnncmyycuF\T1/FYcymurL?F!T=77F/?\/77} nn7USAARbbDXXXdRASS&&WSSSSSWWWWWWSt;|T;YYYFYm{ vF1T{r?/7uuu777//\////?\\\?\1/\?//7T\? /?1T\/\
:!{< *   !;  r\|!}1FunnYYccvvvuu\\7//mmIvcTL17|1 FF7?1\777/:S&&YFuyXRXDDDDbASWW&&&WSSSSSWSWWH<<!@W6FnnYm/=>mr1TrT?\FuFFF777F7/\\\\\1/1?/?11\?1r|r; r{1T{}
   L*    >:  ?\}}?FFunnYYvvmmvmuF7/\/7FmmcTL?\!F Tr{L//777\>aSSSSWC\YnjRbbZAWWWWWWSWSWSSS0c<!HUS&06uunnI\ Lc TTrT1/uFFF7\/77/\111111111\Lrr11?1{{T} <{L|*
>    |*{*    m\}r/cmcYYcvvvvvmmYYF7////ccc?TT7|F 1uu?//FF77>[SWWWWAAWa/}}?IDAS0SSSSSWASX|yWyuA0&WWRuuFFI1 \n=?1rL1\7FFu7\\\\\//?111111TTTrrrLT1T}}T>   = 
 =>   <>*    c\T/nmmmmcvmvvmvmmnmnuuFFYncc/rr?{Y *\1T//F/\/!ySSSSWSSSbd0Hcyuu1iD09Dx>{d&ZVm#0&&WWSKuFu7cr Fc;71LT\\FF7F/\\\\?\\111?Tr1Trr1?LLrTTL{}L     
=            cY7mcvmccmmmmmmmvmcYY/1rrrLrF\Tr1Fm =F7\77/\?u}\A&&A&NbeI}{TLLT:>>}\i;>4R6GycS&&&WWWSquu7u7: mp{/r}T??/77/?/\/F/?/111111TT1??111T17?{|rL    
!<           cccycYF/?\\/\1YmyqIIqcnnyvm1<Y{|L?c< /YuuFun71!< 1YFq)%QOR&SRAASSWR&MHYF/7Ycmmv@fW0WRTu/uI/  Iq\Fr{1\\uYY/rTuYu?F7\///1?11T\11?\??//?T{r1   
 <*          u\1\YuuuFFuuF77/\mmcyYumIIy\*nF{17nT /unnYw    LAWWWWSSSSSSSSAASSWWWAAs#YDj(FFFncnumvIcuqy/ rqcm?TT1\7nYF?L\yyF\7\\\\/\/\\\\111?\\/7??/?TL <


python tplayer.py GourdBrothers.mp4
  ====:====;::{11\\////F//uF7?\/777FuFr<***><>;!*;<****!*!<*}LTr*>;<{rT{!|!!*}LT11rL{}*}}|!*Lr\F/?TL}|!r1rTrr11?r}*!!!!!L?T{{!!!!*!!<|rrr{LL|>}T1?T|!*<><**<!{11r1TTL}{!<>1\
 :**======;= }?\\\7//7/7//T!*T\//F1}<><*!<*>>><<!}|<*!*;|?7\rrr!{{TTL*<!*!}rrTrrT{{}}}}|*T77uuFrTT}{T??TTTrr}|}}!!}!|r\?Tr{}!!*|}<*{??L|{}|}!{1T1T*><<<!!<{1/Y/rTTT1r}}*}?11
= :=;=:=;=;;;><>:T\\??r<;;=:?1r|<<**<***!<<<<>{T}!*<*}/uuuuY\1TrrL***<!}rrrrTL{{{|}|}}{T\T77FuY/11\7\1\T}!!|}{}||rTLrLrLrrL{!!?1{T111L}LL}|!*{r{!!!*>>**{/YYuTL1r1T}|}}?T1T1
  :: !>;;>>>>>>;T/T|<>;;>>;;=;*|*!*|!***<<<{||!*!|}r\FuYYY/?1???T>><{L1Tr|{{}}}}}{{{{}|}/uuuuYYuYu\1?\1{}}}{{{1\1L{rrrTrrrrT1?\11TrL{r{{|*!}L}|!*<<<*<!TFuYYYnu\TL}{}\1T11\/
  :<}*;;<**><<<**<<<<!!>;;;;<****!***!!**<!**!|}{}{r?FuYYu?1?11?1L1Tr{}}}||}|L{{{{{}}}uu7FuunYYcc7?1!||!{{{rT1{{TTrTTTT1T/\\\\/1Tr{}{{|}Lr}**{|*!}|!*}T1Fncmyu?r{}rT1????\7\
  ==<><*******>!}!*}}*;*}};><*<*<>**|}}<!!!!}{{LrLr7\FunccccYYYu?1r}}}||||{}}}}!!}}}1uFuFFcYcmY\11TT{rT11\1TL{{Lr111TT1?\?\?1TrTrLL{}}TT}*!!!!!!!!|}{?/uYYnvY1TTrr1r11?\\\\?
 =>*|*!*|<<!!|}!<}{*>|}!;=;><<<***|}!!}}||}}{rrr1F7FuFuncnYyY\T}{}|!|{L}}}|||r{{T1TL{TYnYunccY\//FFFuYu/TL{L{LT1?11\\???/uu/?TT1?r{{{|<!TT!!||!|!!|}TuuuYccY1rTT11\F7\/\/?\\
 =*|}}|}|!*<}{{{{|}}}!<>;=;><<!T|       L{L}LrrT7FuuYYu7uY/T|{{{|{1??{}}||}r!   1TTLumuYYYuncYuuuYF1rL{LLrLrTT1\\\?T1runnnu\\?\r{{}}}|rT|}}}!|!!|||7nuuYcccu\T7uYncYcY?111Tr
 ;!}}|||!!}L{}!*}{*>>>>;==>>;    >{|}!!  *{LrrL1uFuF/?{!{{rLLrr{r?1r!{}{r1r1 }*  rr\ncuYnncu\171r{{{rL1TTr1T11\111TTTT\\/uF7\?\}{{{}}!!||}!!*!!{}}FuYYYv!    (mnccncn\T11\\/
=<|}}}|}}}!***<>>;>*    <*<  :   >* *}|> ;L{{{{{r?r{|}{Lrrr?!  rrLTTTrTT11\Y;|: F??T\YYFT1TTTr{L{{rr11rr1?TrT?1T?111/uF7uYu\\T{}{{}}LTL!||!!!r1T{} *mYmI1 {|: cmccnYYY7Ync/\
:<}}{||}}!**<<<;>;;<  =:  := *}r=    :;: {{{{}{L{{{LLrrTTrrr11 : TuF7??/\\Y    7/?111TTTTLrrrrTrrr11TT1TrT/uu7?1\7umvvvvc\\1{}!}}}{?}}}|!{LT/F:   =Fncmv =*<<  HncYYYnYYu1T1
=<}}|!*!*!*!!>;;;::<   !!<>= {        :}}||}||{{rrTTTrrrrrT1T1n! * */??1ru=} H?1?1Tr1?1rTTrTrrT?\1rT11TTY1   =   (cymvvmuF/L}T11111{{}!}\  ;*|<= r/nqF  >;   =mcYYYYYYnF\T?1
 >!!|*}}|*<>;<>:=}*>>!   };   }*{r=  =T}!!!{{rrrrrTrLLTTTTrrTuYc)?;| |/?F1qm!    /T1TT11T1?TTT111T?1Y{<;  }||*>  [vvyvmcnrrT/F71r{}{}}rT17 }{<> r/Yc  =  c%uuYuuYF/rr1?11?1?
 >!|!}!*>>>>;=<}|>>;=;{      T>   =::   L{rLL{LrTrLLrrTTrL\? ci)pq%1<!: ;*!|*{{* ?T11T111TTTrrrrT/< :|Tr{<  <|: )ymmmmmmccmvcY1TT}}}rT1?//F    LFF   <qIvcYnYcuF?L{{TTTTTrT1
=*!|!**<<><<<}!;>>>;!Tu<       ><=><*>  ={{{{r}rrLrrrTr|}7n%  ;!*}{!<>=>;;      \1T111TTTT111rrrTu   :    m:! ncmvvvmmmmcccccn\r{LL{11111T11LT\7 ; }TvL   |\|Lr}}}{rrrTTTT11
:>*!!***<*<<**<<<<!?\< ;>=  !!<<>;;;=< >rL{LL{{{LrTr{}|**/T1cq  }p#))#)%IcYF//?1T11TrrTTTT\Y     F?T1YI)Y  !> vqcvmmmmmmnncn1rLr1T1?1TrTTT?T1  ::  :><<!;  L|L{{rrrTTrrT??Tr
 ;*****!*!*****<<*!r  ;*>=::   :      !T{{{{{{{rr{}||!!<*T7F/7FFuu/q; =;  /rrT1rTT111TTTTrT1T}  ;}=  r;>L|<*r!< yycncnmY!{L{}}T??1T?T111?F |{< !    *| :L}}{LrrTTrrTTrr1/LT7
 =*||||||!!!*}!!{L1c!          =uFF7Fu\}   :Trr{{}|!!*}Lr?7FF7F7uur      \7>  }rT1TTTTTTTTr1\11nr *{T;;*||*!>   pnnnnFr|}}}L1/F\TuYu1\/\?{   FF{T= ;|;  }{{{Lr1T1T11rT1?TT1\
 >}{{|||}|}*1< =:  TT!   > *T?1/\//\F! !}!*  {{}|}|}rrr{L\?L|T??\1\7TT1/r  |T*  !rrTTrr\?\?T111rr1?     ;{*  FuFYur}!}}{!}1/FuuYYYn\//?1?7\\1uF< =}!}*  *{r/u?       =?rr1T\
:<}LL}}}||!!T*  {};  }}1}  L\\//\\7Y:;>=!>=  {}LrLLrTr}|}{*LTr{!|{TT!   ;<*}}< L{{{rLLT11TrTTTTr{LL{/= *{*> rLL{}{L{}}||!?7FuYnnnu\\1TrT?L  ? =<!|>;!|;       =><<*!!: ?T{\c
=>}Lr||}}}}|!}{7> >*=  ;  /?uuFFu7}  ;! *}|; {\1TrT{}{rrrL}       *L**=  <{< |/||}{}11T1rTrTrLrrL}}{1 ;TL!| }{{{}}{}LL}}\FFFFnncu11?1T1\Y > c!=/\m <*|;            >*= TLrum
;|{rL||{{{}}|!!{!n <**: :}{1 !<<<=  *|! <**= =F\Trr{LrTr}}\=  <>    |77 :  \{ ;{!}L}LrTTTrrrLLL{|}/u=!|>:<!  T{{}}}rL||\FuuuuYu71rr\?11c/<  Tr1/;  >** \\?Lrr}Lr1< !< <Lr\Yc
<!{{}{LL{}!!}L:   <=<*= !*{T=T|>;> |<*7*<!!;  1{rrT1T1T||}|||?F   <{/= ;   ={;   L{rrrTTTTrTTL}}L7*:*}=  1}  ?{{}}rL}|}T7u7u\1TTrrTYYF1T={ *   >;  ;*!   T{{{L{{/=!|= 1Lr/Yn
>*}}{!|{{}!{> <!=  \ = >*!!!!*{ ;<  = <>**!*= *LrrT1TT!|!|!!}| !L<    :<{L}!=  1LrrTT\TTTTTL}r{?L !}<  |<rL; T}}}{r}|L{1c{r>LT1rL?uYu?F=!}<;<>   m !!*  TLL{rr1\:}|> <Tr}1nn
>*|}|*}{{!!}> {{Tr{T   <{|!<<>{ <**=!**<<}|*<  \rT1L!!!!!!}|}Y<r}= <!>   }TL{{rrrrrT1?T1TTLLL1/= *L*  7{;T{  /}{T11r}TT?u>> 1rrr7u7?r\  <!   LL\/; ;<= ?| {??| !T}* ;TL}TFYY
>*|||!}}{!|{}!|!!}r?= ;;; <* <! ;!=      >**>: <T1L|||||{rTLTY{|{> 1rrr{}}}LTrLrLrT????TLLL{7u LLL!  L1}=}}> 1L111TrrL1?F     {rTLr{L1{    {11*    =<: !?{  =*!L}>: Tr}!7uuY
=<!||!{rr{!*!!!!{\> <|}|> |= ;L;*!; Y LF <||<: :\rL!<*rLLT1TTc!*}< L|}}{}{Lr{{{{L\/11TrrrTr/* ;1r!! L|r! =;=! 7\1rTT\F7<=rL!<= 1LL{{L}rTT{/? *?  / <|! ;{|/!*}{|= ;}||*{F7uY
>!}L{}T   =!*!!}1  <*;<}; =   r:!!!  Y}  ;}|>=  \}LT1T{}TTTTL?;!}: r|}{rLL{{{{{{TT1TTTrLrTT7: >>*<  {}T7  <{<<<       <*|||}}L r{}rL{L{T7}  =  rT\= >*> L|r?;    }}!!{}1uF\1
{rL|!!r      |}{: <= T *<;=  *r;***   =;  !}!!  TT?T{L{{LLLrr?:r! !{}L{{{}}{{Lr{7/\TTrrTT{LTu!    <{{}?7c; ;}T{!|!!}{{L{!|}||  {}TTTrLrL *{* {TLr r}}}; /\??\{{r{{{rr{|}T{}T
{{*!**|= ;!}!>=     {{ ;}<  }|*;!*  |<!r= *{|}: rTr}}}{}{\rr1!:T; L}{{{{}||}{LrrTTTTTrL{{T1TTr\; r{LrTTrLT7    ;>*;=;;>;<   :{{{LrLLrTr/Y!  1Lr?<  :{!! uF\1TL{{LLr{|!|}}}rT
<>*****}|  !}!*=   }*}<   ;**L:!||; < r\< *}!}: |!!!!!!\7/TT{ *; ={}}}}|!!||{{{{rTT1rL{T1?Trrr{}{{TT{}r?rrTTLLL11\\T17r1\1TL{}}{LLLLL}{r1 {rTLr\= |L}!|  u11rL}{}Lr!}}}}}}LL
=;**<<<<*{! =<****;  !*!*!!<*r*}L* >1  r{=}{}!; }!}r/\\//7r1 *  <}}}}}}}|}}|||T/\/7TrrT//\r{{L}{{L}{{TTLTLTL{{}}}}r/\{{{rTrr{{{{L{||{{TLrTL{L{{L\ }}L{!; 1rT{}}}{L{**{!!|}|{
=;*<<<<<<*!L: =<**!<  ***<<<<{>**  L= ;=:;!{|!; >}??\?\//r=!rL T||}}}}}}{|}|}\////71r1/7/\1{{{{L{}{{rrrTr1TL{}||}}FFL{{}{{{{Lr{{{{r{{Lrrr{{L{L{{17>{{}!: 1r{|}|}{{!<!!***}}L
:;<<<<<<*<<**}{*       ;<;<<><<{=!*>*} <|||{|!= |?1?\\r}!|}}||}|}}}{}||}{r}|?/\\//?Tr?\/7r{{{{TL{{}{1///7TLL{}}}}?7/\{{{L{{{{{LrL{rLrL{}{{{{LL{|}LT/{   ;{}}||LLL}*!!!!!|??\
=;*<>=<<<<|{!**!|*{} <>;;>>;;!|**<<<<}!  *!|}< >T1L}|}{!||||!*}}}{{}|!!|**!?\\\1TLL}L\1r{}}}{}LLLLrr?////1L{{{}|}?7/\{{{{}{Tr{L}}r{Lr{}}}}}{}{{}}}}}|L{{L}!}}}{}}!!}!**T??1?
==>>><><}}{}<<*!***<>><<*<;;<*<<<<*<*!!{*     <T11{|||}||!!!*!|LL}!*<><;;;rTL{L|!!|}}}}}}}}{LTT1T11?1//\TL{}}}!}?///r|{}}{r{}}{{LL{{}|}}}Tr{}{|!!}{{}}}}}<!}}}|*!!!!**r?1111
=;*}{LLLL}<<**!!!*<<<<<===;><**!*<*!***<<**}rT111T}*!|!!****!|rL}!!*>;>*!!*!***!|}||LL{}}}}LTT1TT111?\\1}||||!{?7\L}}{{|}L{}{{*|{}|}}|}T1||r}!!}}L{Lr}|!!*!|!!****}LTT1\\1r}
>!|{LL}!<=><!!*<<*<;;;;;;=;<*<<*******<<!TTT1??T!******!!!*!|*****;;**!*<****!!!<!r\?}!||{LrrrrTrTTT{|!!!!||?\?T{!!{rL}Lr}!||!}}}!}r1TT11?}|!!|{{{r1r!!*{1{**<**T1TT1TT?11{|
!!}{|<;;;<*!**<<>;<<<<>;;;;><<*<<<***<>{rr1TT1{*<**!*!**<><*<*!*<:<!*******{{!!*{1?\T!!|}{LrrrrrT1TL!!!!}T11?TT|*|T11r1TT|!|!*!!!r11?1111!*}{}}}TT}r{|{Trr|***<}TLrT11T1L*!}
!!}!;=;;<*<><;;;>;><>;;;;>><<<*<<<>><!rrrTTTT{<**!**!<>>;>!!|*<==**><*<*rTT1L|{?T1TT{|!!|}{rLrrTT1L|!!}T111?T}*<|{r11TTTL!*!|!*!TT1??11{**}TrLr1{>}rr*|LTr|!<><}TTTTTTTTL!|!
!!!<*;=;=;=;;==;>=;;;>;;=;>><<;*|<>!{rTTrTTTT*<****<*<>;;*!*<;=:;|><<<!rT1rrr11TT1r||!!!|{rL}{rLLr1L!}1T111Tr}}|{TrrTTTL**!**<<}rrrT1T!***{LrrL**><|>>*LL{}**;*LTrTTTrrLLL{{
**||>====;=;;;;;;<*>;;;;;;>>><{LLL{LLrrrTrL{|***>><<><<<***<<<*<*<;>*<|rrTTT1T11}**<!!!!!}|<!r{}}*LL*{rT11?TTL!*|!!TTL********<|rrr1L***<*|L{}!<>>;;>><*!<>;>}LTrLrrrrrrrLL{
**|;:: ;||*=;**!!||*=====><*{rLLrLLLrrrrrLL{{LL*<>>;><><<*<<;><<*!>><<!rrTTTrTr!****!|*******><<**!!<LrT1T1Tr|****<**!*!*******<{rrTL*<<*=<>>>;<!{}}L}>><!{LL{rTTTrrrrrLLL<>
><|;;<!}}}}}|}}{}}!;===!TL{{{LLLLLLLLLLL{LL{{{}}><><<*<>>*<<<<<<<**>><{TrrrTrT}<{LrrT1!*<****<**<><<<rrTr1TTr|***<><***<><**|*<}rTTrT|<>>!{{rrLTrrrTTrL{LLLrLLrrr{LLrLrLL}>!
<<}}}}}}}}}}}}}{{|=;;;|{{{{{{LLLL{LLL{LL{{{{{{rr>><**<>>><<<**<*<<!|{}{LLLrrrrrrLLLL{|<<<<<*}|*!!;;<{{LrrrTr!<<**<<<<><;>****>>{Trrrr{}}{{r{LTrrrrrrrrrL{rLLLrrTLLLLLLLL{}L1
<<!!!||}|}|}}}}}{==:<|}}}}{{{{LLL{{{{{{{{{{{{}}!;;;>>><<>>*}rL|!}LL{LLLrrrrrLLL{LrrL{}**|{{rrr{{{L{LLTLrrrL*<<>>>>;>*<<<<<*<;;}{{rrLrr{{LLTrrrrTTrrLLLL{{L{LLL{LL{{{LL{{{{LT
<**!!!!||||!}}}};::<}}}}}}}}{{{{{{}}{{}{}}}{{}};;;>>|{{}}}{r{{{}{LLLL{{LLLLL{{T{{{{Lrrrrrrr{LLLL{{LrLrLLLL!;>>;;>>>>>><<<><>|{LLLLLLLLrrrLLLLrLLLLLLLL{{{{{L{{{L{{{{{{{L{{LT
;<*!!!!|||!|||}|;:<}}|}}}}}}{{}{}}}}}}}}}}}}}}!=;<|{{}{}{{{{{{{{{LrLLLLLT{LL{{{{{rL{{{rLLrLrLL{{rL{{r{{{{L{**!!!;;;>>>><<<!}L{{LrLLL{{{LLLLLLLLLL{{{LL{{{{{{{{{{{{}}{{{LL{}r
;;*!!!!||!!!!!!|!|||}}}}}}{}}}}}}}}}}}}}}}}{}{{}}{{{{{}{{{{{{{{{{{{{{L{Lrr{{{{L{{LLrLLL{LL{LL{{{{{{{L{L{{{{}}}}<>;;>;;;*}}{{{{{{{LL{{{{L{{{{{{LL{{{{{{{{{{}}}{{}}}}}}}}}{{}r
;>*!!!!!!!!!!!!!!||!|}}}}}||}|}||}}}}}}}}}}}}}}}}}}}}}{{{{{L{{{{{{}{{{{LL{{{L{{{{{{L{{{{{{{{{{L{{{{{{{L{{{{}}}!==;>=;;|}}}}{{{{{{}}{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}{{{{r
=;<***!!!!!*!!!!!!!*||!!}}||}}||||}}}}}}}}}}}}}}}}}}{{}{{{}{{{{{{{}{{{{{{{{{{L{{{L{{{{{{{{{{{{{{{{{{{{{{{{{}}}}**;;=;|{{{{{{{{{r{{{{{{{{{{{}}}}{}{}{}}}}}}}}}}}}}}}}}}}}}L{r
;;><*!!******!!!!!!!!!!!!!!|||}!|!|||}}}}||}}}}}}}}}}{}|}}}}}}}}}{{{}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}{{{{{{{}}}}}{!>=<}}}{{{{{{{{}}{{{{{LLLL{{{{{{{{{{{{{}|||}}}}}}}}}}}}}|}{L