Skip to main content

MPGG
Streamlined MPEG-1 and MPEG-2 source loader and helper utility for VapourSynth

Build status Python version VapourSynth version DeepSource

Features

  • 🎥 Supports MPEG-1 and MPEG-2 Sources
  • 🧠 Understands Mixed-scan Sources
  • 🤖 VFR to CFR (Variable to Constant frame rate)
  • 🛠️ Automatic Frame-indexing using DGIndex
  • ⚙️ Zero-configuration
  • 🧩 Easy installation via PIP/PyPI
  • ❤️ Fully Open-Source! Pull Requests Welcome

Installation

$ pip install mpgg

Voilà 🎉! You now have the mpgg package installed, and you can now import it from a VapourSynth script.

Dependencies

The following is a list of software that needs to be installed manually. MPGG cannot install these automatically on your behalf.

Software

  • MKVToolnix (specifically mkvextract) for demuxing MPEG streams from MKV containers.
  • DGIndex for automatic frame-indexing of MPEG streams.

Make sure you put them in your current working directory, in the installation directory, or put the directory path in your PATH environment variable. If you do not do this then their binaries will not be able to be found.

VapourSynth Plugins

  • d2vsource for loading an indexed DGIndex project file.

These plugins may be installed using vsrepo on Windows, or from a package repository on Linux.

Usage

The following is an example of using MPGG to get a clean CFR Fully Progressive stream from an Animated Mixed-scan VFR DVD-Video source.

import functools

from mpgg import MPGG
from havsfunc import QTGMC

# load the source with verbose information printed
mpg = MPGG(r"C:\Users\John\Videos\animated_dvd_video.mkv", verbose=True)

# recover progressive frames where possible, and show which frames were recovered
mpg.recover(verbose=True)

# deinterlace any remaining interlaced frames with QTGMC, and show which frames were deinterlaced
mpg.deinterlace(
  kernel=functools.partial(QTGMC, Preset="Very Slow", FPSDivisor=2),
  verbose=True
)

# convert VFR to CFR by duplicating frames in a pattern
mpg.ceil()

# get the final clip (you may use the clip in between actions as well)
clip = mpg.clip

# ...

clip.set_output()

You can also chain calls! This is the same script but chained,

import functools

from mpgg import MPGG
from havsfunc import QTGMC

# load MPEG, recover progressive frames, deinterlace what's left, and finally VFR to CFR
clip = MPGG(r"C:\Users\John\Videos\animated_dvd_video.mkv", verbose=True).\
  recover(verbose=True).\
  deinterlace(kernel=functools.partial(QTGMC, Preset="Very Slow", FPSDivisor=2), verbose=True).\
  ceil().\
  clip

# ...

clip.set_output()

There are more methods not shown here. I recommend taking a look at the MPGG class for further information, methods, and more.

Warning Do not copy/paste and re-use these examples. Read each method's doc-string information as they each have their own warnings, tips, and flaws that you need to be aware of. For example, recover() shouldn't be used on all MPEG sources, floor() shouldn't be used with recover(), you may not want to use ceil() if you want to keep encoding as VFR, and such.

Terminology

Term Meaning
CFR Constant frame-rate, the source uses a set frame rate on playback
VFR Variable frame-rate, the source switches frame rate at least once on playback
Scan The technology used to show images on screens, i.e., Interlaced or Progressive
Mixed-scan Source with both Progressive and Interlaced frames within the video data
Frame-indexing Analyzing a source to index frame/field information for frame-serving

Contributors

License

© 2021-2023 rlaphoenix — GNU General Public License, Version 3.0

Metadata

Release files for mpgg 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mpgg 1.0.0
File Size Uploaded
mpgg-1.0.0.tar.gz 25.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mpgg 1.0.0
File Interpreter ABI Platform
mpgg-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 48.7 kB

Release files / mpgg-1.0.0.tar.gz

Download URL mpgg-1.0.0.tar.gz
Size 25.1 kB
Tags Source
SHA-256 checksum
How to use checksums
5f008c5a701b94e3ef9b4adadb7d42da80e6dd42cbe38f5eefae98d5016e20c2
BLAKE2b-256 checksum
How to use checksums
da3fd9ee547e775bfdca21730ade21bf2212d150445ff9277151fe3dcd178602
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.2.2 CPython/3.10.10 Linux/5.15.0-1034-azure

Release files / mpgg-1.0.0-py3-none-any.whl

Download URL mpgg-1.0.0-py3-none-any.whl
Size 23.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1adcc8e24eabd09868eb63baa3d88ec21090f2f385ae979cf30348eb2451fc33
BLAKE2b-256 checksum
How to use checksums
7abf8a56c63d00ee5d9092d74aa4b98e892c0e9a692fc266754d15a6c0cfc38a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.2.2 CPython/3.10.10 Linux/5.15.0-1034-azure

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page