You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
|
11 months ago
|
from BunnyCDN.Storage import Storage
|
||
|
|
import config, os, cv2
|
||
|
|
from concurrent.futures import ThreadPoolExecutor
|
||
|
|
|
||
|
|
# this script will take a screenshot of the first frame of each video and upload it as a thumbnail to BunnyCDN
|
||
|
|
|
||
|
|
obj_storage = Storage('345697f9-d9aa-4a6b-a5ec8bffc16d-ceaf-453e', 'storysave')
|
||
|
|
|
||
|
|
db, cursor = config.gen_connection()
|
||
|
|
|
||
|
|
cursor.execute("SELECT id, media_id, media_url FROM media WHERE media_type = 'video' AND thumbnail IS NULL and status = 'public';")
|
||
|
|
results = cursor.fetchall()
|
||
|
|
|
||
|
|
count = 0
|
||
|
|
print(f"Found {len(results)} files to process.")
|
||
|
|
|
||
|
|
cacheDir = 'cache'
|
||
|
|
|
||
|
|
def DownloadFile(serverPath, cacheDir):
|
||
|
|
localFilePath = os.path.join(cacheDir, os.path.basename(serverPath))
|
||
|
|
|
||
|
|
if os.path.exists(localFilePath):
|
||
|
|
print(f"File already exists: {localFilePath}")
|
||
|
|
return localFilePath
|
||
|
|
|
||
|
|
obj_storage.DownloadFile(storage_path=serverPath, download_path=cacheDir)
|
||
|
|
print(f"Downloaded {serverPath} to {localFilePath}")
|
||
|
|
return localFilePath
|
||
|
|
|
||
|
|
def ImportMedias():
|
||
|
|
with ThreadPoolExecutor(max_workers=10) as executor:
|
||
|
|
for video in results:
|
||
|
|
serverPath = video[2].replace("https://storysave.b-cdn.net/", '').replace('//', '/').replace('\\', '/')
|
||
|
|
executor.submit(DownloadFile, serverPath, cacheDir)
|
||
|
|
|
||
|
|
|
||
|
|
for result in results:
|
||
|
|
count += 1
|
||
|
|
itemID = result[0]
|
||
|
|
mediaID = result[1]
|
||
|
|
mediaURL = result[2]
|
||
|
|
extension = mediaURL.split('.')[-1]
|
||
|
|
|
||
|
|
serverPath = result[2].replace("https://storysave.b-cdn.net/", '').replace('//', '/').replace('\\', '/')
|
||
|
|
|
||
|
|
localFilePath = os.path.join(cacheDir, os.path.basename(serverPath))
|
||
|
|
|
||
|
|
filePath = DownloadFile(serverPath, cacheDir)
|
||
|
|
|
||
|
|
cap = cv2.VideoCapture(localFilePath)
|
||
|
|
ret, frame = cap.read()
|
||
|
|
cv2.imwrite('thumbnail.jpg', frame)
|
||
|
|
cap.release()
|
||
|
|
|
||
|
|
thumbnailURL = f"https://storysave.b-cdn.net/thumbnails/{itemID}.jpg"
|
||
|
|
|
||
|
|
obj_storage.PutFile('thumbnail.jpg', f'thumbnails/{itemID}.jpg')
|
||
|
|
|
||
|
|
|
||
|
|
cursor.execute("UPDATE media SET thumbnail = %s WHERE id = %s;", (thumbnailURL, itemID))
|
||
|
|
db.commit()
|
||
|
|
|
||
|
|
print(f"[{count}/{len(results)}] thumbnail: {thumbnailURL} {cursor.rowcount}")
|