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})