Compare commits
No commits in common. "master" and "1.0.0" have entirely different histories.
1
.gitignore
vendored
1
.gitignore
vendored
@ -11,4 +11,3 @@ pom.xml.asc
|
|||||||
.hgignore
|
.hgignore
|
||||||
.hg/
|
.hg/
|
||||||
videos/
|
videos/
|
||||||
.DS_Store
|
|
||||||
|
51
README.md
51
README.md
@ -1,67 +1,32 @@
|
|||||||
# Auto video thumbnail
|
# Usage
|
||||||
|
|
||||||
Watch and resize all the videos you deposit in one folder.
|
1) Create `config.yaml`.
|
||||||
|
|
||||||
<img width="100%" src="demo.gif">
|
|
||||||
|
|
||||||
# Install
|
|
||||||
|
|
||||||
1) Install Java.
|
|
||||||
|
|
||||||
Debian/Ubuntu
|
|
||||||
|
|
||||||
``` bash
|
|
||||||
sudo apt install default-jdk ffmpeg
|
|
||||||
```
|
|
||||||
|
|
||||||
Mac OS
|
|
||||||
|
|
||||||
``` bash
|
|
||||||
brew install openjdk
|
|
||||||
```
|
|
||||||
|
|
||||||
2) Create `config.yaml`.
|
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
extension_thumbnail: "_thumbnail.mp4"
|
extension_thumbnail: "_thumbnail.mp4"
|
||||||
width_thumbnail: 600
|
width_thumbnail: 600
|
||||||
path_videos: "videos"
|
path_videos: "videos"
|
||||||
audio_quality_thumbnail: 128
|
|
||||||
```
|
```
|
||||||
|
|
||||||
3) Make folder `path_videos`.
|
2) Make folder `path_videos`.
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
mkdir videos
|
mkdir videos
|
||||||
```
|
```
|
||||||
|
|
||||||
4) Install `ffmpeg`.
|
3) Install `ffmpeg`.
|
||||||
|
|
||||||
5) Download the latest version (`video-optimize-{version}-SNAPSHOT-standalone.jar`).
|
4) Download the latest version (`video-optimize-{version}-standalone.jar`).
|
||||||
|
|
||||||
https://github.com/tanrax/auto-video-thumbnail/releases
|
https://github.com/tanrax/auto-video-thumbnail/releases
|
||||||
|
|
||||||
|
|
||||||
6) Now you can execute.
|
5) Now you can execute.
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
java -jar video-optimize-{version}-SNAPSHOT-standalone.jar
|
java $JVM_OPTS -cp video-optimize-{version}-standalone.jar clojure.main -m video-optimize.core
|
||||||
```
|
```
|
||||||
|
|
||||||
or
|
6) Leave videos.
|
||||||
|
|
||||||
``` bash
|
|
||||||
java $JVM_OPTS -cp video-optimize-{version}-SNAPSHOT-standalone.jar clojure.main -m video-optimize.core
|
|
||||||
```
|
|
||||||
|
|
||||||
7) Leave videos in folder `videos`.
|
|
||||||
|
|
||||||
Everything you leave in the videos folder will be optimized for web with the specified resolution (600 px in this example).
|
Everything you leave in the videos folder will be optimized for web with the specified resolution (600 px in this example).
|
||||||
|
|
||||||
example.mp4 -> example_thumbnail.mp4
|
|
||||||
|
|
||||||
# Tricks
|
|
||||||
|
|
||||||
## I just want to optimise, without resizing
|
|
||||||
|
|
||||||
Delete from your settings `width_thumbnail`.
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
extension_thumbnail: "_thumbnail.mp4"
|
extension_thumbnail: "_thumbnail.mp4"
|
||||||
width_thumbnail: 600
|
width_thumbnail: 600
|
||||||
path_videos: "videos"
|
path_videos: "videos"
|
||||||
audio_quality_thumbnail: 128
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
(defproject video-optimize "1.0.4"
|
(defproject video-optimize "1.0.0-SNAPSHOT"
|
||||||
:description "Watcher and optimize videos"
|
:description "Watcher and optimize videos"
|
||||||
:url "http://example.com/FIXME"
|
:url "http://example.com/FIXME"
|
||||||
:license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0"
|
:license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0"
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
(ns video-optimize.core
|
(ns video-optimize.core
|
||||||
(:gen-class)
|
|
||||||
(:require
|
(:require
|
||||||
[clojure.java.io :as io]
|
[clojure.java.io :as io]
|
||||||
[clojure.string :as str]
|
[clojure.string :as str]
|
||||||
@ -11,31 +10,21 @@
|
|||||||
(def config (yaml/parse-string (slurp "config.yaml")))
|
(def config (yaml/parse-string (slurp "config.yaml")))
|
||||||
(def extension_thumbnail (:extension_thumbnail config))
|
(def extension_thumbnail (:extension_thumbnail config))
|
||||||
(def width_thumbnail (:width_thumbnail config))
|
(def width_thumbnail (:width_thumbnail config))
|
||||||
(def audio_quality_thumbnail (:audio_quality_thumbnail config))
|
|
||||||
(def path_videos (:path_videos config))
|
(def path_videos (:path_videos config))
|
||||||
|
|
||||||
|
|
||||||
(defn convertVideo
|
|
||||||
;; Optimize video
|
|
||||||
[e]
|
|
||||||
(let [path_raw (.getAbsolutePath (:file e))
|
|
||||||
is_thumbnail (doall (re-find (re-pattern extension_thumbnail) path_raw))
|
|
||||||
path_thumbnail (str (str/join "." ( drop-last (str/split path_raw #"\."))) extension_thumbnail)
|
|
||||||
path_thumbnail_temp (str "/tmp/" (last (str/split path_thumbnail #"\/")))]
|
|
||||||
(if (and (.exists (io/file path_raw)) (not is_thumbnail) (not (.exists (io/file path_thumbnail))))
|
|
||||||
(do
|
|
||||||
(prn (str "Optimizing: " path_raw))
|
|
||||||
(if (nil? width_thumbnail)
|
|
||||||
;; Not width, not scale
|
|
||||||
(shell/sh "ffmpeg" "-y" "-i" path_raw "-c:v" "libx264" "-c:a" "aac" "-ab" (str audio_quality_thumbnail) "-strict" "-2" path_thumbnail_temp)
|
|
||||||
;; With width, scale
|
|
||||||
(shell/sh "ffmpeg" "-y" "-i" path_raw "-vf" (str "scale=" width_thumbnail ":-2") "-c:v" "libx264" "-crf" "23" "-profile:v" "high" "-pix_fmt" "yuv420p" "-color_primaries" "1" "-color_trc" "1" "-colorspace" "1" "-movflags" "+faststart" "-an" "-c:a" "aac" "-ab" (str audio_quality_thumbnail) path_thumbnail_temp))
|
|
||||||
(shell/sh "mv" path_thumbnail_temp path_thumbnail)
|
|
||||||
(prn (str "Finish: " path_thumbnail))))))
|
|
||||||
|
|
||||||
(defn -main [& args]
|
(defn -main [& args]
|
||||||
;; Watch
|
;; Watch
|
||||||
(hawk/watch! [{:paths [path_videos]
|
(hawk/watch! [{:paths [path_videos]
|
||||||
:handler (fn [ctx e]
|
:handler (fn [ctx e]
|
||||||
(convertVideo e))}])
|
(let [path_raw (.getAbsolutePath (:file e))
|
||||||
|
is_thumbnail (doall (re-find (re-pattern extension_thumbnail) path_raw))
|
||||||
|
path_thumbnail (str/join (concat (drop-last (str/split path_raw #"\.")) extension_thumbnail))]
|
||||||
|
(if (and (.exists (io/file path_raw)) (not is_thumbnail) (not (.exists (io/file path_thumbnail))))
|
||||||
|
(do
|
||||||
|
(prn (str "Optimizing: " path_raw))
|
||||||
|
;; Optimizing with ffmpeg
|
||||||
|
(shell/sh "ffmpeg" "-y" "-i" path_raw "-vf" (str "scale=" width_thumbnail ":-2") "-c:v" "libx264" "-crf" "23" "-profile:v" "high" "-pix_fmt" "yuv420p" "-color_primaries" "1" "-color_trc" "1" "-colorspace" "1" "-movflags" "+faststart" "-an" "-acodec" "aac" "-ab" "128kb" path_thumbnail)
|
||||||
|
(prn (str "Finish: " path_thumbnail))))
|
||||||
|
)
|
||||||
|
)}])
|
||||||
(println "Running: Feed me!"))
|
(println "Running: Feed me!"))
|
||||||
|
Loading…
Reference in New Issue
Block a user