Compare commits

...

16 Commits

Author SHA1 Message Date
Andros Fenollosa
142ce46da8
Update README.md 2022-09-19 10:09:26 +02:00
Andros Fenollosa
899be289e6 Only optimize option 2022-01-31 22:38:58 +01:00
Andros Fenollosa
b6b8e06a11
Update README.md 2022-01-30 17:14:01 +01:00
Andros Fenollosa
3a66a39a72
Update README.md 2022-01-30 17:12:30 +01:00
Andros Fenollosa
8e20d8373e
Update README.md 2022-01-30 17:11:26 +01:00
Andros Fenollosa
2ee6ec0fde
Add files via upload 2022-01-30 17:08:25 +01:00
Andros Fenollosa
3779512800 Fix bug points 2020-08-06 10:28:27 +02:00
Andros Fenollosa
e06d5f1f24 Add temp folder and config quality audio 2020-07-15 11:28:31 +02:00
Andros Fenollosa
0763285918
Update project.clj 2020-07-14 11:39:54 +02:00
Andros Fenollosa
74a1083c32
Update README.md 2020-07-14 11:39:38 +02:00
Andros Fenollosa
86bd63f37c
Merge pull request #1 from josesanch/master
Add needed gen-class
2020-07-14 11:28:07 +02:00
Andros Fenollosa
1be8149a68
Update README.md 2020-07-14 11:25:10 +02:00
José Sánchez Moreno
c933503b16 Add needed gen-class 2020-07-14 11:24:19 +02:00
Andros Fenollosa
9448c34702
Update README.md 2020-07-14 09:39:29 +02:00
Andros Fenollosa
a024cd4cd8
Update README.md 2020-07-14 09:38:42 +02:00
Andros Fenollosa
e7b010c236
Update README.md 2020-07-14 00:07:50 +02:00
6 changed files with 69 additions and 21 deletions

1
.gitignore vendored
View File

@ -11,3 +11,4 @@ pom.xml.asc
.hgignore
.hg/
videos/
.DS_Store

View File

@ -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
extension_thumbnail: "_thumbnail.mp4"
width_thumbnail: 600
path_videos: "videos"
audio_quality_thumbnail: 128
```
2) Make folder `path_videos`.
3) Make folder `path_videos`.
``` bash
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
5) Now you can execute.
6) Now you can execute.
``` 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
Everything you leave in the videos folder will be optimized for web with the specified resolution (600 px in this example).
``` 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).
example.mp4 -> example_thumbnail.mp4
# Tricks
## I just want to optimise, without resizing
Delete from your settings `width_thumbnail`.

View File

@ -1,3 +1,4 @@
extension_thumbnail: "_thumbnail.mp4"
width_thumbnail: 600
path_videos: "videos"
audio_quality_thumbnail: 128

BIN
demo.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

View File

@ -1,4 +1,4 @@
(defproject video-optimize "1.0.0-SNAPSHOT"
(defproject video-optimize "1.0.4"
:description "Watcher and optimize videos"
:url "http://example.com/FIXME"
:license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0"

View File

@ -1,4 +1,5 @@
(ns video-optimize.core
(:gen-class)
(:require
[clojure.java.io :as io]
[clojure.string :as str]
@ -10,21 +11,31 @@
(def config (yaml/parse-string (slurp "config.yaml")))
(def extension_thumbnail (:extension_thumbnail config))
(def width_thumbnail (:width_thumbnail config))
(def audio_quality_thumbnail (:audio_quality_thumbnail 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]
;; Watch
(hawk/watch! [{:paths [path_videos]
:handler (fn [ctx 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))))
)
)}])
(convertVideo e))}])
(println "Running: Feed me!"))