mirror of
https://github.com/shadoll/moma.git
synced 2026-08-28 11:33:25 +00:00
125 lines
3.6 KiB
Python
125 lines
3.6 KiB
Python
"""Media type constants for supported video formats.
|
|
|
|
This module defines all supported video container formats and their metadata.
|
|
Each entry includes the MediaInfo format name for proper detection.
|
|
"""
|
|
|
|
MEDIA_TYPES = {
|
|
"mkv": {
|
|
"description": "Matroska multimedia container",
|
|
"meta_type": "Matroska",
|
|
"mime": "video/x-matroska",
|
|
"mediainfo_format": "Matroska",
|
|
},
|
|
"mk3d": {
|
|
"description": "Matroska 3D multimedia container",
|
|
"meta_type": "Matroska",
|
|
"mime": "video/x-matroska",
|
|
"mediainfo_format": "Matroska",
|
|
},
|
|
"avi": {
|
|
"description": "Audio Video Interleave",
|
|
"meta_type": "AVI",
|
|
"mime": "video/x-msvideo",
|
|
"mediainfo_format": "AVI",
|
|
},
|
|
"mov": {
|
|
"description": "QuickTime movie",
|
|
"meta_type": "QuickTime",
|
|
"mime": "video/quicktime",
|
|
"mediainfo_format": "QuickTime",
|
|
},
|
|
"mp4": {
|
|
"description": "MPEG-4 video container",
|
|
"meta_type": "MP4",
|
|
"mime": "video/mp4",
|
|
"mediainfo_format": "MPEG-4",
|
|
},
|
|
"wmv": {
|
|
"description": "Windows Media Video",
|
|
"meta_type": "ASF",
|
|
"mime": "video/x-ms-wmv",
|
|
"mediainfo_format": "Windows Media",
|
|
},
|
|
"flv": {
|
|
"description": "Flash Video",
|
|
"meta_type": "FLV",
|
|
"mime": "video/x-flv",
|
|
"mediainfo_format": "Flash Video",
|
|
},
|
|
"webm": {
|
|
"description": "WebM multimedia",
|
|
"meta_type": "WebM",
|
|
"mime": "video/webm",
|
|
"mediainfo_format": "WebM",
|
|
},
|
|
"m4v": {
|
|
"description": "MPEG-4 video",
|
|
"meta_type": "MP4",
|
|
"mime": "video/mp4",
|
|
"mediainfo_format": "MPEG-4",
|
|
},
|
|
"3gp": {
|
|
"description": "3GPP multimedia",
|
|
"meta_type": "MP4",
|
|
"mime": "video/3gpp",
|
|
"mediainfo_format": "MPEG-4",
|
|
},
|
|
"ogv": {
|
|
"description": "Ogg Video",
|
|
"meta_type": "Ogg",
|
|
"mime": "video/ogg",
|
|
"mediainfo_format": "Ogg",
|
|
},
|
|
"mpg": {
|
|
"description": "MPEG video",
|
|
"meta_type": "MPEG-PS",
|
|
"mime": "video/mpeg",
|
|
"mediainfo_format": "MPEG-PS",
|
|
},
|
|
"mpeg": {
|
|
"description": "MPEG video",
|
|
"meta_type": "MPEG-PS",
|
|
"mime": "video/mpeg",
|
|
"mediainfo_format": "MPEG-PS",
|
|
},
|
|
}
|
|
|
|
# Reverse mapping: meta_type -> list of extensions
|
|
# Built once at module load instead of rebuilding in every extractor instance
|
|
META_TYPE_TO_EXTENSIONS = {}
|
|
for ext, info in MEDIA_TYPES.items():
|
|
meta_type = info.get('meta_type')
|
|
if meta_type:
|
|
if meta_type not in META_TYPE_TO_EXTENSIONS:
|
|
META_TYPE_TO_EXTENSIONS[meta_type] = []
|
|
META_TYPE_TO_EXTENSIONS[meta_type].append(ext)
|
|
|
|
# Reverse mapping: MediaInfo format name -> extension
|
|
# Built from MEDIA_TYPES at module load
|
|
MEDIAINFO_FORMAT_TO_EXTENSION = {}
|
|
for ext, info in MEDIA_TYPES.items():
|
|
mediainfo_format = info.get('mediainfo_format')
|
|
if mediainfo_format:
|
|
# Store only the first (primary) extension for each format
|
|
if mediainfo_format not in MEDIAINFO_FORMAT_TO_EXTENSION:
|
|
MEDIAINFO_FORMAT_TO_EXTENSION[mediainfo_format] = ext
|
|
|
|
|
|
def get_extension_from_format(format_name: str) -> str | None:
|
|
"""Get file extension from MediaInfo format name.
|
|
|
|
Args:
|
|
format_name: Format name as reported by MediaInfo (e.g., "MPEG-4", "Matroska")
|
|
|
|
Returns:
|
|
File extension (e.g., "mp4", "mkv") or None if format is unknown
|
|
|
|
Example:
|
|
>>> get_extension_from_format("MPEG-4")
|
|
'mp4'
|
|
>>> get_extension_from_format("Matroska")
|
|
'mkv'
|
|
"""
|
|
return MEDIAINFO_FORMAT_TO_EXTENSION.get(format_name)
|