Wrapper around ffmpeg to encode quick size restricted webms


Keywords
cli, ffmpeg, ffmpeg-wrapper, purewebm, python, unix-socket, webm
License
Other
Install
pip install purewebm==1.1.0

Documentation

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