From f874f83c8f2cb03aa2a321db92b8756c0ee5c488 Mon Sep 17 00:00:00 2001 From: valenti Date: Tue, 6 Oct 2026 09:19:04 +0000 Subject: [PATCH] logging --- __pycache__/main.cpython-313.pyc | Bin 15681 -> 16240 bytes main.py | 13 +++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/__pycache__/main.cpython-313.pyc b/__pycache__/main.cpython-313.pyc index c57f87218e6c24edba9f7e43a8ff407aa620b3a0..5c73020610ef1e4711f3c08a42c0c5a2267f9e22 100644 GIT binary patch delta 4396 zcma)9drVu`8Nb)>2Y!Gt=8b^>b`tXlknkw5#33{$frJBX8c1Eoz8EK9yT>+3tz~pg z*4MTq&8fCbTidkT`cR{_8`4%y)3!9-OP#bdSrvM#w%J-$+y3aN8mZIv$M${af(=a8L*5`r+b$lR7y!43`94 z)a4eYG-Ite==xusK#ZNDBCDolVAQeR09$qFyp?@i5CN^3_?9@#PY3=8F77@p)=hz_IZ!cGk4dH8n6!$`hbOUkH22w&B+XUh| zD$*u+m%`fv?=pCMr!26Ta#BGmNmaL+Zk*aUcISW3amqoeTSQXB5t+MN3+pkHS}l&U z8CV@>J~Be;%Y`EY8rn=o$p)Yr+Cuh`2F_Z^e$vQU8yO=_oNWP_hqHDX26v&RWp&HQU8EIt zohu8ayF8EXS%Ir^n*YBAeN5GmPTmLhry^T(d>iS?@ov&X zddY31Z)dlL58O`%$QQ_V(znvyLHuMV8O*hJks)$B*_~?#Am@k49&C45ASA8j)dD$4 z_Tnm!h`Dw4MOEHO_80Y;eOc4=^juPk`a;QAwynVvN`=$0Imw%HPd0dFrFm&K9>V4! zcY{Y^J;3IqR4Nn&u~#K)xs|M&PSCkfnjO=8U#wiL(vFF`B1{R#Vn)}m()xjSExuxS zM-(0G8>V}kOF-ZiWooory9B-Q2oA;uT zE=i@7luqGcaj!apC^0)P1r;3~2i+bvQP3ogE}kf;7sWyLw57d#7l^Y~uRB5AA@_VN zA|>3OtjgO=huBA!{_bH=(>(w$sANqtl%Amnps{Ws+u>07Xp|;0@ksD!EFPhEgT*+L ztoMtf>_h7U3^Z-qBo482wk;KWO*Sc>%1|jd9h;RfiZl!!5%!*~M>7hHoi&!QcKb`< z_`bb$3TG&bFd=w*b$on!7s~A0CwA^04Gta{9~>dOM@I-XfSBf{OsAl^ZmOnGCK5|1 zvz!6t5tb;tqXNeauhbc!f}n@zq#%f&EU_Df{}5yBt)l&AJ68dWIrx##9Vi;(g?Cl1 zyeG7MqGv@Efli@r>N_=xz%5KVSFMR*LbO7?{49H`(5@z?Zj~fP1%ohh9-arbsi#G+ zc?2>{mr6$x8J2Q*wq~6TDYr*SSvL*$HKe?dkEyIB6F(YH9E-apN)z<2HzA+0svfrz zLNoiRW6~z;W)snM}n`)KObW2hxrFIhx?qvn#;3CX-M`U#>P3Z}C$W_yVr-BlM`v6i{gV#*ol%GC*98?c2zUYdI&IPo;AK}Xg ze6UljsjNmk&4$Vv4`Rkp9FabTfD86&=sDyJK-M3Qr74_LWlY?298-yyD?emVNy2m@ zIG1dv=fUhE`%T$tl}g3#EWcN+Ar|)U@*4KHa+_(wOzb^y;6gR*jq{5N4( zt-A#7x)#l9%PowSO{{dGE+$S^TT$;TS>q?HT9UO=F)wBJRyccI6BbfR%HV-J5c;c} z(2}Y(z2rx)hTG3gYDpcbCmTouX=Ilwd}0&(dqsojVb03u4t`cx9k7V3%@>Qu(!rTy z!H6^;3rksDI1>r=w9-3JYw}G~tPK#*tkyT1NF-?~$ms(Ja5@EgihW$^^nV47)sypw zvf3>@==~t-9zvg`TFn9ysUr4amCg5rlEhyXg$06nz4F`{j2&pTc>|O zyu3~H_h~M7>HGuihczcFc`dbvXQfa)lMJS%xnwXBqx2$-UC8#i%b@%oaUX1l{1Ieh zDl{zxQ(%-*LmOtTTnYT#&#{Hs$XMSpx+q zLGcTbUINH!nh(d~vNjfn`OqJrwHRD`zE-vXO^y7bYMD!RP`tz`@7v5hmD5GB1bfx_ z!$~9GL`UTU07ofGx1#5(2$un50~E4kA|*wOUgZ2z=C>cka-rO9F9Vb9 zqZ8x%CdTuZ8}*|BRx65I#Onrqmc73Os0uiC_K*u$Uds+ipb3aguw<#T9Pj{A$^V7zU;JYY%4*;(Iyp(|8pC+jH z?k~DW5^;%gGjxEA!Kf?o%u97N#H?Fg3x`pc@0fe&c)`vZXJe`KB=mWRX4hNs;Y~_1 z@qOY6!P)vLt?8Nj7;g1h;7*u|x0;qJNyqg(^Ei7Vx0L@qG^ajE;1U?^Jn6ikca_mBm!NRt$sB;VR_RFSVa5|I5 zFU%mtYDW_Ye*lp6_|+4OM`cwaMPESi?^s{gxdmfXO7GzxMD!TinGc6ju`sM^Iu?~R zyGM47$~rKS;`7QK5kMo$&cR*VC-#g7{i8bv{d5ew+mA4hfZwRJ1mSfA{(t8|WRnO{ z09hSMCS_|V5@DOV3l=^=`TGd`tmg~F-6#tq@K2Bv$ap0v>d)FgxLq(A8GBPX}OVI@0nQ$h~mJK zvus(788F6`OSlizv?|M@_#D+1GfGUC;$Ke delta 3921 zcma)8du&tJ8NbKx_ak4U3^5n7qwq9^lYksP|u(7wO9Wh2s%oLQUM0F$P zh=o}M*N<2uHfD?1nLXlQj);>vBQE9=I>U%NQo$+&H;#BBUgj0tG*TJyF<(%c){V8` zV5@&2iJGaUOQT9zHMLUP!|fX8r#2R#c2+|jY|ZDoI;m^Pb*z`)YYJ$_w&SZv-M!Ew ztD_YxNIk5+U83IOgoWT;3GW7Y`{2E9+6EJ-qSe$-1KnEIINdn5Z}kMRHC;h#S_xev z5ZT&pJuJvVYxOwF24Ho9ZKNYK7?6(b(6KPxOY4E^*h6$54GGpn_tOT!HqlYKPOxT> zH44^357703weq(#-gWdK-5{E6wbJT89itnCrv0L>Ekr2|i&h66rw<9%NhfHNV4Gn@ z$NA$PPu-?2qOOci(q`0ksZEJJ3^r-BDYh)xOgkYit+b7{cWb8Yz%^yf7jHoy(*fEc z`oR7)w6n}N)2=dqm~Nq4X*ccZ@79Tdd+9d1o%Ye52kjlSpAOKS<@O-mMTh9_a{Eh= zr^9p)?cx8{ZmBv%Be=X{q`bhbbDHpB9?`wP!}`}qVDWwZ7%{kT>)eYQjC~sY0PxL= z$IN#Kar0s8<1Jnggo&b`Nyp`xECw#f`T-TkLM)kx$8vI1sMuZ*_VSOc*TC_0TW8A% z8W}Q7&dRwgW_57M5k%?af*e(KYz%b6+-ToG_AR#B8weTX)X^E(1>%Au989xdEVz(} z%jw|8f+pO;hWHgnU-uqRvk1VO8bz0h<&LsRXsjB@c_cP-e2%5_sd)5wA{A%TU~zy~ zIZu;){F1W>168}4$PnM<>Zs`lo#K>J**ue@vx%gfip|R`2GYm)1y>Jv+;qJM9xuAv zDsgHGftkQNY!CypLtJs!Y%0%+eFb!@W@Cxvn`7)0f1|pt z6;p>DM92eVv7iL;rzW0-Yvb2mk@eD7_ifd z)^a5Y^3gTbMb8xOz4%Q?OGSpRl#WnWa&41#U6+O*^!WI`fSok*H`ZP)epXn=VUh)Xb26RIFduM+`N@h1 zrx8Thoy~BHAZSn?<}*q8Bzp=}1?|+rBL#g&PpqenL7GeKEJ`)ajC})J-$ZyC;TeQy zCI07HH`moQR^r)JH|bl*)ScpebuCuhBc`SdKT$VM^8999bwfW$m5Sw55z|O#W%ep4 zeg;o=4>tzS)!Lppai)07+` zgMQt+Uc+Dwf4=?<928f`r+*XrG4ZC5AIigCo1Z@#8X%MWN~r2VIZ5YpnS5@!ocsvv zZTvT(bzuMZ(D3>nK${7`I-sVv^{5<6=8n!Bm1mB#MG(8W+^~ss@QV$@q>0~d_!W7c zUtO01?rVI7Bp2Uq>@XK+z)-O)7d%CmOwXlR2X=c6prC6xl1M4~L<%OvzK_-0LVHoZk!;{Wl<(J#)$(#H}TXV4&1mQYGhtm*27Li(B^m0fQyITC03d!fL z@eSxwG3GPLbS$1#oDXiw_|jF0i&1RqPGoEIv$KhlViOeWgG|fji4+&?GAaZU(GnvUbqup&#f*g5z%Xl7DSr8^(2KBX#5NQh z@x+XX+NL0eE*xO*gRx>ARCj-0Id%Vtec(xFf?Y4O;yY!E(NxTX_$4@wXA5_p-9h*@ zg4j4*s=9=i%k2LyHQcROqS4uW4nMr2Op9Lg2sZ%~P1=-YuVeFjO6NS`alu(ZX~^5r=QoG;9DK zvriX%(>5p|`J~*(N}wh1WY0nrN?Jn59VzrD$#Gk9-?T86P}f?6b-vt$+2CfQvjyPyt~It6v1 r)GcU*WU-e#f_f#lw^S*p4-KjWt(FXy`$j+V`;&|Jx1S_ByvF_qk9wC! diff --git a/main.py b/main.py index 3daa972..1117a9b 100644 --- a/main.py +++ b/main.py @@ -2,6 +2,7 @@ from __future__ import annotations import asyncio import contextlib +import logging import os import shutil import tempfile @@ -13,6 +14,9 @@ from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import FileResponse from starlette.background import BackgroundTask +logger = logging.getLogger("ffmpeg-api") +logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(name)s: %(message)s") + FFMPEG_BINARY = os.getenv("FFMPEG_BINARY", "ffmpeg") ALLOWED_CODECS = {"libx264", "h264_nvenc"} @@ -119,6 +123,9 @@ async def run_ffmpeg_command(command: list[str], error_prefix: str) -> None: if process.returncode != 0: error_message = (stderr or stdout).decode("utf-8", errors="replace").strip() + logger.error( + "%s (ffmpeg rc=%s): %s", error_prefix, process.returncode, error_message or "unknown error" + ) raise HTTPException( status_code=500, detail=f"{error_prefix}: {error_message or 'unknown error'}", @@ -219,10 +226,12 @@ async def run_ffmpeg_compose( "error", ] + if codec == "h264_nvenc": + command.extend(["-init_hw_device", "cuda:0"]) + if kind == "image": - command.extend(["-loop", "1"]) + command.extend(["-framerate", str(fps), "-loop", "1"]) elif codec == "h264_nvenc": - # Keep CPU filters, but still ask FFmpeg to prefer CUDA decoding for video backgrounds. command.extend(["-hwaccel", "cuda"]) command.extend(