Giter Club home page Giter Club logo

ffmes's Introduction

ffmes - ffmpeg media encode script

Bash tool handling media files, DVD & Blu-ray. Mainly with ffmpeg. In batch or single file.

Source media files, supported extension:

  • Video in 3gp, avi, bik, flv, m2ts, m4v, mkv, mp4, mov, mpeg, mts, ogv, rm, rmvb, ts, vob, vp9, webm, wmv
  • Audio in 8svx, aac, ac3, aif, aiff, amb, ape, aptx, aud, caf, dff, dsf, dts, eac3, flac, m4a, mka, mlp, mod, mp2, mp3, mqa, mpc, mpg, oga, ogg, ops, opus, ra, ram, sbc, shn, spx, tak, thd, tta, w64, wav, wma, wv
  • Subtitle in ass, idx/sub, srt, ssa, sup

Install & update

curl https://raw.githubusercontent.com/Jocker666z/ffmes/master/ffmes.sh > /home/$USER/.local/bin/ffmes && chmod +rx /home/$USER/.local/bin/ffmes

Dependencies

Essential

ffmpeg ffprobe jq mkvtoolnix uchardet coreutils findutils bc

Optional

  • gojq: faster than jq
  • mediainfo: faster than ffmpeg & ffprobe

CUE Splitting

cuetools flac shntool

DVD rip

dvdbackup lsdvd ogmtools setcd pv

DVD Subtitle

ogmrip tesseract-ocr tesseract-ocr-all wget

Blu-Ray rip

bluray_copy bluray_info

Audio tag

  • Essential: atomicparsley flac monkeys-audio python-mutagen vorbis-tools wavpack
  • Optional: monkeys-audio

Use

Usage:
  Select all currents: ffmes
  Select file:         ffmes -i [INPUTFILE]
  Select directory:    ffmes -i [INPUTDIR]

In batch:
  Video batch, processes one subdirectories.
  Audio batch, processes five subdirectories.

Options:
                          Without option treat current directory.
  -ca|--compare_audio     Compare current audio files stats.
  -i|--input <file>       Treat one file.
  -i|--input <directory>  Treat in batch a specific directory.
  -h|--help               Display this help.
  -j|--videojobs <number> Number of video encoding in same time.
                          Default: 1
  -kc|--keep_cover        Keep embed image in audio files.
  --novaapi               No use vaapi.
  -s|--select <number>    Preselect option (by-passing main menu).
  -pk|--peaknorm <number> Peak db normalization.
                          Positive input used as negative.
                          Default: 1 (-1 db)
  -v|--verbose            Display ffmpeg log level as info.
  -vv|--fullverbose       Display ffmpeg log level as debug.

Examples:

  • ffmes with audio/video in directory
  • ffmes -i DIRECTORY-TO.EDIT for directory
  • ffmes -i FILE-TO.EDIT for single video, audio, or subtitle
  • ffmes -vv -i FILE-TO.EDIT for single video or audio, with ffmpeg in log level as debug
  • ffmes -s 1 -i FILE-TO.EDIT for single video, select option 1 by-passing the main menu

Test

ffmes is tested, under Debian unstable almost every day. If you encounter bugs or have proposals, I'm open to discussion.


Documentations

Main menu options

  • Video:
    • 0, DVD & Blu-ray rip
    • 1, video encoding with custom options
    • 2, copy stream to mkv with map option
    • 3, add audio stream with night normalization
    • 4, one audio stream encoding
  • Video tools:
    • 10, add audio stream or subtitle in video file
    • 11, concatenate video files
    • 12, extract stream(s) of video file
    • 13, split or cut video file by time
    • 14, split mkv by chapter
    • 15, change color of DVD subtitle (idx/sub)
    • 16, convert DVD subtitle (idx/sub) to srt
  • Audio:
    • 20, CUE splitter to flac
    • 21, audio to wav (PCM)
    • 22, audio to flac
    • 23, audio to wavpack
    • 24, audio to mp3 (libmp3lame)
    • 25, audio to vorbis (libvorbis)
    • 26, audio to opus (libopus)
    • 27, audio to aac
  • Audio tools:
    • 30, audio tag editor
    • 31, compare audio files stats
    • 32, generate png image of audio spectrum
    • 33, concatenate audio files
    • 34, split or cut audio file by time
    • 35, audio file tester

Video options

Option 0 details - DVD & Blu-ray rip

DVD:
  • Rip DVD, include ISO and VIDEO_TS VOB
  • Choose title
  • Remux all stream in mkv
  • Chapters integration
  • launch option 1 (optional)
Blu-ray:
  • Rip ISO & disc directory
  • Choose one title or all
  • Remux all stream in mkv
  • Subtitles metadata integration
  • Chapters integration
  • https://github.com/beandog/bluray_info must be installed (see install help bellow)

