Mercurial > code > home > repos > video
diff thumbnail.py @ 37:7cacfae58430
thumbnails rewrite - store in db; don't use YT-provided pics for now
author | drewp@bigasterisk.com |
---|---|
date | Tue, 03 Dec 2024 19:28:11 -0800 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thumbnail.py Tue Dec 03 19:28:11 2024 -0800 @@ -0,0 +1,32 @@ +import asyncio +from tempfile import NamedTemporaryFile +import pymongo.collection +import logging +log = logging.getLogger('thumb') + +async def getThumbnailData(coll: pymongo.collection.Collection, diskPath: str) -> bytes: + doc=coll.find_one({'diskPath':diskPath}) + if doc is None: + raise Exception(f"no thumb found for {diskPath}") + return doc['thumbData'] + +async def createThumbnail(coll: pymongo.collection.Collection, diskPath: str): + if coll.find_one({'diskPath':diskPath}): + return + coll.delete_one({'diskPath':diskPath}) + + # diskPath could be a YT sidecar file? + + thumbFile = NamedTemporaryFile(suffix='.jpg') + log.info(f'createThumbnail: {diskPath=} to {thumbFile.name=}') + proc = await asyncio.create_subprocess_exec('ffmpegthumbnailer', + '-s', '250', '-i', + diskPath, '-o', thumbFile.name) + await proc.wait() + if proc.returncode != 0: + log.error(f'createThumbnail: {proc.returncode=}') + return + thumbFile.seek(0) + imgData = thumbFile.read() + log.info(f'createThumbnail: {len(imgData)=}') + coll.insert_one({'diskPath':diskPath,'thumbData':imgData})