From e6826149e95dc8ed8a6bf5a4d9c3286f57aa9a4a Mon Sep 17 00:00:00 2001 From: marko Date: Tue, 14 May 2019 14:44:14 +0200 Subject: [PATCH] Neuordnung der videogalerieerzeugung new file: markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal new file: markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal.cfg new file: markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.webmCompress new file: markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.webmCompress.cfg --- .../Makefiles.vidGal.d/Makefile.vidGal | 42 +++++++++++ .../Makefiles.vidGal.d/Makefile.vidGal.cfg | 15 ++++ .../Makefiles.vidGal.d/Makefile.webmCompress | 72 +++++++++++++++++++ .../Makefile.webmCompress.cfg | 51 +++++++++++++ 4 files changed, 180 insertions(+) create mode 100644 homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal create mode 100644 homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal.cfg create mode 100644 homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.webmCompress create mode 100644 homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.webmCompress.cfg diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal new file mode 100644 index 0000000..82384b3 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal @@ -0,0 +1,42 @@ +include Makefile.vidGal.cfg + +.PHONY: all clean +all: $(webmVideos) $(jpegThumbs) + +clean: + $(RM) \ + $(vidstabLogs) \ + $(firstPassLogs) \ + $(webmVideos) \ + $(jpegThumbs) + +.PHONY: thumbnails +thumbnails: $(jpegThumbs) + +videos/thumbnails/%.jpg: videos/.forCompressing/%.video + make --include-dir=${makefileDir} --file=${makefileDir}/Makefile.webmCompress $@ + +.PHONY: echo +echo: + @echo $(webmVideos) + @echo $(firstPassLogs) + @echo $(targetSourceDirectories) + +# Erzeugen der Targets +# @todo das muss ich immer noch einzeln aufrufen ... +.PHONY: targetSources +targetSources: + mkdir -p videos/.forCompressing + for directory in $(targetSourceDirectories) ;\ + do for file in $${directory}/*.*;\ + do \ + checkSum=$$(sha512sum $${file});\ + ln -f $${file} videos/.forCompressing/$${checkSum%%\ *}.video;\ + done;\ + done; + +# target und dependencies müssen noch angepasst werden +# Die erste Abhängigkeit muss das quellVideo sein! +videos/webm/%.webm: videos/.forCompressing/%.video + make --include-dir=${makefileDir} --file=${makefileDir}/Makefile.webmCompress $@ + diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal.cfg b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal.cfg new file mode 100644 index 0000000..5eda504 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal.cfg @@ -0,0 +1,15 @@ +defaultTargetSourceDirectories = $(sort $(dir $(wildcard ./videos/aufnahmen/*/))) +#targetSourceDirectories = $(sort $(dir $(wildcard ./videos/aufnahmen/*/))) + +targetSourceDirectories := $(if $(targetSourceDirectories), $(targetSourceDirectories), $(defaultTargetSourceDirectories)) + +sourceVideos = $(wildcard videos/.forCompressing/*.video) + +# Zwischentargets, für ein clean +vidstabLogs = $(addsuffix .trf, $(basename $(sourceVideos))) +firstPassLogs = $(addsuffix .firstPassLog-0.log, $(basename $(sourceVideos))) + +webmVideos = $(addprefix videos/webm/, $(addsuffix .webm, $(basename $(notdir $(sourceVideos))))) +jpegThumbs = $(addprefix videos/thumbnails/, $(addsuffix .jpg, $(basename $(notdir $(sourceVideos))))) + +makefileDir = /d/temp/cwsvJudo/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.webmCompress b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.webmCompress new file mode 100644 index 0000000..56e05f9 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.webmCompress @@ -0,0 +1,72 @@ +include Makefile.webmCompress.cfg + +.SECONDARY: $(vidstabLogs) $(firstPassLogs) + +.DEFAULT: info +info: + @echo Es muss ein Target übergeben werden! + +# Die Stabilisierungsberechnung: +# eventuell sollte hier die Skalierung vorgeschaltet werden... +# @toDo: Ist es mit vorheriger Skalierung schneller, oder langsamer? +videos/.forCompressing/%.trf: videos/.forCompressing/%.video + $(FFMPEG) -i $^ \ + -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoFilterDenoise)$(ffmpegVideoFilterVidstabDetect):result="$@" \ + -f null \ + - + +# First Pass +# @todo: irgendwo habe ich mal gelesen, dass man den ersten Pass auch +# als ansehbares Video (mit höchster Qualittätseinstellung) speichern +# kann. Wäre praktisch für eine leicht schnellere Verfügbarkeit. +videos/.forCompressing/%.firstPassLog-0.log: videos/.forCompressing/%.video videos/.forCompressing/%.trf + $(FFMPEG) -i $< \ + -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoFilterDenoise)$(ffmpegVideoFilterVidstabTransform):input="$(basename $<).trf",$(ffmpegVideoScaleFilter)unsharp=5:5:0.8:3:3:0.4 \ + -codec:v $(VID_CODEC) \ + -pass 1 \ + -passlogfile "$(basename $<).firstPassLog" \ + -threads 1 \ + -speed 4 \ + -tile-columns 0 \ + -frame-parallel 0 \ + -g 9999 \ + -aq-mode 0 \ + -an \ + -f webm \ + -y \ + /dev/null + +# Second Pass +# - Die erste Abhängigkeit muss das quellVideo sein! +videos/webm/%.webm: videos/.forCompressing/%.video videos/.forCompressing/%.trf videos/.forCompressing/%.firstPassLog-0.log + mkdir -p videos/webm + $(FFMPEG) -i $< \ + -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoFilterDenoise)$(ffmpegVideoFilterVidstabTransform):input="$(basename $<).trf",$(ffmpegVideoScaleFilter)unsharp=5:5:0.8:3:3:0.4 \ + -codec:v $(VID_CODEC) \ + -pass 2 \ + -passlogfile "$(basename $<).firstPassLog" \ + $(VID_CODEC_DEADLINE) \ + -b:v $(shell $(GET_VIDEO_DURATION_JSON) $<)k \ + -threads 1 \ + -speed 0 \ + -tile-columns 0 \ + -frame-parallel 0 \ + -auto-alt-ref 1 \ + -lag-in-frames 25 \ + -g 9999 \ + -aq-mode 0 \ + -an \ + -f webm \ + $@ + +videos/thumbnails/%.png: videos/.forCompressing/%.video + mkdir -p videos/thumbnails +# $(FFMPEG) -i "$<" -vf "select=gt(scene\,0.4)" -frames:v 5 -vsync vfr -vf $(ffmpegVideoScaleFilter)fps=fps=1/600 "$@" +# $(FFMPEG) -i "$<" -vf $(ffmpegVideoScaleFilter)thumbnail -frames:v 1 "$@" +# $(FFMPEG) -i "$<" -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoFilterDenoise)$(ffmpegVideoFilterVidstabTransform):input="$(basename $<).trf",$(ffmpegVideoScaleFilter)unsharp=5:5:0.8:3:3:0.4,thumbnail -frames:v 1 "$@" +# $(FFMPEG) -i "$<" -aspect $(ffmpegDisplayAspectRatio) -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoScaleFilter)thumbnail -frames:v 1 "$@" + $(FFMPEG) -i "$<" -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoScaleFilter)thumbnail -frames:v 1 "$@" + +videos/thumbnails/%.jpg: videos/thumbnails/%.png + $(GUETZLI) --quality 90 "$<" "$@" +# convert "$<" "$@" diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.webmCompress.cfg b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.webmCompress.cfg new file mode 100644 index 0000000..e6f9bf5 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.webmCompress.cfg @@ -0,0 +1,51 @@ +#FFMPEG = /c/proggis/media/editoren/ffmpeg-4.0.2-win64-static/bin/ffmpeg.exe +FFMPEG = ffmpeg +GUETZLI = /d/projekte/tests/guetzli.git/bin/Release/guetzli.exe +#GUETZLI = /home/marko/proggis/guetzli/bin/Release/guetzli + +DEFAULT_FFMPEG = ffmpeg +#DEFAULT_FFMPEG = /c/proggis/media/editoren/ffmpeg-4.0.2-win64-static/bin/ffmpeg.exe + +GET_VIDEO_DURATION_JSON = /d/temp/cwsvJudo/homepage/redesign2018/markdownExperiment/src/galleryHelper/getVideoDurationJson.py + + +# Für eine schnelle Komprimierung libvpx, sonst vp9 +DEFAULT_VID_CODEC_HEIGHT = 360 +DEFAULT_VID_CODEC_WIDTH = -2 +DEFAULT_VID_CODEC_BITRATE = 500k +DEFAULT_VID_CODEC = libvpx-vp9 + +# Standardwerte auf die benutzen Variablen schreiben, falls diese noch +# nicht (z.B. aus dem Terminal heraus oder über ein IncludeCfgFile) +# gesetzt worden sind +VID_CODEC_BITRATE := $(if $(VID_CODEC_BITRATE),$(VID_CODEC_BITRATE),$(DEFAULT_VID_CODEC_BITRATE)) +VID_CODEC_HEIGHT := $(if $(VID_CODEC_HEIGHT),$(VID_CODEC_HEIGHT),$(DEFAULT_VID_CODEC_HEIGHT)) +VID_CODEC_WIDTH := $(if $(VID_CODEC_WIDTH),$(VID_CODEC_WIDTH),$(DEFAULT_VID_CODEC_WIDTH)) +VID_CODEC := $(if $(VID_CODEC),$(VID_CODEC),$(DEFAULT_VID_CODEC)) + +defaultTargetSourceDirectories = $(sort $(dir $(wildcard ./videos/aufnahmen/*/))) +VID_CODEC_DEADLINE := -deadline best +#VID_CODEC_DEADLINE := -deadline realtime + +targetSourceDirectories = $(sort $(dir $(wildcard ./videos/aufnahmen/*/))) + +targetSourceDirectories := $(if $(targetSourceDirectories), $(targetSourceDirectories), $(defaultTargetSourceDirectories)) +sourceVideos = $(wildcard videos/.forCompressing/*.video) + +vidstabLogs = $(addsuffix .trf, $(basename $(sourceVideos))) +firstPassLogs = $(addsuffix .firstPassLog-0.log, $(basename $(sourceVideos))) +webmVideos = $(addprefix videos/webm/, $(addsuffix .webm, $(basename $(notdir $(sourceVideos))))) +jpegThumbs = $(addprefix videos/thumbnails/, $(addsuffix .jpg, $(basename $(notdir $(sourceVideos))))) + +# das result= fehlt absichtlich +ffmpegVideoFilterVidstabDetect = vidstabdetect=shakiness=10:accuracy=15 +# das input= fehlt absichtlich +ffmpegVideoFilterVidstabTransform = vidstabtransform=optzoom=2:interpol=bicubic:smoothing=30 + +ffmpegVideoScaleFilter = scale=$(VID_CODEC_WIDTH):$(VID_CODEC_HEIGHT):sws_flags=lanczos, +ffmpegVideoFilterDeinterlace = yadif, +ffmpegVideoFilterDenoise = nlmeans, +#ffmpegVideoFilterDenoise = hqdn3d, +#ffmpegDisplayAspectRatio = 16:9 +#ffmpegDisplayAspectRatio = 9:16 +