-- | Run shell programs module Cut.Shell ( ffmpeg , ffmpeg' , floatToText , youtube_dl ) where import Data.Text (Text) import qualified Data.Text as Text import Numeric import Shelly import Network.URI(URI) -- | Wrap ffmpeg for convenience and logging -- technically supports multiple inputs but for convenice we threw that. ffmpeg :: Prelude.FilePath -> [Text] -> Sh [Text] ffmpeg file args = ffmpeg' ("-y" : "-i" : Text.pack file : args) ffmpeg' :: [Text] -> Sh [Text] ffmpeg' args = do liftIO $ putStr "Running: " liftIO $ print $ "ffmpeg " <> Text.unwords args run_ "ffmpeg" args Text.lines <$> lastStderr -- | Format floats for cli floatToText :: Double -> Text floatToText = Text.pack . flip (showFFloat (Just 10)) "" youtube_dl :: URI -> FilePath -> Sh [Text] youtube_dl uri path' = do liftIO $ print $ "running youtube-dl " <> Text.unwords args run_ "youtube-dl" args Text.lines <$> lastStderr where args = [Text.pack $ show uri, "-o", Text.pack path']