django-video-encoding helps to convert your videos into different formats and resolutions.
Project description
django-video-encoding helps to convert your videos into different formats and resolutions.
Installation
Install django-video-encoding
pip install django-video-encoding
Add video_encoding to your INSTALLED_APPS.
Integration
Add a VideoField and a GenericRelation(Format) to your model. You can optionally store the width, height and duration of the video by supplying the corresponding field names to the VideoField.
from django.contrib.contenttypes.fields import GenericRelation from django.db import models from video_encoding.fields import VideoField from video_encoding.models import Format class Video(models.Model): width = models.PositiveIntegerField(editable=False, null=True) height = models.PositiveIntegerField(editable=False, null=True) duration = models.FloatField(editable=False, null=True) file = VideoField(width_field='width', height_field='height', duration_field='duration') format_set = GenericRelation(Format)
To show all converted videos in the admin, you should add the FormatInline to your ModelAdmin
from django.contrib import admin from video_encoding.admin import FormatInline from .models import Video @admin.register(Video) class VideoAdmin(admin.ModelAdmin): inlines = (FormatInline,) list_dispaly = ('get_filename', 'width', 'height', 'duration') fields = ('file', 'width', 'height', 'duration') readonly_fields = fields
The conversion of the video should be done in a separate process. Typical options are django-rq or celery. We will use django-rq in the following example. The configuration for celery is similar. django-video-encoding already provides a task (convert_all_videos) for converting all videos on a model. This task should be triggered when a video was uploaded. Hence we listen to the post-save signal and enqueue the saved instance for processing.
# signals.py from django.db.models.signals import post_save from django.dispatch import receiver from django_rq import enqueue from video_encoding import tasks from .models import Video @receiver(post_save, sender=Video) def convert_video(sender, instance, **kwargs): enqueue(tasks.convert_all_videos, instance._meta.app_label, instance._meta.model_name, instance.pk)
After a while You can access the converted videos using
video = Video.objects.get(...) for format in video.format_set.complete().all(): # do something
Configuration
VIDEO_ENCODING_THREADS (default: 1) Defines how many threads should be used for encoding. This may not be supported by every backend.
VIDEO_ENCODING_BACKEND (default: 'video_encoding.backends.ffmpeg.FFmpegBackend') Choose the backend for encoding. django-video-encoding only supports ffmpeg, but you can implement your own backend. Feel free to pulish your plugin and submit a pull request.
VIDEO_ENCODING_BACKEND_PARAMS (default: {}) If your backend requires some special configuration, you can specify them here as dict.
VIDEO_ENCODING_FORMATS (for defaults see video_encoding/config.py) This dictionary defines all required encodings and has some resonable defaults. If you want to customize the formats, you have to specify name, extension and params for each format. For example
VIDEO_ENCODING_FORMATS = { 'FFmpeg': [ { 'name': 'webm_sd', 'extension': 'webm', 'params': [ '-b:v', '1000k', '-maxrate', '1000k', '-bufsize', '2000k', '-codec:v', 'libvpx', '-r', '30', '-vf', 'scale=-1:480', '-qmin', '10', '-qmax', '42', '-codec:a', 'libvorbis', '-b:a', '128k', '-f', 'webm', ], }, ]
Encoding Backends
video_encoding.backends.ffmpeg.FFmpegBackend (default)
Backend for using ffmpeg and ffprobe to convert your videos.
Options
VIDEO_ENCODING_FFMPEG_PATH Path to ffmpeg. If no path is provided, the backend uses which to locate it. VIDEO_ENCODING_FFPROBE_PATH Path to ffprobe. If no path is provided, the backend uses which to locate it.
Custom Backend
You can implement a custom encoding backend. Create a new class which inherits from video_encoding.backends.base.BaseEncodingBackend. You must set the property name and implement the methods encode, get_media_info and get_thumbnail. For further details see the reference implementation: video_encoding.backends.ffmpeg.FFmpegBackend.
If you want to open source your backend, follow these steps.
create a packages named django-video-encoding-BACKENDNAME
publish your package to pypi
Submit a pull requests with the following changes:
add the package to extra_requires
provide reasonable defaults for VIDEO_ENCODING_FORMATS
Development
This project is using poetry to manage all dev dependencies. Clone this repository and run
poetry develop
to create a virtual enviroment with all dependencies. You can now run the test suite using
poetry run pytest
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django-video-encoding-0.3.0.tar.gz
.
File metadata
- Download URL: django-video-encoding-0.3.0.tar.gz
- Upload date:
- Size: 12.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/0.12.5 CPython/3.7.1 Linux/4.18.16-arch1-1-ARCH
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | aca05aeb9e292a64831e61687905cc4b3a896ed534414bc0e388b4a15c0ae296 |
|
MD5 | 04fdc1311643dd620f3a59756443e423 |
|
BLAKE2b-256 | ac5470c8417d028e1d576903ac0e267103739a26e2e90807dc8b8a19bd996355 |
File details
Details for the file django_video_encoding-0.3.0-py2.py3-none-any.whl
.
File metadata
- Download URL: django_video_encoding-0.3.0-py2.py3-none-any.whl
- Upload date:
- Size: 28.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/0.12.5 CPython/3.7.1 Linux/4.18.16-arch1-1-ARCH
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ce20b8c44b99a20ed3d2c5813ad26e9961e5bb8f2bd37f21144a3acd27e1b8a1 |
|
MD5 | 6fc64c8e2da399d897779588adf56773 |
|
BLAKE2b-256 | 369256ef2586bcee52482d65b9f6945bf6b38357d431ac20bd34a797b7d96762 |