cut-the-crap-1.0.0: src/Cut/Options.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}
module Cut.Options
( Options
, in_file
, out_file
, seg_size
, silent_treshold
, detect_margin
, voice_track
, music_track
, silent_duration
, work_dir
, simpleOptions
)
where
import Control.Lens
import Data.Generics.Product.Fields
import Options.Generic
simpleOptions :: Options
simpleOptions = Options { inFile = halp # "in.mkv"
, outFile = halp # "out.mkv"
, segmentSize = halp . _Just # def_seg_size
, silentTreshold = halp . _Just # def_silent
, detectMargin = halp . _Just # def_margin
, voiceTrack = halp . _Just # 2
, musicTrack = halp # Nothing
, silentDuration = halp . _Just # def_duration
, workDir = halp # Nothing
}
data Options = Options
{ inFile :: FilePath <?> "The input video"
, outFile :: FilePath <?> "The output name without format"
, segmentSize :: Maybe Int <?> "The size of video segments in minutes"
, silentTreshold :: Maybe Double <?> "The treshold for determining intersting sections, closer to zero is detects more audio (n: https://ffmpeg.org/ffmpeg-filters.html#silencedetect)"
, silentDuration :: Maybe Double <?> "The duration before soemthing can be considered a silence (d: https://ffmpeg.org/ffmpeg-filters.html#silencedetect)"
, detectMargin :: Maybe Double <?> "Margin seconds around detection"
, voiceTrack :: Maybe Int <?> "The track to detect audio upon"
, musicTrack :: Maybe Int <?> "The track to detect audio upon"
, workDir :: Maybe FilePath <?> "If specified will use this as temporty directory to store intermeidate files in, good for debugging. Needs to be absolute"
} deriving (Show, Generic)
halp :: Iso' (a <?> b) a
halp = iso unHelpful Helpful
in_file :: Lens' Options FilePath
in_file = field @"inFile" . halp
out_file :: Lens' Options FilePath
out_file = field @"outFile" . halp
def_seg_size :: Int
def_seg_size = 20
def_margin :: Double
def_margin = 0.05
def_silent :: Double
def_silent = 0.0001
def_duration :: Double
def_duration = 0.25
def_voice :: Int
def_voice = 1
seg_size :: Lens' Options Int
seg_size = field @"segmentSize" . halp . non def_seg_size
detect_margin :: Lens' Options Double
detect_margin = field @"detectMargin" . halp . non def_margin
silent_treshold :: Lens' Options Double
silent_treshold = field @"silentTreshold" . halp . non def_silent
silent_duration :: Lens' Options Double
silent_duration = field @"silentDuration" . halp . non def_duration
voice_track :: Lens' Options Int
voice_track = field @"voiceTrack" . halp . non def_voice
music_track :: Lens' Options (Maybe Int)
music_track = field @"musicTrack" . halp
work_dir :: Lens' Options (Maybe FilePath)
work_dir = field @"workDir" . halp
instance ParseRecord Options