Skip to main content

Wrapper around ffmpeg to encode quick size restricted webms

Project description

PureWebM

Originally written for PureMPV, with this utility it is possible to encode webms from a given input, according to a restricted file size or a default CRF (Constant Rate Factor). If the utility is called whilst encoding, additional webm parameters will be put in a queue using Unix sockets.

Usage

To encode a quick webm with the defaults:

$ purewebm -ss 00:00:02.268 -to 00:00:10.310 -i "/tmp/Videos/nijinosaki.mkv" 
Encoding 1 of 1: 100%

Only the video stream will be mapped (no audio) with a size limit of 3MB, and saved under $HOME/Videos/PureWebM.

To encode a webm with size limit of 6MB, burned subtitles, and opus audio:

$ purewebm -i "/tmp/Videos/nijinosaki.mkv" --size_limit 6 -subs --extra_params '-map 0:a -c:a libopus -b:a 128k'
Encoding 1 of 1: 100%

It is possible to request usage instructions through the --help or -h option flags:

$ purewebm --help
usage: purewebm [-h] [--version] (--status | --kill | --input INPUT) [--name_type {unix,md5}]
                [--subtitles] [--encoder ENCODER] [--start_time START_TIME] [--stop_time STOP_TIME]
                [--lavfi LAVFI] [--size_limit SIZE_LIMIT] [--crf CRF] [--cpu-used {0,1,2,3,4,5}]
                [--deadline {good,best}] [--extra_params EXTRA_PARAMS]
                [output]

Utility to encode quick webms with ffmpeg

positional arguments:
  output                the output file, if not set, the filename will be generated according to
                        --name_type and saved in $HOME/Videos/PureWebM

options:
  -h, --help            show this help message and exit
  --version, -v         show program's version number and exit
  --status              queries the main process and prints the current status
  --kill                sends the kill command to the main process; this will terminate all
                        encodings immediately, with no cleanups
  --input INPUT, -i INPUT
                        the input file to encode (NOTE: several files can be selected adding more
                        -i flags just like with ffmpeg, these will be only for a single output
                        file; to encode different files run this program multiple times, the files
                        will be queued in the main process using Unix sockets)
  --name_type {unix,md5}, -nt {unix,md5}
                        the filename type to be generated if the output file is not set: unix uses
                        the current time in microseconds since Epoch, md5 uses the filename of the
                        input file with a short MD5 hash attached (default is unix)
  --subtitles, -subs    burn the subtitles onto the output file; this flag will automatically use
                        the subtitles found in the first input file, to use a different file use
                        the -lavfi flag with the subtitles filter directly
  --encoder ENCODER, -c:v ENCODER
                        the encoder to use (default is libvpx-vp9)
  --start_time START_TIME, -ss START_TIME
                        the start time offset (same as ffmpeg's -ss)
  --stop_time STOP_TIME, -to STOP_TIME
                        the stop time (same as ffmpeg's -to)
  --lavfi LAVFI, -lavfi LAVFI
                        the set of filters to pass to ffmpeg
  --size_limit SIZE_LIMIT, -sl SIZE_LIMIT
                        the size limit of the output file in megabytes, use 0 for no limit (default
                        is 3)
  --crf CRF, -crf CRF   the crf to use (default is 24)
  --cpu-used {0,1,2,3,4,5}, -cpu-used {0,1,2,3,4,5}
                        the cpu-used for libvpx-vp9; a number between 0 and 5 inclusive, the higher
                        the number the faster the encoding will be with a quality trade-off
                        (default is 0)
  --deadline {good,best}, -deadline {good,best}
                        the deadline for libvpx-vp9; good is the recommended one, best has the best
                        compression efficiency but takes the most time (default is good)
  --extra_params EXTRA_PARAMS, -ep EXTRA_PARAMS
                        the extra parameters to pass to ffmpeg, these will be appended making it
                        possible to override some defaults

Logs are saved under $HOME/.config/PureWebM/PureWebM.log

Configuration file

Some of the default options can be changed using a configuration file named PureWebM.conf in the configuration folder. Changeable options are size_limit, crf, and deadline. The following is an example of a configuration file:

# ~/.config/PureWebM/PureWebM.conf
size_limit=4
crf=28
deadline=good

Installation

It can be installed using pip:

$ pip install purewebm

or

$ git clone https://github.com/4ndrs/PureWebM.git
$ cd PureWebM
$ pip install .

Alternatively, pipx can be used if PEP 668 is enforced:

$ pipx install purewebm

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

purewebm-1.2.1.tar.gz (14.2 kB view hashes)

Uploaded Source

Built Distribution

purewebm-1.2.1-py3-none-any.whl (17.5 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page