Gifcurry 2.1.0.0 → 2.1.1.0
raw patch · 6 files changed
+96/−61 lines, 6 filesdep ~basedep ~directorydep ~process
Dependency ranges changed: base, directory, process
Files
- Gifcurry.cabal +29/−27
- README.md +21/−19
- src/cli/Main.hs +10/−3
- src/dev/Paths_Gifcurry.hs +6/−0
- src/gui/Main.hs +5/−1
- src/lib/Gifcurry.hs +25/−11
Gifcurry.cabal view
@@ -1,14 +1,16 @@ name: Gifcurry-version: 2.1.0.0-synopsis: Create animated GIFs, overlaid with optional text, from video files.-description: GIF creation utility.+version: 2.1.1.0+synopsis: GIF creation utility.+description: Create animated GIFs, optionally overlaid with text, from video files. homepage: https://github.com/lettier/gifcurry license: Apache-2.0 license-file: LICENSE author: Lettier maintainer: Lettier copyright: (C) 2016 David Lettier-category: Graphics+category: Application+ , Library+ , Graphics build-type: Simple extra-source-files: README.md , ./src/dev/Paths_Gifcurry.hs@@ -26,42 +28,42 @@ library exposed-modules: Gifcurry- build-depends: base >=4.7 && <=4.9.0.0- , process >=1.2 && <=1.4.2.0- , temporary >=1.2 && <1.3- , directory ==1.2.*- , text ==1.2.*- , filepath ==1.4.*+ build-depends: base >= 4.7 && < 5+ , process >= 1.2 && <= 1.4.4+ , temporary >= 1.2 && < 1.3+ , directory == 1.3.*+ , text == 1.2.*+ , filepath == 1.4.* hs-source-dirs: ./src , ./src/lib/ ghc-options: -Wall default-language: Haskell2010 -executable gifcurry_gui+executable gifcurry_gui main-is: Main.hs- build-depends: base >=4.7 && <=4.9.0.0- , gtk3 >=0.14 && <0.15- , process >=1.2 && <=1.4.2.0- , temporary >=1.2 && <1.3- , directory ==1.2.*- , text ==1.2.*- , filepath ==1.4.*+ build-depends: base >= 4.7 && < 5+ , gtk3 >= 0.14 && < 0.15+ , process >= 1.2 && <= 1.4.4+ , temporary >= 1.2 && < 1.3+ , directory == 1.3.*+ , text == 1.2.*+ , filepath == 1.4.* other-modules: Paths_Gifcurry, Gifcurry- ghc-options: -O3 -threaded -with-rtsopts=-N -Wall+ ghc-options: -threaded -with-rtsopts=-N -Wall hs-source-dirs: ./src/ , ./src/gui/ , ./src/lib/ default-language: Haskell2010 -executable gifcurry_cli+executable gifcurry_cli main-is: Main.hs- build-depends: base >=4.7 && <=4.9.0.0- , process >=1.2 && <=1.4.2.0- , temporary >=1.2 && <1.3- , directory == 1.2.*- , cmdargs ==0.10.*- , text ==1.2.*- , filepath ==1.4.*+ build-depends: base >= 4.7 && < 5+ , process >= 1.2 && <= 1.4.4+ , temporary >= 1.2 && < 1.3+ , directory == 1.3.*+ , cmdargs == 0.10.*+ , text == 1.2.*+ , filepath == 1.4.* other-modules: Gifcurry ghc-options: -Wall hs-source-dirs: ./src/
README.md view
@@ -2,23 +2,21 @@ # Gifcurry -## GUI+Create animated GIFs, optionally overlaid with text, from video files. -+## Screenshots ++ ## Sample GIF - + Credit: [Caminandes 3: Llamigos (2016) - Blender Foundation](http://www.caminandes.com/) -## Description--Create animated GIFs, overlaid with optional text, from video files.- ## CLI Usage ```bash-$ gifcurry_cli \+gifcurry_cli \ -i inputFile \ -o outputFile \ -s startTime \@@ -53,7 +51,9 @@ __/ | |___/ -Gifcurry (C) 2016 David Lettier. http://www.lettier.com/+Gifcurry 2.1.1.0+(C) 2016 David Lettier+lettier.com Input file: ./03_caminandes_llamigos_1080p.mp4 Output file: ./out.gif@@ -74,14 +74,14 @@ ## Dependencies * [Haskell](https://www.haskell.org/platform/)- * [alex](https://hackage.haskell.org/package/alex)- * [happy](https://hackage.haskell.org/package/happy)- * [gtk2hs-buildtools](https://hackage.haskell.org/package/gtk2hs-buildtools)- * [cmdargs](https://hackage.haskell.org/package/cmdargs)- * [System.IO.Temp (temporary)](https://hackage.haskell.org/package/temporary)- * [Graphics.UI.Gtk (gtk)](https://hackage.haskell.org/package/gtk3)- * [System.Directory (directory)](https://hackage.haskell.org/package/directory)- * [System.FilePath (filepath)](https://hackage.haskell.org/package/filepath)+ * [alex](https://hackage.haskell.org/package/alex)+ * [happy](https://hackage.haskell.org/package/happy)+ * [gtk2hs-buildtools](https://hackage.haskell.org/package/gtk2hs-buildtools)+ * [cmdargs](https://hackage.haskell.org/package/cmdargs)+ * [System.IO.Temp (temporary)](https://hackage.haskell.org/package/temporary)+ * [Graphics.UI.Gtk (gtk)](https://hackage.haskell.org/package/gtk3)+ * [System.Directory (directory)](https://hackage.haskell.org/package/directory)+ * [System.FilePath (filepath)](https://hackage.haskell.org/package/filepath) * [FFmpeg](https://www.ffmpeg.org/download.html) * [ImageMagick](http://www.imagemagick.org/script/download.php) * [GTK+](http://www.gtk.org/download/index.php)@@ -215,5 +215,7 @@ For license information, see [LICENSE](LICENSE). -_(C) 2016 David Lettier._ -http://www.lettier.com/+## Copyright++_(C) 2016 David Lettier_ +[lettier.com](http://www.lettier.com/)
src/cli/Main.hs view
@@ -1,4 +1,8 @@--- David Lettier (C) 2016. http://www.lettier.com/+{-+ Gifcurry+ (C) 2016 David Lettier+ lettier.com+-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE NamedFieldPuns #-}@@ -19,6 +23,9 @@ , bottomText :: String } deriving (Data, Typeable, Show, Eq) +info :: String+info = "Gifcurry " ++ Gifcurry.versionNumber ++ "\n(C) 2016 David Lettier\nlettier.com"+ cliArgs :: CliArgs cliArgs = CliArgs { inputFile = "" &= typFile &= help "The input video file path and name."@@ -31,7 +38,7 @@ , topText = "" &= help "The text you wish to add to the top of the GIF." , bottomText = "" &= help "The text you wish to add to the bottom of the GIF." -- VERSION- } &= summary "Gifcurry 2.1.0.0 (C) 2016 David Lettier"+ } &= summary info &= program "gifcurry_cli" main :: IO ()@@ -106,5 +113,5 @@ , " \\____/_|_| \\___|\\__,_|_| |_| \\__, |" , " __/ |" , " |___/ "- , "\nGifcurry (C) 2016 David Lettier. https://www.lettier.com/"+ , info ]
src/dev/Paths_Gifcurry.hs view
@@ -1,3 +1,9 @@+{-+ Gifcurry+ (C) 2016 David Lettier+ lettier.com+-}+ module Paths_Gifcurry where getDataFileName :: FilePath -> IO FilePath
src/gui/Main.hs view
@@ -1,4 +1,8 @@--- David Lettier (C) 2016. http://www.lettier.com/+{-+ Gifcurry+ (C) 2016 David Lettier+ lettier.com+-} import System.Directory import System.Process
src/lib/Gifcurry.hs view
@@ -1,4 +1,8 @@--- David Lettier (C) 2016. http://www.lettier.com/+{-+ Gifcurry+ (C) 2016 David Lettier+ lettier.com+-} {-# LANGUAGE OverloadedStrings #-} @@ -9,6 +13,7 @@ , GifParams(..) , defaultGifParams , gifParamsValid+ , versionNumber ) where import System.Process@@ -36,6 +41,10 @@ , bottomText :: String } deriving (Show, Read) +-- | The version number.+versionNumber :: String+versionNumber = "2.1.1.0"+ -- | Specifies default parameters for 'startTime', 'durationTime', 'widthSize', 'qualityPercent', and 'fontChoice'. defaultGifParams :: GifParams defaultGifParams = GifParams {@@ -156,6 +165,9 @@ , "\nWriting temporary frames to... " ++ tmpdir ] +frameFileExtension :: String+frameFileExtension = "png"+ tryFfmpeg :: GifParams -> String -> IO (Either IOError String) tryFfmpeg GifParams {@@ -181,14 +193,14 @@ , "-t" , dts , "-r"- , "15"+ , "12" , "-q:v"- , "2"+ , "31" , "-vf" , "scale=" ++ wss ++ ":-1" , "-f" , "image2"- , tmpdir ++ "/%010d.png"+ , tmpdir ++ "/%010d." ++ frameFileExtension ] tryConvert :: GifParams -> String -> IO (Either IOError String)@@ -205,17 +217,19 @@ let params = [ "-quiet" , "-delay"- , "6"+ , "8.3"+ , tmpdir ++ "/*." ++ frameFileExtension+ , "-coalesce" , "-colors" , show $ ncolors qp- , "-coalesce"- , "-layers"- , "OptimizeTransparency"- , "-layers"- , "RemoveDups"- , tmpdir ++ "/*.png" , "-dither" , "FloydSteinberg"+ , "-layers"+ , "remove-dups"+ , "-layers"+ , "compare-any"+ , "-layers"+ , "optimize-transparency" , "-loop" , "0" ]