qmcgaw/tinier

By qmcgaw

Updated about 1 year ago

Tinier is here to make your media files tinier, with a small quality loss.

Image

208

Tinier

Features

Tinier is a safe, easy to use program to make your media files tinier, with a small quality loss.

  • Video files (using libsvtav1 by default)
  • Image files
  • Audio files (using libopus by default)

Setup and usage

Windows

Compatibility: amd64, 386, arm64

  1. Download the pre-built program for your platform from the Github releases.

  2. Run with

    tinier.exe
    # Show list of flag options
    tinier.exe -help
    
  3. 💁 If your CPU is 386 or arm64, you need to install ffmpeg manually.

Mac OSX

Compatibility: amd64, arm64

  1. Install ffmpeg, usually brew install ffmpeg does it.

  2. Download the pre-built program for your platform from the Github releases.

  3. Run with

    chmod +x tinier
    ./tinier
    # Show list of flag options
    ./tinier.exe -help
    
Linux

Compatibility: amd64, 386, armv5, armv6, armv7 and arm64

  1. Download the pre-built program for your platform from the Github releases.

  2. Run with

    chmod +x tinier
    ./tinier
    # Show list of flag options
    ./tinier.exe -help
    
From source
  1. Install go

  2. Install tinier from source:

    go install github.com/qdm12/tinier/cmd/tinier
    
  3. 💁 Depending on your platform, you might have to install ffmpeg manually.

Docker

Compatibility: x86_64, x86, aarch64, armhf, armv7, ppc64le and s390x

docker run -it --rm -v /your/path:/tmp/tinier qmcgaw/tinier -input /tmp/tinier/input -output /tmp/tinier/output

You can also use the following environment variables if you prefer:

Environment variableDefault value
TINIER_INPUT_DIR_PATH/input
TINIER_OUTPUT_DIR_PATH/output
TINIER_FFMPEG_PATH
TINIER_FFMPEG_MIN_VERSION5.0.1
TINIER_OVERRIDE_OUTPUToff
TINIER_VIDEO_SCALE1280:-1
TINIER_VIDEO_PRESET8
TINIER_VIDEO_CODEClibsvtav1
TINIER_VIDEO_OUTPUT_EXTENSION.mp4
TINIER_VIDEO_EXTENSIONS.mp4,.mov,.avi
TINIER_VIDEO_SKIPno
TINIER_VIDEO_CRF23
TINIER_IMAGE_SCALE5
TINIER_IMAGE_OUTPUT_EXTENSION.jpg
TINIER_IMAGE_EXTENSIONS.jpg,.jpeg,.png,.avif
TINIER_IMAGE_SKIPno
TINIER_IMAGE_CODECmjpeg
TINIER_IMAGE_QSCALE5
TINIER_IMAGE_CRF35
TINIER_AUDIO_CODEClibopus
TINIER_AUDIO_OUTPUT_EXTENSION.opus
TINIER_AUDIO_EXTENSIONS.mp3,.flac
TINIER_AUDIO_SKIPno
TINIER_AUDIO_QSCALE5
TINIER_AUDIO_BITRATE32k

General usage

tinier -help
Usage of tinier:
  -audiobitrate string
        Audio ffmpeg codec bitrate string value. (default "32k")
  -audiocodec string
        Audio ffmpeg codec. (default "libopus")
  -audioextensions string
        CSV list of audio file extensions. (default ".mp3,.flac")
  -audiooutputextension string
        Audio output file extension to use. (default ".opus")
  -audioqscale int
        Audio ffmpeg QScale value. (default 5)
  -audioskip
        Skip audio files.
  -ffmpegminversion string
        FFMPEG binary minimum version requirement. (default "5.0.1")
  -ffmpegpath string
        FFMPEG binary path.
  -imagecodec string
        Image ffmpeg codec. (default "mjpeg")
  -imagecrf int
        Image ffmpeg crf value, only used by the libaom-av1 codec. (default 35)
  -imageextensions string
        CSV list of image file extensions. (default ".jpg,.jpeg,.png,.avif")
  -imageoutputextension string
        Image output file extension to use. (default ".jpg")
  -imageqscale int
        Image ffmpeg qscale:v value, only used by the mjpeg codec. (default 5)
  -imagescale string
        Image ffmpeg scale value. (default "1280:-1")
  -imageskip
        Skip image files.
  -inputdirpath string
        Input directory path. (default "input")
  -outputdirpath string
        Output directory path. (default "output")
  -override
        Override files in the output directory.
  -videocodec string
        Video ffmpeg codec. (default "libsvtav1")
  -videocrf int
        Video ffmpeg CRF value. (default 23)
  -videoextensions string
        CSV list of video file extensions. (default ".mp4,.mov,.avi")
  -videooutputextension string
        Video output file extension to use. (default ".mp4")
  -videopreset string
        Video ffmpeg preset. (default "8")
  -videoscale string
        Video ffmpeg scale value. (default "1280:-1")
  -videoskip
        Skip video files.

Implementation details

Ffmpeg detection

tinier manages its own dependency ffmpeg by:

  1. looking at the user given ffmpeg path
  2. looking at any ffmpeg in the system path
  3. falling back to downloading a static ffmpeg build for your platform

In all cases it skips a certain ffmpeg if it doesn't match the default minimum version 5.0.1, which can be changed with -ffmpegminversion.

Safety
  • tinier can be stopped at anytime and pick up again safely
  • tinier copies over all files from the input directory to the output directory, even if untouched.
  • tinier encodes videos to a temporary directory and only moves them to the output directory when completed.
  • tinier does not delete any file from the input directory

Limitations

  • EXIF data is not preserved
  • file creation time (OS dependent) is not preserved

Docker Pull Command

docker pull qmcgaw/tinier