Scripts/plexdb.py
2026-06-08 08:22:22 +00:00

73 lines
2.9 KiB
Python

import os
import sys
import sqlite3
def run_db_injection(db_path):
if not os.path.exists(db_path):
print("[-] Error: Plex database not found at {}".format(db_path))
return False
print("[*] Connecting to Plex database: {}...".format(db_path))
try:
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# Find unanalyzed STRM files
cursor.execute("""
SELECT media_parts.id, media_items.id, media_parts.file
FROM media_parts
JOIN media_items ON media_parts.media_item_id = media_items.id
WHERE media_parts.file LIKE '%.strm' AND (media_items.width IS NULL OR media_items.width = '')
""")
unanalyzed = cursor.fetchall()
if not unanalyzed:
print("[+] All STRM files are already analyzed in the database.")
conn.close()
return True
print("[*] Found {} unanalyzed STRM files. Injecting metadata...".format(len(unanalyzed)))
for part_id, item_id, file_path in unanalyzed:
# 1. Update Media Item with dummy dimensions and duration (1080p H264 profile)
cursor.execute("""
UPDATE media_items
SET width=1920, height=1080, duration=7200000, container='mkv', video_codec='h264', audio_codec='aac',
video_frame_rate='24p', size=112
WHERE id = ?
""", (item_id,))
# 2. Delete existing streams for this part to prevent duplicates
cursor.execute("DELETE FROM media_streams WHERE media_part_id = ?", (part_id,))
# 3. Insert Video Stream record
cursor.execute("""
INSERT INTO media_streams (
media_part_id, stream_type_id, codec, index, language,
bitrate, class, display_title, created_at, updated_at
) VALUES (?, 1, 'h264', 0, 'eng', 5000000, 'video', '1080p H.264', datetime('now'), datetime('now'))
""", (part_id,))
# 4. Insert Audio Stream record
cursor.execute("""
INSERT INTO media_streams (
media_part_id, stream_type_id, codec, index, language,
channels, bitrate, class, display_title, created_at, updated_at
) VALUES (?, 2, 'aac', 1, 'eng', 2, 192000, 'audio', 'AAC Stereo', datetime('now'), datetime('now'))
""", (part_id,))
conn.commit()
print("[+] Successfully injected analysis metadata for {} files.".format(len(unanalyzed)))
conn.close()
return True
except Exception as e:
print("[-] Database operation failed: {}".format(e))
return False
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python plex_db_helper.py <path_to_com.plexapp.plugins.library.db>")
sys.exit(1)
run_db_injection(sys.argv[1])