Skip to content

superflyxxi/video-converter

Repository files navigation

Maintainability Rating Quality Gate Status Reliability Rating Security Rating

Bugs Code Smells Coverage Duplicated Lines (%) Technical Debt Vulnerabilities:

video-converter

Tools to convert video

Limitations

  • Channel layouts that end in (side) will not be supported.
  • Cannot normalize audio and change the channel layouts in one pass.
  • DVD directory/ISO are not yet supported.

Docker Image

This image supports ripping a video or bluray directory into an MKV using ffmpeg. As a result, you'll see in the working directory a file with the following naming: {title} ({year}) - s{season}e{episode} - {show-title}.{filename}.mkv. You may want to rip the bluray to mkv before running this tool as ffmpeg is not very good at metadata from blurays.

docker run {image} [options] [filename]

CLI Options

All the command line options listed below can also be overridden using an environment variable. Any - will be replaced with _. Any . will be replaced with two _. For example, --log-level can be set using the LOG_LEVEL environment variable. The final argument will be the filename to process.

Required Options:

  • --title
Option (short) Description Default Example
--log-level The logging level to use. Log Levels. 250 100
--disable-postfix Pass this to avoid having the input filename as a postfix to the output files.
--playlist If the input is bluray, override the playlist to be used. 183
--title The title to be used in metadata and naming of the file. Cool Movie
--year The year of the movie to be used in metadata and naming of the file. 2019
--season The season of the TV show. 01
--episode The episode within the season of the TV show. 01
--show-title The episode title of the TV show. The One Where They Dance
--video-tracks The input video tracks to convert. * 0
--video-format The desired output video format to use. libx265 hevc_vaapi
--video-upscale The upscale multiplier to use for uscaling the video. 1 2.25
--hdr The input is in HDR and the desired output should also be HDR.
--deinterlace-mode Whether to use fieldmap/decimate which will allow 30fps to 24fps(00), double framerate (01), or default behavior of deinterlacing while keeping the same framerate (02). 02 00
--deinterlace Whether deinterlacing should be performed. false will disable deinterlacing. true will force deinterlacing. check-idet will determine wether more than 1% of frames are interlaced. check-probe will be based on video data. false probe
--audio-tracks The input audio tracks to convert. * 1
--audio-format The desired output audio format. ac3 aac
--audio-quality The desired output audio quality based on the --audio-format. 576 2
--audio-sample-rate The desired output audio sample rate. If not provided, input sample rate will be used. 48000
--audio-channel-layout The desired output audio channel layout. 5.1
--audio-channel-layout-tracks The space-separated list of input audio tracks that should have the --audio-channel-layout applied. * 1
--normalize-audio-tracks The space-separated list of input audio tracks that should be normalized. 1 2
--normalize-audio-format The desired output audio format for normalized tracks. --audio-format aac
--normalize-audio-quality The desired output audio quality based on the --normalize-audio-format for normalized tracks. --audio-quality 2
--subtitle-tracks The input subtitle tracks to convert. * 1
--subtitle-format The desired output subtitle format. ass srt
--subtitle-conversion-output The mode for which the conversion of image subtitles to srt should be stored. MERGE: merge it with the mkv. FILE: keep each file separate. MERGE FILE
--subtitle-conversion-blacklist Characters to blacklist during subtitle conversion. Note: It's best to use single quote around the values when passing argument values. `` \ ~/`_ ``

CSV File

If the filename is a CSV file, the files defined within the CSV will be converted based on the definition within. The options listed below are not supported; all others are supported in the CSV. A filename header must be provided in order for this to function. If a header is provided, then every row must have a value for that header. Any setting not mentioned in the CSV will default to the CLI option's value.

  • --disable-postfix
  • --hdr
  • --deinterlace-check
  • --subtitle-conversion-output
  • --subtitle-conversion-blacklist

Examples

Ripping Bluray using VAAPI

This is currently untested.

docker run --rm -it --device /dev/dri -v /mnt/bluray:/data -w /data video-converter --title=Test --year=2019 .

Ripping specific file without VAAPI

docker run --rm -it -v "$(pwd):/data" -w /data video-converter --title=Test --year=2019 file.mpg