Compare commits
	
		
			16 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					142ce46da8 | ||
| 
						 | 
					899be289e6 | ||
| 
						 | 
					b6b8e06a11 | ||
| 
						 | 
					3a66a39a72 | ||
| 
						 | 
					8e20d8373e | ||
| 
						 | 
					2ee6ec0fde | ||
| 
						 | 
					3779512800 | ||
| 
						 | 
					e06d5f1f24 | ||
| 
						 | 
					0763285918 | ||
| 
						 | 
					74a1083c32 | ||
| 
						 | 
					86bd63f37c | ||
| 
						 | 
					1be8149a68 | ||
| 
						 | 
					c933503b16 | ||
| 
						 | 
					9448c34702 | ||
| 
						 | 
					a024cd4cd8 | ||
| 
						 | 
					e7b010c236 | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -11,3 +11,4 @@ pom.xml.asc
 | 
				
			|||||||
.hgignore
 | 
					.hgignore
 | 
				
			||||||
.hg/
 | 
					.hg/
 | 
				
			||||||
videos/
 | 
					videos/
 | 
				
			||||||
 | 
					.DS_Store
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										51
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								README.md
									
									
									
									
									
								
							@@ -1,32 +1,67 @@
 | 
				
			|||||||
# Usage
 | 
					# Auto video thumbnail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1) Create `config.yaml`.
 | 
					Watch and resize all the videos you deposit in one folder.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<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
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
2) Make folder `path_videos`.
 | 
					3) Make folder `path_videos`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``` bash
 | 
					``` bash
 | 
				
			||||||
mkdir videos
 | 
					mkdir videos
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
3) Install `ffmpeg`.
 | 
					4) Install `ffmpeg`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
4) Download the latest version (`video-optimize-{version}-standalone.jar`).
 | 
					5) Download the latest version (`video-optimize-{version}-SNAPSHOT-standalone.jar`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
https://github.com/tanrax/auto-video-thumbnail/releases
 | 
					https://github.com/tanrax/auto-video-thumbnail/releases
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
5) Now you can execute.
 | 
					6) Now you can execute.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``` bash
 | 
					``` bash
 | 
				
			||||||
java $JVM_OPTS -cp video-optimize-{version}-standalone.jar clojure.main -m video-optimize.core
 | 
					java -jar video-optimize-{version}-SNAPSHOT-standalone.jar
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
6) Leave videos.
 | 
					or
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					``` 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 (600px in this example).
 | 
					Everything you leave in the videos folder will be optimized for web with the specified resolution (600px in this example).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					example.mp4 -> example_thumbnail.mp4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Tricks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## I just want to optimise, without resizing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Delete from your settings `width_thumbnail`.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,4 @@
 | 
				
			|||||||
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.0-SNAPSHOT"
 | 
					(defproject video-optimize "1.0.4"
 | 
				
			||||||
  :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,4 +1,5 @@
 | 
				
			|||||||
(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]
 | 
				
			||||||
@@ -10,21 +11,31 @@
 | 
				
			|||||||
(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]
 | 
				
			||||||
                            (let [path_raw       (.getAbsolutePath (:file e))
 | 
					                            (convertVideo 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!"))
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user