Tinier is here to make your media files tinier, with a small quality loss.
10K+
Tinier is a safe, easy to use program to make your media files tinier, with a small quality loss.
libsvtav1 by default)libopus by default)Compatibility: amd64, 386, arm64
Download the pre-built program for your platform from the Github releases.
Run with
tinier.exe
💁 If your CPU is 386 or arm64, you need to install ffmpeg manually.
Compatibility: amd64, arm64
Install ffmpeg, usually brew install ffmpeg does it.
Download the pre-built program for your platform from the Github releases.
Run with
chmod +x tinier
./tinier
Compatibility: amd64, 386, armv5, armv6, armv7 and arm64
Download the pre-built program for your platform from the Github releases.
Run with
chmod +x tinier
./tinier
Install go
Install tinier from source:
go install github.com/qdm12/tinier/cmd/tinier
💁 Depending on your platform, you might have to install ffmpeg manually.
Compatibility: x86_64, x86, aarch64, armhf, armv7, ppc64le and s390x
docker run -it --rm -v /your/path:/tmp/tinier qmcgaw/tinier -input-dir-path /tmp/tinier/input -output-dir-path /tmp/tinier/output
You can also use the following environment variables if you prefer:
| Environment variable | Default value |
|---|---|
TINIER_INPUT_DIR_PATH | /input |
TINIER_OUTPUT_DIR_PATH | /output |
TINIER_FFMPEG_PATH | |
TINIER_FFMPEG_MIN_VERSION | 5.0.1 |
TINIER_OVERRIDE_OUTPUT | off |
TINIER_VIDEO_SCALE | min(1280,iw):-2 |
TINIER_VIDEO_PRESET | auto, resolved to the preset of the encoder which converts: 8 for libsvtav1, fast for libx264, libx265 and libaom-av1 |
TINIER_VIDEO_CODEC | libsvtav1 |
TINIER_VIDEO_AUDIO_CODEC | libopus |
TINIER_VIDEO_OUTPUT_EXTENSION | .mp4 |
TINIER_VIDEO_EXTENSIONS | .mp4,.mov,.avi |
TINIER_VIDEO_SKIP | no |
TINIER_VIDEO_CRF | 23 |
TINIER_IMAGE_SCALE | min(1280,iw):-1 |
TINIER_IMAGE_OUTPUT_EXTENSION | .jpg |
TINIER_IMAGE_EXTENSIONS | .jpg,.jpeg,.png |
TINIER_IMAGE_SKIP | no |
TINIER_IMAGE_CODEC | mjpeg |
TINIER_IMAGE_QSCALE | 5 |
TINIER_IMAGE_CRF | 35 |
TINIER_AUDIO_CODEC | libopus |
TINIER_AUDIO_OUTPUT_EXTENSION | .opus |
TINIER_AUDIO_EXTENSIONS | .mp3,.flac |
TINIER_AUDIO_SKIP | no |
TINIER_AUDIO_QSCALE | 5 |
TINIER_AUDIO_BITRATE | 32k |
tinier -help
Usage of tinier:
-audio-bitrate string
Audio ffmpeg codec bitrate string value. (default "32k")
-audio-codec string
Audio ffmpeg codec. (default "libopus")
-audio-extensions string
CSV list of audio file extensions. (default ".mp3,.flac")
-audio-output-extension string
Audio output file extension to use. (default ".opus")
-audio-qscale int
Audio ffmpeg QScale value. (default 5)
-audio-skip
Skip audio files.
-ffmpeg-minversion string
FFMPEG binary minimum version requirement. (default "5.0.1")
-ffmpeg-path string
FFMPEG binary path.
-image-codec string
Image ffmpeg codec. (default "mjpeg")
-image-crf int
Image ffmpeg crf value, only used by the libaom-av1 codec. (default 35)
-image-extensions string
CSV list of image file extensions. (default ".jpg,.jpeg,.png")
-image-output-extension string
Image output file extension to use. (default ".jpg")
-image-qscale int
Image ffmpeg qscale:v value, only used by the mjpeg codec. (default 5)
-image-scale string
Image ffmpeg scale value. (default "min(1280,iw):-1")
-image-skip
Skip image files.
-input-dir-path string
Input directory path. (default "input")
-output-dir-path string
Output directory path. (default "output")
-override
Override files in the output directory.
-video-codec string
Video ffmpeg codec. (default "libsvtav1")
-video-audio-codec string
Video audio ffmpeg codec. (default "libopus")
-video-crf int
Video ffmpeg CRF value. (default 23)
-video-extensions string
CSV list of video file extensions. (default ".mp4,.mov,.avi")
-video-output-extension string
Video output file extension to use. (default ".mp4")
-video-preset string
Video ffmpeg preset. (default "auto")
-video-scale string
Video ffmpeg scale value. (default "min(1280,iw):-2")
-video-skip
Skip video files.
tinier manages its own dependency ffmpeg by:
ffmpeg in the system pathIn all cases it skips a certain ffmpeg if it doesn't match the default minimum version 5.0.1, which can be changed with -ffmpeg-minversion.
The encoders of the chosen build are read too: a video encoder the build does not provide is replaced by libx265, then by libx264, and the replacement is reported. The libaom-av1 encoder is never picked as a replacement, being an order of magnitude slower than the others. The preset follows the same path. It defaults to auto, which is the preset of the encoder which converts — 8 for libsvtav1, and fast for libx264, libx265 and libaom-av1 — preset values being encoder specific. A preset you give is kept as it is, and one the encoder cannot take is refused before any conversion.
FFMPEG writes no metadata when it re-encodes an image, which is why tinier copies the metadata of the input file into the output file itself. It is transplanted as it is, never re-serialized, so information FFMPEG cannot express survives: maker notes, GPS coordinates, embedded thumbnails, XMP, ICC profiles and IPTC data.
Two parts of the EXIF data describe the pixels, and FFMPEG changes them:
The metadata of a JPEG, PNG or AVIF input file is copied, and written to a JPEG output file, which -image-output-extension defaults to. The metadata of a file of another format, such as HEIC, is not read, and no metadata is written to a non-JPEG output file.
Only the metadata which can be made consistent with the new pixels is copied: EXIF, XMP, ICC profile, IPTC and the comment. The remaining application specific segments of a JPEG input file (APP14 for Adobe, APP6 for MPF, ...) and the chunks of a PNG input file which a JPEG file has no equivalent of are left out: the transparency and pixel density chunks, and the text chunks whose keyword means nothing in a JPEG file, such as Title, Author or Description. The contents of a JPEG segment can also point at positions of the file which the new pixels no longer match.
tinier can be stopped at anytime and pick up again safelytinier 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 throws the conversion away and copies the input file under its own name, so a file never holds bytes of another type than the one its extension announcestinier does not delete any file from the input directory.avif extension to -image-extensions to convert them anyway, metadata includedContent type
Image
Digest
sha256:9a160058f…
Size
49.1 MB
Last updated
3 days ago
docker pull qmcgaw/tinier