{"library":"pymp4","title":"pymp4: MP4 Box Parser","description":"pymp4 is a Python library designed for parsing MP4 boxes, providing a structured way to read and interpret the internal components of an MP4 file. It focuses on low-level access to box data. The current version is 1.4.0, and releases occur periodically, often in response to bug fixes or new box definitions.","language":"python","status":"active","last_verified":"Sat May 16","install":{"commands":["pip install pymp4"],"cli":null},"imports":["from pymp4.parser import BoxParser","from pymp4.dataclasses import Box","from pymp4.boxes import ftyp"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom pymp4.parser import BoxParser\n\n# For demonstration, we'll create a dummy MP4 file.\n# In a real scenario, you would open an existing MP4 file.\ndummy_mp4_path = \"dummy_test.mp4\"\ntry:\n    # A minimal, valid MP4 often starts with an 'ftyp' box.\n    # This is not a full MP4 file, just a placeholder to demonstrate parsing.\n    # Real files are more complex and would have many more boxes.\n    with open(dummy_mp4_path, \"wb\") as f:\n        f.write(b'\\x00\\x00\\x00\\x18ftypisom\\x00\\x00\\x00\\x01isomiso2avc1mp41')\n        f.write(b'\\x00\\x00\\x00\\x08moov') # Placeholder for a moov box\n\n    # Initialize the parser\n    parser = BoxParser()\n\n    # Open the MP4 file in binary read mode\n    with open(dummy_mp4_path, \"rb\") as f:\n        # Parse all top-level boxes\n        print(f\"Parsing boxes from '{dummy_mp4_path}':\")\n        for box in parser.parse(f):\n            print(f\"  Parsed Box: type={box.type.decode('ascii')}, size={box.size}\")\n            if box.type == b'ftyp':\n                print(f\"    Major Brand: {box.major_brand.decode('ascii')}\")\n                print(f\"    Minor Version: {box.minor_version}\")\n                print(f\"    Compatible Brands: {[b.decode('ascii') for b in box.compatible_brands]}\")\n            elif box.type == b'moov':\n                print(f\"    (This is a placeholder moov box. Real ones contain child boxes like 'trak', 'mvhd' etc.)\")\n\nexcept FileNotFoundError:\n    print(f\"Error: Dummy file '{dummy_mp4_path}' could not be created or found.\")\nexcept Exception as e:\n    print(f\"An unexpected error occurred: {e}\")\nfinally:\n    # Clean up the dummy file\n    if os.path.exists(dummy_mp4_path):\n        os.remove(dummy_mp4_path)\n        print(f\"Cleaned up '{dummy_mp4_path}'.\")","lang":"python","description":"This quickstart demonstrates how to use `pymp4` to parse top-level boxes from an MP4 file. It creates a simple dummy MP4 file for demonstration, then uses `BoxParser` to iterate through and print information about the parsed boxes. In a real application, you would replace the dummy file creation with opening an existing MP4 file.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":"1.4.0","pypi_latest":"1.4.0","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":2.6,"avg_import_s":null,"wheel_type":"sdist"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pymp4","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"20.0M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pymp4","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":2.1,"import_time_s":null,"mem_mb":null,"disk_size":"20M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pymp4","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"22.5M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pymp4","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":2.2,"import_time_s":null,"mem_mb":null,"disk_size":"23M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pymp4","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"12.4M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pymp4","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":3.2,"import_time_s":null,"mem_mb":null,"disk_size":"13M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pymp4","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"12.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pymp4","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":2.9,"import_time_s":null,"mem_mb":null,"disk_size":"13M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pymp4","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"19.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pymp4","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":2.4,"import_time_s":null,"mem_mb":null,"disk_size":"20M"}]}}