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.
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
|
11 months ago
|
from moviepy.editor import VideoFileClip
|
||
|
|
import os, cv2, hashlib
|
||
|
|
from PIL import Image
|
||
|
|
|
||
|
|
|
||
|
|
def get_video_dimensions(video_path):
|
||
|
|
cap = cv2.VideoCapture(video_path)
|
||
|
|
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
|
||
|
|
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
|
||
|
|
cap.release()
|
||
|
|
return width, height
|
||
|
|
|
||
|
|
def determine_post_type(filepath, mediatype):
|
||
|
|
if mediatype == 'image':
|
||
|
|
with Image.open(filepath) as img:
|
||
|
|
width, height = img.size
|
||
|
|
elif mediatype == 'video':
|
||
|
|
width, height = get_video_dimensions(filepath)
|
||
|
|
|
||
|
|
aspect_ratio = width / height
|
||
|
|
if aspect_ratio > 0.5 and aspect_ratio < 0.6:
|
||
|
|
return 'stories'
|
||
|
|
else:
|
||
|
|
return 'posts'
|
||
|
|
|
||
|
|
def get_media_type(filename):
|
||
|
|
image_extensions = {".jpg", ".jpeg", ".png", ".gif", ".webp", ".bmp", ".tiff", ".tif", ".svg", ".eps", ".raw", ".cr2", ".nef", ".orf", ".sr2", ".heic", ".indd", ".ai", ".psd", ".svg"}
|
||
|
|
video_extensions = {".mp4", ".mov"}
|
||
|
|
|
||
|
|
extension = os.path.splitext(filename.lower())[1] # Get the extension and convert to lower case
|
||
|
|
|
||
|
|
if extension in image_extensions:
|
||
|
|
return 'image'
|
||
|
|
elif extension in video_extensions:
|
||
|
|
return 'video'
|
||
|
|
else:
|
||
|
|
return 'unknown'
|
||
|
|
|
||
|
|
def get_video_duration(file_path):
|
||
|
|
try:
|
||
|
|
with VideoFileClip(file_path) as video:
|
||
|
|
return video.duration
|
||
|
|
except Exception as e:
|
||
|
|
print(f"Error getting duration for {file_path}: {e}")
|
||
|
|
return 0
|
||
|
|
|
||
|
|
def calculate_file_hash(file_path, hash_func='sha256'):
|
||
|
|
h = hashlib.new(hash_func)
|
||
|
|
with open(file_path, 'rb') as file:
|
||
|
|
chunk = file.read(8192)
|
||
|
|
while chunk:
|
||
|
|
h.update(chunk)
|
||
|
|
chunk = file.read(8192)
|
||
|
|
return h.hexdigest()
|