Skip to main content

Mediaify

Media encoding made simple!

Encode media without the hassle of wrangling ffmpeg and pillow, instead declare your output declaratively!

Documentation

Documentation Status

import mediaify

with open('./image.png', 'rb') as f:
    data = f.read()

image = mediaify.encode_image(data, mediaify.WEBPImageFormat(quality=90))
image.save("./image.webp")

Multimedia Support

Supports transcoding of several different media types.

  • Audio
  • Image
  • Animation
  • Video
with open("./audio.mp4", "rb") as f:
    data = f.read()

mediaify.encode_audio(data)
>>> AudioFile(audio/mpeg, 2.5MB)

with open("./image.png", "rb") as f:
    data = f.read()

mediaify.encode_image(data)
>>> ImageFile(1200x1600, image/png, 35.4KB)


with open("./animation.gif", "rb") as f:
    data = f.read()

mediaify.encode_animation(data)
>>> AnimationFile(1280x800, 1.1s 11 frames, 10.0fps, image/gif, 132.8KB)


with open("./examples/input/video.mp4", "rb") as f:
    data = f.read()

mediaify.encode_video(data)
>>> VideoFile(1280x720, 60.458s, 24.0fps, audio, video/mp4, 8.5MB)

Customisable

Encode videos with multiple resolutions, formats, codecs as well as thumbnails and previews easily.

import mediaify

thumbnail = mediaify.ThumbnailEncoding(
    encoding=mediaify.WEBPImageFormat(
        resize=mediaify.TargetResolutionResize(width=640, height=360),
        quality=80,
    ),
)
preview = mediaify.VideoPreviewAnimationEncoding(
    encoding=mediaify.WEBPAnimationFormat(
        resize=mediaify.TargetResolutionResize(width=640, height=360),
        quality=50,
        lossless=False,
    ),
    framerate=5,
    frames=60,
)
video_360p = mediaify.WEBMFormat(
    resize=mediaify.TargetResolutionResize(width=640, height=360),
    video_codec=mediaify.AV1Codec(crf=50, preset=7),
    audio_codec=mediaify.OpusCodec(bitrate=128_000),
)
video_720p = mediaify.WEBMFormat(
    resize=mediaify.TargetResolutionResize(width=1280, height=720),
    video_codec=mediaify.AV1Codec(crf=45, preset=6),
    audio_codec=mediaify.OpusCodec(bitrate=128_000),
)
fallback = mediaify.MP4Format(
    resize=mediaify.TargetResolutionResize(width=1280, height=720),
    video_codec=mediaify.H264Codec(crf=21, preset="medium"),
    audio_codec=mediaify.OpusCodec(bitrate=128_000),
)


configs = [thumbnail, preview, video_360p, video_720p, fallback]
with open('./examples/input/video.mp4', 'rb') as f:
    data = f.read()

mediaify.batch_encode_video(data, configs)
>>> [
    ImageFile(640x360, image/webp, 10.1KB),
    AnimationFile(640x360, 12.0s 60 frames, 5.0fps, image/webp, 1.8MB),
    VideoFile(640x360, 60.45s, 24.0fps, audio, video/webm, 2.2MB),
    VideoFile(1280x720, 60.45s, 24.0fps, audio, video/webm, 4.2MB),
    VideoFile(1280x720, 60.45s, 24.0fps, audio, video/mp4, 14.2MB),
]

Installation

https://pypi.org/project/mediaify/

python -m pip install mediaify

Dependencies

ffmpeg

Ensure ffmpeg is installed and on $PATH, try running ffmpeg to check

libmagic

  • Windows: N/A, installed automatically
  • Debian/Ubuntu: sudo apt-get install libmagic1
  • Homebrew: brew install libmagic
  • macports: port install file

Roadmap

If you want any of these features to be developed, just flag an issue and I'll work on it.

  • New Encoders
    • Video
      • WEBM
      • MP4
      • DASH Video
      • Video to Animation
      • Video to Audio
    • Audio Support
  • Better Resizing
    • Blackbars
    • Cropping

Metadata

Release files for mediaify 3.1.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 mediaify 3.1.0
File Size Uploaded
mediaify-3.1.0.tar.gz 43.5 MB Details

Built distribution (wheel)

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

Total release size: 43.6 MB

Release files / mediaify-3.1.0.tar.gz

Download URL mediaify-3.1.0.tar.gz
Size 43.5 MB
Tags Source
SHA-256 checksum
How to use checksums
a03a65896886c27b61bce6492777a804df4843b62a0ab7495f98a8b165a805db
BLAKE2b-256 checksum
How to use checksums
97d2a3162a99b25bcb361f8cba102b123c51c90b27d7d2a71f52421f07cb64e1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-requests/2.32.5

Release files / mediaify-3.1.0-py3-none-any.whl

Download URL mediaify-3.1.0-py3-none-any.whl
Size 25.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6d1489056e05ecf2d5912dd5f655a63867ce9f2c84108da85a94be88428b94cf
BLAKE2b-256 checksum
How to use checksums
d63be2375b8da8e5648611489c01f7e2e4d8a0c2b476601ff0792575b6bc13b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-requests/2.32.5

Release history Release notifications | RSS feed

This release

3.1.0 This release

2 release files

3.0.12

2 release files

3.0.11

2 release files

3.0.10

2 release files

3.0.9

2 release files

3.0.8

2 release files

3.0.7

2 release files

3.0.6

2 release files

3.0.5

2 release files

3.0.4

2 release files

3.0.3

2 release files

3.0.2

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

1 release file

1.2.1

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.0.0

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

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