Metadata-Version: 2.1
Name: batchypegger
Version: 0.5.0
Summary: apply ffmpeg in a batchy way
Home-page: https://github.com/sofakid/batchypegger
Author: Lucas
Author-email: lucas@example.com
License: MIT
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3.7
Classifier: Operating System :: OS Independent
Requires-Python: >=3.7
Description-Content-Type: text/markdown

batchypegger
============

Apply ffmpeg in a simpler batchy way. 

Easily shrink a video, or a folder of videos.

Turn that 50 gig TV series into a 5 gig folder. Turn that silly-sized screen recording into something you can upload.

Cleans up the filenames too.

Install
=======

First install:
- ffmpeg (and put it in your system path)
- Python 3

Then install it with the `pip` command:

`pip install batchypegger`

Run it once to automatically create the config file `~/.batchypegger.yaml` and you're ready to go!

Examples
========   
- Shrink all videos in the current folder to 360p:

   `batchypegger 360p .`

- Shrink all the videos in the current folder without scaling them:

    `batchypegger .`

- What about just a file?

    `batchypegger 480p somevideo.mkv`

- Do a dry run to examine everything and make sure the filenames are right and the subtitles are picked up and stuff (good idea to do one first):

    `batchypegger . dry`

- Make a few different sizes:

   `batchypegger 360p 480p 720p 1080p .`

- Make a few different sizes but only the first 5 minutes (taster mode):

   `batchypegger taster 360p 480p 720p 1080p .`

- BTW, mode switches `taster` and `dry` can appear anywhere. These are all the same:

    `batchypegger 720p . dry `

    `batchypegger 720p . dry taster`

    `batchypegger taster dry 720p .`



- different schemes can be defined in the config file and then specified. This one will output 3 videos:

    `batchypegger x265 1080p 720p x264 360p somevideo.webm`

    ```
    Outputs: 
        somevideo__x265_720p.mkv
        somevideo__x265_1080p.mkv
        somevideo__x264_360p.mp4
    ```

Subtitles
=========

If there is an `.srt` file with the same exact filename as the video, only difference being the extension, then it will include the subtitles in the output.

If you do a dry run, you can see if it picked up the subtitles or not.

Cleaning Filenames
==================
It cleans the filenames. Someday this will be more configurable.

It will replace most characters with underscores and remove entire phrases that you've specified in the configuration section `just_erase`. 

For example if you had filenames like: `KittyShow 1x03 Freddy's birds (1080p BRrip x265 BooYeah).mkv`, just paste ` (1080p BRrip x265 BooYeah)` into `just_erase` in the config yaml, and do a dry run to make sure it got them. The output filenames would then look something like: `KittyShow_1x03_Freddy_s_birds__x264_360p.mp4`


Ignoring a file
===============
Rename the file to end with `__keep`, like `somevideo__keep.webm`, and it won't be processed.

I want advanced ffmpeg arguments
================================
Go ahead and edit the configuration file. Add as many schemes as you need. The ffmpeg command will be created like:

`ffmpeg ffargs_prefix scheme_prefix -i infile codec_args scaling scheme_suffix ffargs_suffix outfile`

and you can customise most of those in the config file. (`scaling` is calculated if you specify `480p` etc) 

Configuration: `~/.batchypegger.yaml`
====================================

The first time you run batchypegger, the configuration file will be created in your home folder: `~/.batchypegger.yaml` (On Windows that's like `C:\Users\DingleToes\.batchypegger.yaml`)

I tried to pick reasonable defaults. You can make new schemes for whatever you need. `tag` is what will be added to the filename, as in `foo__x264_720p.mp4`.

```yaml
# full path to ffmpeg executable, or auto to look in the system path.
ffmpeg: auto

# the args parser will enforce only recognised numbers for p-ness (480p, 720p, etc)
# although the scaling math will probably do any number you need, just add it in here
# just the numbers, like [320, 300, 2000]
allow_p: []

# the command will be constructed as:
#   ffmpeg ffargs_prefix scheme_prefix -i infile codec_args scaling scheme_suffix ffargs_suffix outfile
ffargs_prefix: 
ffargs_suffix: -max_muxing_queue_size 1024 -movflags faststart

default_scheme: x264
schemes:
  x264: 
    codec_args: -c:v libx264 -crf 28 -c:s mov_text
    format: mp4
    tag: x264
    prefix:
    suffix:

  x264mkv: 
    codec_args: -c:v libx264 -crf 28 -c:s srt
    format: mkv
    tag: x264
    prefix:
    suffix:

  x265: 
    codec_args: -c:v libx265 -crf 30 -c:s srt
    format: mkv
    tag: x265
    prefix:
    suffix:

just_erase: [
  " (480p DVD x265 BooYeah)",
  " (480p x265 BooYeah)",
  # this list can get big...
]


```