Option 1 details - video encoding, custom options

  • Video:
    • Stream copy or encoding
    • Encoding options:
      • desinterlace
      • change resolution
      • rotate video (except hevc_vaapi)
      • HDR to SDR (except hevc_vaapi & mpeg4)
      • codecs:
        • libx264: profile, tune, preset & bitrate (video stream total size, crf & cbr)
        • libx265: profile, tune, preset, bitrate (video stream total size, crf & cbr), 1 or 2 pass encoding (not in batch)
        • hevc_vaapi: profile, bitrate (video stream total size, qp & cbr); need ffmpeg --enable-vaapi & proper system configuration; note at same bitrate low quality than libx265 but the encoding speed is much faster
        • AV1:
          • libaom-av1: cpu-used (preset), bitrate (video stream total size, crf & cbr)
          • libsvtav1: preset, bitrate (video stream total size, crf & cbr); need ffmpeg --enable-libsvtav1
        • mpeg4 (xvid): bitrate (qscale & cbr)
  • Audio:
    • All stream copy or encoding
    • Encoding options (apply to all streams):
      • codecs:
        • ac3 (ac3): bitrate (vbr & cbr)
        • opus (libopus): bitrate (vbr)
        • vorbis (libvorbis): bitrate (vbr & cbr)
        • flac (libflac): compression
      • Channels layout for ac3, flac, vorbis: 1.0, 2.0, 2.1, 3.0, 3.1, 4.0, 4.1, 5.1
      • Channels layout for opus: 1.0, 2.0, 3.0, 5.1
  • Container:
    • mkv & mp4 support
  • Map streams selection

Option 2 details - copy stream to mkv with map option

Copy stream in mkv file, with streams selection if source have more than 2 streams.

Option 3 details - add audio stream with night normalization

Add stream with night mode normalization (the amplitude of sound between heavy and weak sounds will decrease). The new stream is in opus, stereo, 320kb. The final will be a mkv

Option 4 details - encode one audio stream only

Encode the selected audio stream of a video file, with the same settings as option 1. The final will be a mkv.

Option 13 details - split or cut video file by time

Cut or split one video by time. Examples of input:

  • [s.20] > remove video after 20 second
  • [e.01:11:20] > remove video before 1 hour 11 minutes 20 second
  • [p.00:02:00] > split video in parts of 2 minutes

Option 14 details - split mkv by chapter

Cut one matroska video per chapter, mkvtoolnix package must be installed.

Option 15 details - change color of DVD subtitle (idx/sub)

You must run the option in a directory containing one or more pairs of idx/sub files with the same filename.

Colors palette available:

  • white font / black border
  • black font / white border
  • yellow font / black border
  • yellow font / white border

Option 16 details - convert DVD subtitle (idx/sub) to srt

You must have installed tesseract-ocr, and ogmrip package (includes subp2tiff and subptools binaries).

Support :

  • Language: english, french, deutsch, spanish, portuguese, italian, japanese, chinese simplified, arabic, korean, russian.
  • multi index idx/sub

Tesseract engine available:

  • By recognizing character patterns, fast but not reliable
  • By recognizing character patterns + neural net (LSTM), slow but reliable (default)

Audio options

Option 21 details - PCM encoding

  • Encoding options:
    • Quality:
      • unsigned 8-bit
      • signed 8-bit
      • signed 16-bit little-endian
      • signed 24-bit little-endian
      • signed 32-bit little-endian
      • Sample rate: 44kHz, 48kHz, or auto (use libsoxr resampler if possible)
    • Channels layout 1.0 to 5.1
    • False stereo files detection (if a channels configuration not selected)
    • -1db peak normalization (only files that have a value less than) (if a channels configuration not selected)
    • After encoding, option for remove all source files, if not for remove created files

Option 22 details - FLAC encoding

  • Encoding options:
    • Quality:
      • Compression level: 0 (fastest) & 12 (slowest)
      • Sample rate: 44kHz, 48kHz, or auto (384kHz max) (use libsoxr resampler if possible)
      • Bit depth: 16, 24 bits, or auto
    • Channels layout 1.0 to 5.1
    • False stereo files detection (if a channels configuration not selected)
    • -1db peak normalization (only files that have a value less than) (if a channels configuration not selected)
    • After encoding, option for remove all source files, if not for remove created files

Option 23 details - WavPack encoding

  • Encoding options:
    • Quality:
      • Compression level: 0 (fastest) & 3 (slowest)
      • Sample rate: 44kHz, 48kHz, or auto (384kHz max) (use libsoxr resampler if possible)
      • Bit depth: 16, 24/32 bits, or auto
    • Channels layout 1.0 to 5.1
    • False stereo files detection (if a channels configuration not selected)
    • -1db peak normalization (only files that have a value less than) (if a channels configuration not selected)
    • After encoding, option for remove all source files, if not for remove created files

Option 26 details - Opus encoding

  • Encoding options:
    • Bitrate
      • vbr, 64kb to 510kb
      • OR mode "auto adapted bitrate from source", particularly useful for processing very large batches of files
    • Channels layout 1.0, 2.0, 3.0, 5.1
    • After encoding, option for remove all source files, if not for remove created files

