Metadata-Version: 2.1
Name: purewebm
Version: 1.2.0
Summary: Wrapper around ffmpeg to encode quick size restricted webms
Project-URL: Homepage, https://github.com/4ndrs/PureWebM
Project-URL: Bug Tracker, https://github.com/4ndrs/PureWebM/issues
Author-email: 4ndrs <andres.degozaru@gmail.com>
License: MIT License
        
        Copyright (c) 2022 4ndrs <andres.degozaru@gmail.com>
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
        
License-File: LICENSE
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.8
Description-Content-Type: text/markdown

# PureWebM

Originally written for [PureMPV](https://github.com/4ndrs/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:
```console
$ 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:
```console
$ 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:
```console
$ 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:

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

## Installation

It can be installed using pip:
```console
$ pip install purewebm
```
or
```bash
$ git clone https://github.com/4ndrs/PureWebM.git
$ cd PureWebM
$ pip install .
```
