Files
pymp4dump/README.md
T
2026-04-24 11:56:10 +02:00

154 lines
2.8 KiB
Markdown

# pymp4dump
**pymp4dump** is a Python-based tool for parsing, inspecting, and extracting data from **MP4 / ISO BMFF (CENC)** files.
It focuses on accurate box-level parsing, DRM metadata extraction, and structured output for analysis workflows.
---
## Features
* Full parsing of **MP4 / ISO BMFF box structure**
* Support for **fragmented (fMP4) and non-fragmented files**
* Detailed decoding of:
* Track metadata (video, audio, subtitles)
* Sample tables (stsz, stsc, stco, etc.)
* Codec configurations (avcC, hvcC, dvcC, etc.)
* Built-in support for **DRM systems**:
* **PlayReady**
* **Widevine**
* **FairPlay**
* Extraction of:
* **Complete PSSH boxes (base64 / hex)**
* **Inner PSSH payload (base64)**
* JSON and human-readable output modes
* Track dumping (raw sample extraction)
* Stream-safe parsing for large files
---
## Requirements
* Python 3.9 or higher
No external dependencies required (standard library only).
---
## Usage
Basic dump:
```bash
python pymp4dump.py input.mp4
```
With verbosity:
```bash
python pymp4dump.py input.mp4 --verbosity 2
```
JSON output:
```bash
python pymp4dump.py input.mp4 --format json
```
---
## DRM / PSSH Extraction
Extract full PlayReady PSSH (base64):
```bash
python pymp4dump.py input.mp4 --extract-playready-pssh
```
Extract only PlayReady payload (base64):
```bash
python pymp4dump.py input.mp4 --extract-playready-payload
```
---
## Track Dumping
Dump a specific track:
```bash
python pymp4dump.py input.mp4 --track 1
```
Output will be:
```
input.mp4.1
```
> Note: Decryption keys are accepted for CLI compatibility but **decryption is not performed**.
---
## Python Usage
Basic PlayReady extraction:
```python
from pymp4dump import extract_playready_pssh_from_mp4
pssh = extract_playready_pssh_from_mp4("init.mp4")
print("PlayReady PSSH:", pssh)
```
Alternative helper:
```python
from pymp4dump import extract_playready_pssh_payload_from_mp4
payload = extract_playready_pssh_payload_from_mp4("init.mp4")
print("PlayReady Payload:", payload)
```
---
## Notes
This project is inspired by tools like **Bento4 mp4dump**, but implemented fully in Python for flexibility and integration into custom workflows.
It is especially useful for:
* DRM analysis
* Media reverse engineering
* Automation pipelines (Widevine / PlayReady workflows)
* Inspecting initialization segments (`init.mp4`)
---
## Limitations
* No media decryption is performed
* Track dumping outputs raw samples only
* Some proprietary or uncommon box types may not be fully decoded
---
## Issues and Support
If you encounter any issues, please open an issue in the repository.
Support and updates will be provided as time permits.
---
## Acknowledgements
Inspired by:
* Bento4
* ISO BMFF specification
* DRM reverse engineering community