Option 27 details - AAC encoding

  • Codec used: if the libfdk_aac codec is available (present in non-free configuration), it will be chosen by default. Otherwise it is the aac codec which will be chosen (present in the free configuration).
  • Encoding options:
    • Bitrate
      • vbr 1 to 5
      • cbr 64kb to 560kb
    • Channels layout 1.0 to 5.1
    • After encoding, option for remove all source files, if not for remove created files

Option 30 details - tag editor

Tag for ape, flac, m4a, mp3, ogg, opus, wv files.

Options:

  • Change or add tag disc number
  • Rename files in "Track - Title"
  • Rename files in "Track - Artist - Title"
  • Rename files in "Disc-Track - Title"
  • Rename files in "Disc-Track - Artist - Title"
  • Change or add tag track, by alphabetic sorting
  • Change or add tag album
  • Change or add tag disc number
  • Change or add tag artist
  • Change tag artist by "unknown"
  • Change or add tag date
  • Change tag title for filename
  • Change tag title for "untitled"
  • Remove N character at begin in tag title
  • Remove N character at end in tag title
  • Remove text pattern in tag title.

Restriction:

  • Max depth directory 2
  • Asian character not supported (display degrading)

Option 35 details - split or cut audio file by time

Cut or split one audio by time. Examples of input:

  • [s.20] > remove audio after 20 second
  • [e.01:11:20] > remove audio before 1 hour 11 minutes 20 second
  • [p.00:02:00] > split audio in parts of 2 minutes

In script options (variables)

Various

  • FFMPEG_CUSTOM_BIN: used for everything except video encoding; change default ffmpeg system bin for other location
  • FFPROBE_CUSTOM_BIN: change default ffprobe system bin for other location

Video

  • NVENC (default=0)
    • Description: number of video encoding in same time, the countdown starts at 0 (0=1;1=2...)

Audio

  • ExtractCover (default=0)
    • Description: action performed during encoding
    • 0=extract cover from source and remove in output
    • 1=keep cover from source in output
    • empty=remove cover in output
  • RemoveM3U (default=0)
    • Description: action performed after encoding at "Remove source audio?" question
    • 0=no remove
    • 1=remove
  • PeakNormDB (default=1)
    • Description: Peak db normalization option, this value is written as positive but is used in negative (e.g. 4 = -4)

Dependencies installation

bluray_info & bluray_copy

Dependencies: libbluray-dev libaacs-dev

git clone https://github.com/beandog/bluray_info && cd bluray_info
autoreconf -fi && ./configure
make
su -c "make install" -m "root"

Known errors

  • ffmpeg output error with CIFS mount solutions:
    • in your /etc/fstab, add option cache=none
    • or use NFS instead samba
  • CUE split fail with 24bits audio (shnsplit bug)

Holy reading

FFmpeg static


Holy tools

ffmes's People

Contributors

jocker666z avatar subarashii-no-fansub avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

ffmes's Issues

Some info about Tesseract-OCR v4 and lstm

Hello

I don't know if you're aware but using option 18 of this script and last version of tesseract, it takes more time than the v3

LSTM takes more time but is more reliable

If some want to use legacy version, you need to add --oem 0 to the tesseract command

Batch sub to srt?

I have a folder with multiple sub/idx files.
Is there a way to auto select option 18/0 (eng)/1 (slow) ? I could loop for each file but I'm not sure how I can pre select those settings from the command line.

Thanks for this btw - it's magic! ❤️

Support for IDX/SUB containing multiple languages

I have a bunch of IDX/SUB files that contain three languages: traditional and simplified chinese and english. I'd like to OCR all the english ones at once with ffmes, but ffmes doesn't seem to be able to detect multiple languages and in the end it only converts the first one which is traditional chinese.
Here's a screen from SubtitleRip who can detect which language to load:
2023-07-10_01-34

I'll also leave a sample if needed for testing.
https://anonfiles.com/j74eqa16zd/The_New_Heaven_Sword_Dragon_Sabre_Ep_1_sub_tar_gz

Possibility to convert PGS Subtitles instead of VOBSUB

Hey there,

I've learned about your script from subarashii-no-fansub's Subbing Tutorial and I think it's a really handy script.
But there is one thing, I would like to know, if it is possible.
Since every bluray I have has HDMV/PGS subtitles and your script only supports VOBSUB subtitles, I have to convert every subtitle prior to OCR'ing it with your script.
Do you see a possibility to integrate PGS subtitle support into your script?

It's not that bad if I convert one movie, but if I convert my Game of Thrones collection, I end up with around 256 subtitles (8 seasons, around 8'ish episodes, englisch & german subtitles + forced subtitles). I have to convert to VOBSUB and the only really handy tool I've found was BDsup2sub++ which cannot do batch conversion.

Really thank you for this script! :-)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.