editor / metadata_utils.py
Crazyka51's picture
Create metadata_utils.py
c4d6ad3 verified
"""
Funkce pro extrakci technických a EXIF metadat.
"""
from datetime import datetime
import os
def extract_video_metadata(video_path):
"""
Extract technical metadata from video file
Returns dictionary of metadata
"""
import cv2
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
return None
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
duration = frame_count / fps
cap.release()
file_stats = os.stat(video_path)
return {
'filename': os.path.basename(video_path),
'path': video_path,
'resolution': f"{width}x{height}",
'fps': fps,
'duration': duration,
'frame_count': frame_count,
'size': file_stats.st_size,
'created': datetime.fromtimestamp(file_stats.st_ctime),
'modified': datetime.fromtimestamp(file_stats.st_mtime)
}
def extract_audio_metadata(audio_path):
"""
Extract technical metadata from audio file
Returns dictionary of metadata
"""
import wave
try:
with wave.open(audio_path, 'rb') as audio_file:
channels = audio_file.getnchannels()
sample_width = audio_file.getsampwidth()
framerate = audio_file.getframerate()
frames = audio_file.getnframes()
duration = frames / float(framerate)
file_stats = os.stat(audio_path)
return {
'filename': os.path.basename(audio_path),
'path': audio_path,
'channels': channels,
'sample_width': sample_width,
'sample_rate': framerate,
'duration': duration,
'size': file_stats.st_size,
'created': datetime.fromtimestamp(file_stats.st_ctime),
'modified': datetime.fromtimestamp(file_stats.st_mtime)
}
except:
return None
def extract_exif_data(image_path):
"""
Extract EXIF metadata from image file
Returns dictionary of EXIF data
"""
from PIL import Image, ExifTags
try:
img = Image.open(image_path)
exif_data = img._getexif()
if not exif_data:
return None
exif = {}
for tag, value in exif_data.items():
decoded = ExifTags.TAGS.get(tag, tag)
exif[decoded] = value
file_stats = os.stat(image_path)
exif.update({
'filename': os.path.basename(image_path),
'path': image_path,
'size': file_stats.st_size,
'created': datetime.fromtimestamp(file_stats.st_ctime),
'modified': datetime.fromtimestamp(file_stats.st_mtime)
})
return exif
except:
return None