";
if(in_array((intval($_GET["jahr"])-1), $jahre)){
$siteData['mainContent'].=
@@ -610,16 +637,20 @@ $retHtml = "";
$retHtml .= "
";
+ "
";
$retHtml .= "";
}
diff --git a/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/wkQrCode.php b/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/wkQrCode.php
new file mode 100644
index 0000000..c19dfc5
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/wkQrCode.php
@@ -0,0 +1,24 @@
+
+
diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.ftpUpload b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.ftpUpload
index c00c6ac..2ba49b4 100644
--- a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.ftpUpload
+++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.ftpUpload
@@ -16,6 +16,17 @@ httpUrlBase = http://cwsvjudo.bplaced.net.net/
ftpFilePath = videoalben/videoalben.2018
ftpPathBase = /www
+
+#ftpPathBase = /htdocs
+#ftpFilePath = videoalben/videoalben.2018
+
+ftpServer = cwsvjudo.bplaced.net
+ftpUser = cwsvjudo
+ftpPassword = ***REMOVED***
+
+ftpPathBase = /www
+ftpFilePath = videoalben/videoalben.2018
+
vidGalIndexPhp = ~/keeper/judo/homepage/redesign2018/markdownExperiment/src/galleryTemplates/indexHier.php
dryRun = --dry-run
timeHandling= --only-newer
@@ -24,14 +35,13 @@ lftpNetLimitRate = 0
domain = cwsvJudo.dedyn.io
vidGalInsertScript = ~/keeper/judo/homepage/redesign2018/markdownExperiment/src/galleryHelper/vidGalInsert.py
-
.PHONY: all
all:
.PHONY: ftpUpload
ftpUpload:
- lftp -e 'set ftp:ssl-allow no; set net:limit-rate $(lftpNetLimitRate); mkdir -f $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR); mkdir -f $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/thumbnails; mkdir -f $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/webm; put $(vidGalIndexPhp) -o $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/index.php; put videos/config.inc.php -o $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/config.inc.php; mirror $(dryRun) $(timeHandling) -R videos/thumbnails $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/thumbnails; mirror $(dryRun) $(timeHandling) -R videos/webm $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/webm; quit; ' \
- -u $(ftpUser),$(ftpPassword) ftp://$(ftpServer)
+# lftp -e 'set ftp:ssl-allow no; set net:limit-rate $(lftpNetLimitRate); mkdir -f $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR); mkdir -f $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/thumbnails; mkdir -f $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/webm; put $(vidGalIndexPhp) -o $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/index.php; put videos/config.inc.php -o $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/config.inc.php; mirror $(dryRun) $(timeHandling) -R videos/thumbnails $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/thumbnails; mirror $(dryRun) $(timeHandling) -R videos/webm $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/webm; quit; ' \
+# -u $(ftpUser),$(ftpPassword) ftp://$(ftpServer)
registerFiles:
for file in videos/webm/*; do \
@@ -47,4 +57,15 @@ registerFiles:
--vidUrl="http://$(domain)/webm/$${filename}" \
--posterUrl="http://cwsvjudo-media-2018.unaux.com/$(ftpFilePath)/$(VID_GAL_DIR)/thumbnails/$${filename%.*}.jpg" \
--checkSum=$${filename%.*}; \
+# lftp -e 'set ftp:ssl-allow no; set net:limit-rate $(lftpNetLimitRate); mkdir -f $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR); mkdir -f $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/thumbnails; mkdir -f $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/webm; put $(vidGalIndexPhp) -o $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/index.php; put videos/config.inc.php -o $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/config.inc.php; mirror $(dryRun) $(timeHandling) -R videos/thumbnails $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/thumbnails; mirror $(dryRun) $(timeHandling) -R videos/webm $(ftpPathBase)/$(ftpFilePath)/$(VID_GAL_DIR)/webm; quit; ' \
+# -u $(ftpUser),$(ftpPassword) ftp://$(ftpServer)
+
+ for file in videos/webm/*; do \
+ filename=$${file##*/}; \
+ $(vidGalInsertScript) \
+ --shiaiYamlFile=./shiaiData.yaml \
+# --vidUrl="http://cwsvjudo.dedyn.io/videos/$${filename}" \
+ --vidUrl="http://cwsvjudo.dedyn.io/videos/$${filename}" \
+ --posterUrl="http://cwsvjudo-media-2018.unaux.com/$(ftpFilePath)/$(VID_GAL_DIR)/thumbnails/$${filename%.*}.jpg" \
+ --checkSum=$${filename%.*};\
done;\
diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.shiaiVidsSpeedupTest b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.shiaiVidsSpeedupTest
new file mode 100644
index 0000000..de171e0
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.shiaiVidsSpeedupTest
@@ -0,0 +1,183 @@
+# Makefile für die Verarbeitung der Wettkampfvideos
+#
+# devVersion für:
+# - Beschleunigung der ganzen Sache
+# - Reihenfolge der Filter
+# - Einbeziehen des Uploads
+# - zwei verschiedene Server
+# - der erste Pass kommt auf den Hauptserver, auch wenn er größer
+# ist; er wird aber auch wieder gelöscht, wenn die nächste
+# Videogalerie kommt
+# - der zweite Pass kommt auf den Medienserver (unter
+# Berücksichtigung der Limitationen wie Einzeldateigrößen)
+
+
+# Systemspezifische Anpassungen (gehören eigentlich in ein
+# Makefile.cfg, aber in jedem Wettkampordner eines anlegen, ist wieder
+# mühsam)
+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
+
+# Der deinterlaceFilter sollte immer der erste sein!
+ffmpegVideoFilterDeinterlace = yadif,
+# Der einzige Grund, den ich für Skalierung zuerst gefunden habe, ist,
+# dass beim Hochskalieren das Rasschen zunimmt. Mache ich aber nicht.
+ffmpegVideoScaleFilter = scale=$(VID_CODEC_WIDTH):$(VID_CODEC_HEIGHT):sws_flags=lanczos,
+# nlmeans soll klar besser sein, aber hqdn3d sehr viel schneller
+ffmpegVideoFilterDenoise = hqdn3d,
+#ffmpegVideoFilterDenoise = hqdn3d,
+# Aspect ratio ist eigentlich nur notwendig, wenn das
+# Pixelseitenverhältnis nicht 1:1 ist
+ffmpegVideoFilterUnsharp = unsharp=5:5:0.8:3:3:0.4
+ffmpegDisplayAspectRatio = 16:9
+#ffmpegDisplayAspectRatio = 9:16
+
+
+.SECONDARY: $(vidstabLogs) $(firstPassLogs)
+
+.PHONY: all clean
+all: $(webmVideos) $(jpegThumbs)
+
+clean:
+ $(RM) \
+ $(vidstabLogs) \
+ $(firstPassLogs) \
+ $(webmVideos) \
+ $(jpegThumbs)
+
+.PHONY: thumbnails
+thumbnails: $(jpegThumbs)
+
+.PHONY: echo
+echo:
+ @echo $(webmVideos)
+ @echo $(firstPassLogs)
+ @echo $(targetSourceDirectories)
+
+
+# Erzeugen der Targets
+.PHONY: targets
+targets:
+ 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;
+
+# Die Stabilisierungsberechnung:
+# eventuell sollte hier die Skalierung vorgeschaltet werden...
+# @toDo: Ist es mit vorheriger Skalierung schneller, oder langsamer?
+# Denoise ist in der Stabilisation eigentlich unnötig, ebenso das unsharp
+# Die Skalierung sollte vieleicht vor der Stabilisierung stattfinden (und braucht nicht hochwertig zu sein?)
+videos/.forCompressing/%.trf: videos/.forCompressing/%.video
+ $(FFMPEG) -i $^ \
+ -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoScaleFilter)$(ffmpegVideoFilterVidstabDetect):result="$@" \
+ -f null \
+ -
+
+videos/.forCompressing/%.firstPassLog-0.log: videos/.forCompressing/%.video videos/.forCompressing/%.trf
+# -b:v $(VID_CODEC_BITRATE) \
+# -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoFilterDenoise)$(ffmpegVideoFilterVidstabTransform):input="$(basename $<).trf",nlmeans=s=6:p=5:r=7,$(ffmpegVideoScaleFilter)unsharp=5:5:0.8:3:3:0.4 \
+# wir speichern mal schon den ersten pass, damit haben wir zwar eine
+# größere Dateigröße, aber können bereits etwas hochladen
+# /dev/null
+# First Pass
+ $(FFMPEG) -i $< \
+ -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoScaleFilter)$(ffmpegVideoFilterDenoise)$(ffmpegVideoFilterVidstabTransform):input="$(basename $<).trf",$(ffmpegVideoFilterUnsharp) \
+ -codec:v $(VID_CODEC) \
+ -pass 1 \
+ -passlogfile "$(basename $<).firstPassLog" \
+ -aspect $(ffmpegDisplayAspectRatio) \
+ -threads 1 \
+ -speed 4 \
+ -tile-columns 0 \
+ -frame-parallel 0 \
+ -g 9999 \
+ -aq-mode 0 \
+ -an \
+ -f webm \
+ -y \
+ "$(basename $<).webm"
+
+# target und dependencies müssen noch angepasst werden
+# 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
+ $(GET_VIDEO_DURATION_JSON) $<
+# -b:v $(VID_CODEC_BITRATE) \
+# Second Pass
+ $(FFMPEG) -i $< \
+ -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoScaleFilter)$(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 \
+ -aspect $(ffmpegDisplayAspectRatio)\
+ -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
+videos/thumbnails/%.png: videos/webm/%.webm
+ 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 "$@"
+
+videos/thumbnails/%.jpg: videos/thumbnails/%.png
+ $(GUETZLI) --quality 90 "$<" "$@"
+# convert "$<" "$@"
diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vidstab b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vidstab
index 7f2f90b..87de5c9 100644
--- a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vidstab
+++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vidstab
@@ -257,16 +257,16 @@ videos/webm/%.webm: videos/aufnahmen/elly/%.mp4
-an \
-f webm \
"$@"
- curl \
- --upload-file "$@" \
- --user cwsvjudo:Dee4oquu \
- "ftp://cwsvjudo.square7.net/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@)" \
- --ftp-create-dirs
- curl \
- --upload-file "$@" \
- --user cwsvjudo:***REMOVED*** \
- "ftp://cwsvjudo.bplaced.net/www/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@)" \
- --ftp-create-dirs
+# curl \
+# --upload-file "$@" \
+# --user cwsvjudo:Dee4oquu \
+# "ftp://cwsvjudo.square7.net/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@)" \
+# --ftp-create-dirs
+# curl \
+# --upload-file "$@" \
+# --user cwsvjudo:***REMOVED*** \
+# "ftp://cwsvjudo.bplaced.net/www/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@)" \
+# --ftp-create-dirs
videos/thumbnails/%.jpg: videos/webm/%.webm
mkdir -p videos/thumbnails
diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vidstabTest b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vidstabTest
index 9cee755..32ce5fa 100644
--- a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vidstabTest
+++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vidstabTest
@@ -6,6 +6,9 @@ GUETZLI = /d/projekte/tests/guetzli.git/bin/Release/guetzli.exe
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
@@ -88,6 +91,7 @@ targets:
# 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="$@" \
@@ -120,7 +124,7 @@ videos/.forCompressing/%.firstPassLog-0.log: videos/.forCompressing/%.video vide
# 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
- ~/keeper/judo/homepage/redesign2018/markdownExperiment/src/galleryHelper/getVideoDurationJson.py $<
+ $(GET_VIDEO_DURATION_JSON) $<
# -b:v $(VID_CODEC_BITRATE) \
# Second Pass
$(FFMPEG) -i $< \
@@ -128,15 +132,9 @@ videos/webm/%.webm: videos/.forCompressing/%.video videos/.forCompressing/%.trf
-codec:v $(VID_CODEC) \
-pass 2 \
-passlogfile "$(basename $<).firstPassLog" \
-<<<<<<< HEAD
- -deadline best \
- -b:v $(shell /d/temp/cwsvJudo/homepage/redesign2018/markdownExperiment/src/galleryHelper/getVideoDurationJson.py $<)k \
- -aspect $(ffmpegDisplayAspectRatio)\
-=======
$(VID_CODEC_DEADLINE) \
- -b:v $(shell ~/keeper/judo/homepage/redesign2018/markdownExperiment/src/galleryHelper/getVideoDurationJson.py $<)k \
- -aspect 16:9 \
->>>>>>> a763569bdbb2f100ce14b50dcb7828db4e6f4852
+ -b:v $(shell $(GET_VIDEO_DURATION_JSON) $<)k \
+ -aspect $(ffmpegDisplayAspectRatio)\
-threads 1 \
-speed 0 \
-tile-columns 0 \
@@ -149,18 +147,14 @@ videos/webm/%.webm: videos/.forCompressing/%.video videos/.forCompressing/%.trf
-f webm \
$@
-videos/thumbnails/%.png: videos/.forCompressing/%.video
+#videos/thumbnails/%.png: videos/.forCompressing/%.video
+videos/thumbnails/%.png: videos/webm/%.webm
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 "$<" -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoScaleFilter)thumbnail -frames:v 1 "$@"
+ $(FFMPEG) -i "$<" -aspect $(ffmpegDisplayAspectRatio) -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoScaleFilter)thumbnail -frames:v 1 "$@"
videos/thumbnails/%.jpg: videos/thumbnails/%.png
-<<<<<<< HEAD
$(GUETZLI) --quality 90 "$<" "$@"
-=======
-# $(GUETZLI) --quality 90 "$<" "$@"
- convert "$<" "$@"
-
->>>>>>> a763569bdbb2f100ce14b50dcb7828db4e6f4852
+# convert "$<" "$@"
diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vp9encodeGoogleVodRecommendations b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vp9encodeGoogleVodRecommendations
new file mode 100644
index 0000000..396de29
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vp9encodeGoogleVodRecommendations
@@ -0,0 +1,158 @@
+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_GUETZLI = guetzli
+
+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 good
+#VID_CODEC_DEADLINE := -deadline best
+#VID_CODEC_DEADLINE := -deadline good
+#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
+ffmpegVideoFilterUnsharp = unsharp=5:5:0.8:3:3:0.4
+
+.SECONDARY: $(vidstabLogs) $(firstPassLogs)
+
+.PHONY: all clean
+all: $(webmVideos) $(jpegThumbs)
+
+clean:
+ $(RM) \
+ $(vidstabLogs) \
+ $(firstPassLogs) \
+ $(webmVideos) \
+ $(jpegThumbs)
+
+.PHONY: thumbnails
+thumbnails: $(jpegThumbs)
+
+.PHONY: echo
+echo:
+ @echo $(webmVideos)
+ @echo $(firstPassLogs)
+ @echo $(targetSourceDirectories)
+
+
+# Erzeugen der Targets
+.PHONY: targets
+targets:
+ 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;
+
+# Die Stabilisierungsberechnung:
+# eventuell sollte hier die Skalierung vorgeschaltet werden...
+# @toDo: Ist es mit vorheriger Skalierung schneller, oder langsamer?
+# Denoise ist in der Stabilisation eigentlich unnötig, ebenso das unsharp
+# Die Skalierung sollte vieleicht vor der Stabilisierung stattfinden (und braucht nicht hochwertig zu sein?)
+videos/.forCompressing/%.trf: videos/.forCompressing/%.video
+ $(FFMPEG) -i $^ \
+ -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoFilterVidstabDetect):result="$@" \
+ -f null \
+ -
+
+videos/.forCompressing/%.firstPassLog-0.log: videos/.forCompressing/%.video videos/.forCompressing/%.trf
+# wir speichern mal schon den ersten pass, damit haben wir zwar eine
+# größere Dateigröße, aber können bereits etwas hochladen
+# "$(basename $<).webm"
+# First Pass
+ $(FFMPEG) -i $< \
+ -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoFilterDenoise)$(ffmpegVideoFilterVidstabTransform):input="$(basename $<).trf",$(ffmpegVideoScaleFilter)unsharp=5:5:0.8:3:3:0.4 \
+ -codec:v $(VID_CODEC) \
+ $(VID_CODEC_DEADLINE) \
+ -pass 1 \
+ -b:v $(shell $(GET_VIDEO_DURATION_JSON) $<)k \
+ -passlogfile "$(basename $<).firstPassLog" \
+ -aspect $(ffmpegDisplayAspectRatio) \
+ -threads 1 \
+ -speed 4 \
+ -tile-columns 0 \
+ -frame-parallel 0 \
+ -g 9999 \
+ -aq-mode 0 \
+ -an \
+ -f webm \
+ -y \
+ /dev/null
+
+# Second Pass
+# target und dependencies müssen noch angepasst werden
+# 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 \
+ -aspect $(ffmpegDisplayAspectRatio)\
+ -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
+#videos/thumbnails/%.png: videos/webm/%.webm
+ 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 "$@"
+
+videos/thumbnails/%.jpg: videos/thumbnails/%.png
+ $(GUETZLI) --quality 90 "$<" "$@"
+# convert "$<" "$@"
diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.recursiveVariableTest/Makefile b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.recursiveVariableTest/Makefile
new file mode 100644
index 0000000..dc17219
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.recursiveVariableTest/Makefile
@@ -0,0 +1,9 @@
+include Makefile.cfg
+
+recTestVar = Hallo
+#export recTestVar
+
+.PHONY: recTest
+recTest:
+ echo ${recTestVar}
+ make -e --file=Makefile.sub
diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.recursiveVariableTest/Makefile.cfg b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.recursiveVariableTest/Makefile.cfg
new file mode 100644
index 0000000..99675e2
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.recursiveVariableTest/Makefile.cfg
@@ -0,0 +1 @@
+recTestVar = Hallo
diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.recursiveVariableTest/Makefile.sub b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.recursiveVariableTest/Makefile.sub
new file mode 100644
index 0000000..60ad504
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.recursiveVariableTest/Makefile.sub
@@ -0,0 +1,3 @@
+.PHONY: echo
+echo:
+ echo ${recTestVar}
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..abf0cb6
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal
@@ -0,0 +1,42 @@
+include ${makefileDir}/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..d9ce64b
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal.cfg
@@ -0,0 +1,19 @@
+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
+makefileDir = ~/keeper/cwsvJudo/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d
+
+FFMPEG = /home/marko/Downloads/ffmpeg-4.1.3-amd64-static/ffmpeg
+
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..2f243a1
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.webmCompress
@@ -0,0 +1,78 @@
+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),$(ffmpegVideoScaleFilter),$(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),$(ffmpegVideoScaleFilter),$(ffmpegVideoFilterDenoise),$(ffmpegVideoFilterVidstabTransform):input="$(basename $<).trf",$(ffmpegVideoFilterUnsharp),$(ffmpegVideoScaleFilter) \
+ -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),$(ffmpegVideoScaleFilter),$(ffmpegVideoFilterDenoise),$(ffmpegVideoFilterVidstabTransform):input="$(basename $<).trf",$(ffmpegVideoFilterUnsharp) \
+ -codec:v $(VID_CODEC) \
+ -pass 2 \
+ -passlogfile "$(basename $<).firstPassLog" \
+ $(VID_CODEC_DEADLINE) \
+ -b:v $(shell $(getTargetParameter) $< videoBitrate)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 "$<" "$@"
+
+.PHONY: echo
+echo:
+ echo $(GET_VIDEO_DURATION_JSON)
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..d47e241
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.webmCompress.cfg
@@ -0,0 +1,62 @@
+#FFMPEG = /c/proggis/media/editoren/ffmpeg-4.0.2-win64-static/bin/ffmpeg.exe
+#FFMPEG = ffmpeg
+FFMPEG = /home/marko/Downloads/ffmpeg-4.1.3-amd64-static/ffmpeg
+
+GUETZLI = ~/tmp/guetzli/bin/Release/guetzli
+#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
+#GET_VIDEO_DURATION_JSON = ~/keeper/cwsvJudo/homepage/redesign2018/markdownExperiment/src/galleryHelper/getVideoDurationJson.py
+
+getTargetParameter = /d/temp/cwsvJudo/homepage/redesign2018/markdownExperiment/src/galleryHelper/getFfmpegFlags.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
+# vidstab empfiehlt die Verwendung des unsharp-Filters bei vidstabtransform
+ffmpegVideoFilterUnsharp = unsharp=5:5:0.8:3:3:0.4
+
+#ffmpegVideoScaleFilter = scale=$(VID_CODEC_WIDTH):$(VID_CODEC_HEIGHT):sws_flags=lanczos,
+#ffmpegVideoScaleFilter = scale=if\( gt\(in_w, in_h\), -2, $(VID_CODEC_HEIGHT) \):if\( gt\(in_w, in_h\), $(VID_CODEC_HEIGHT), -2\):sws_flags=lanczos
+#ffmpegVideoScaleFilter = scale="if\(gt\(in_w\,in_h\)\,-2\,$(VID_CODEC_HEIGHT)\)":"if\(gt\(in_w\,in_h\)\,$(VID_CODEC_HEIGHT)\,-2\)":sws_flags=bicubic
+ffmpegVideoScaleFilter = scale="if\(gt\(in_w\,in_h\)\,-2\,$(shell $(getTargetParameter) $< pixelSize)\)":"if\(gt\(in_w\,in_h\)\,$(shell $(getTargetParameter) $< pixelSize)\,-2\)":sws_flags=bicubic
+ffmpegVideoFilterDeinterlace = yadif
+ffmpegVideoFilterDenoise = nlmeans
+#ffmpegVideoFilterDenoise = hqdn3d,
+#ffmpegDisplayAspectRatio = 16:9
+#ffmpegDisplayAspectRatio = 9:16
+
diff --git a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-footer.css b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-footer.css
index 3d38967..7ff4ae7 100644
--- a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-footer.css
+++ b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-footer.css
@@ -13,3 +13,9 @@
max-width: 1em;
}
+@media print{
+ .footerBar
+ {
+ display: none;
+ }
+}
diff --git a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-header.css b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-header.css
index b7633c4..2784013 100644
--- a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-header.css
+++ b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-header.css
@@ -66,3 +66,10 @@
align-items: center;
}
}
+
+@media print{
+ .cwsvHeader
+ {
+ display: none;
+ }
+}
diff --git a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-layout.css b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-layout.css
index eeb9ceb..f22f1d3 100644
--- a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-layout.css
+++ b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-layout.css
@@ -74,3 +74,10 @@ body > * {
flex-basis: 25%;
}
}
+
+@media print{
+ .sideNotes
+ {
+ display: none;
+ }
+}
diff --git a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-mainNav.css b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-mainNav.css
index a927b90..21591e7 100644
--- a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-mainNav.css
+++ b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-mainNav.css
@@ -85,3 +85,10 @@
display: initial;
}
}
+
+@media print{
+ #mainNav
+ {
+ display: none;
+ }
+}
diff --git a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-sideBar.css b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-sideBar.css
index f25f265..e5e0ca2 100644
--- a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-sideBar.css
+++ b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-sideBar.css
@@ -14,7 +14,7 @@ amp-sidebar {
}
.sidebar a {
text-decoration: none;
- color: inherit;
+ color: inherit;
}
.close-sidebar {
font-size: 1.5em;
diff --git a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-subNav.css b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-subNav.css
index beb2b70..de22c25 100644
--- a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-subNav.css
+++ b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-subNav.css
@@ -87,3 +87,10 @@
text-align: initial;
}
}
+
+@media print{
+ .subNav
+ {
+ display: none;
+ }
+}
diff --git a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-wkKalender.css b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-wkKalender.css
index 87fbd74..70ced6d 100644
--- a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-wkKalender.css
+++ b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-wkKalender.css
@@ -809,7 +809,7 @@
}
.textoverlayedImage > div {
z-index: 99;
- width: 70%;
+ width: fit-content;
position: absolute;
top: 50%;
left: 50%;
@@ -834,6 +834,7 @@
}
.wkBoxMediaGallery > *{
flex-basis:50%;
+ padding: 5%;
}
@@ -885,3 +886,260 @@
background-color: #FF8100;
border-radius: .5em;
}
+
+@media print{
+ .wkMonthBar
+ {
+ display: none;
+ }
+ .wkKalender > thead{
+ display: table-header-group;
+ width: 100%;
+ }
+ .wkKalender > tbody > tr{
+ display: table-row;
+ width: 100%;
+ }
+ .wkKalender > tbody > tr > td {
+ display: table-cell;
+ }
+ /*qrCode*/
+ .wkKalender > tbody > tr > td > img{
+ width: 1cm;
+ }
+ .wkKalender > tbody > tr > td:nth-of-type(5) > a{
+ display: none;
+ }
+ .wkKalender > tbody > tr > td[data-title]:before {
+ display: none;
+ content: "";
+ }
+ .wkKalender > tbody{
+ display: table-row-group;
+ }
+ .wkKalender > tfoot{
+ display: table-footer-group;
+ }
+ .wkKalender > tbody > tr {
+ border: 1px solid #e0e0e0;
+ border-radius: 2px;
+ margin-bottom: 1.6rem;
+ }
+ .wkKalender > tbody > tr > td {
+ vertical-align: middle;
+ text-align: initial;
+ }
+ .wkKalender > tbody > tr:nth-child(odd) {
+ background-color: #FF8100;
+ }
+ .wkKalender > tbody > tr > td:nth-child(odd) {
+ background-color: inherit;
+ }
+ .wkKalender > tbody > tr > td[data-title]:before {
+ content: initial;
+ }
+ .wkKalender tr, th, td {
+ border: 1px solid black;
+ }
+ .wkKalender th {
+ display: table-cell;
+ }
+
+ .kalenderDatum{
+ flex-direction: column;
+ align-items: center;
+ }
+ .kalenderDatum > span:nth-child(4)::after{
+ content: initial;
+ white-space: initial;
+ }
+ .kalenderDatum > span:nth-child(4){
+ display: none;
+ }
+ .kalenderDatum > span:nth-child(3)::after{
+ content: ".";
+ white-space: pre;
+ }
+ .kalenderDatum > span:nth-child(2)::after{
+ content: initial;
+ white-space: initial;
+ }
+
+/* https://codepen.io/denilsonsa/pen/Etrba */
+
+ /****************************************/
+ /* Styling rules, such as font and colors */
+ .date-as-calendar {
+ font-variant: normal;
+ font-style: normal;
+ font-weight: normal;
+ font-family: "Helvetica", "Arial", sans-serif;
+
+ /* It seems vertical-align: baseline does not work correctly with display: inline-flex. */
+ vertical-align: top;
+
+ /* margin: 1ex; */
+
+ color: black;
+ background: white;
+ background : linear-gradient(to bottom right, #FFF 0%, #EEE 100%);
+
+ border: 1px solid #888;
+ border-radius: 3px;
+ overflow: hidden;
+
+ box-shadow: 2px 2px 2px -2px black;
+ }
+ .date-as-calendar .weekday,
+ .date-as-calendar .day,
+ .date-as-calendar .month,
+ .date-as-calendar .year {
+ text-align: center;
+ line-height: 1.0;
+ }
+ .date-as-calendar .month {
+ font-family: "Oswald", sans-serif;
+ text-transform: uppercase;
+ background: #B11;
+ background : linear-gradient(to bottom right, #D66 0%, #A00 100%);
+ color: white;
+ }
+
+ /****************************************/
+ /* Layout rules using position: absolute and pixels. */
+ .position-pixels.date-as-calendar {
+ display: inline-block;
+ position: relative;
+ width: 64px;
+ height: 64px;
+ }
+ .position-pixels.date-as-calendar .weekday,
+ .position-pixels.date-as-calendar .day,
+ .position-pixels.date-as-calendar .month,
+ .position-pixels.date-as-calendar .year {
+ display: block;
+ position: absolute;
+ left: 0;
+ right: 0;
+ width: 100%;
+ height: 1em;
+ }
+ .position-pixels.date-as-calendar .month {
+ top: 0px;
+ font-size: 12px;
+ padding: 2px 0;
+ }
+ .position-pixels.date-as-calendar .weekday {
+ top: 16px;
+ font-size: 10px;
+ }
+ .position-pixels.date-as-calendar .day {
+ top: 26px;
+ font-size: 24px;
+ }
+ .position-pixels.date-as-calendar .year {
+ top: 50px;
+ font-size: 14px;
+ }
+
+ /****************************************/
+ /* Layout rules using position: absolute and relative dimensions using em. */
+ .position-em.date-as-calendar {
+ display: inline-block;
+ position: relative;
+
+ width: 4em;
+ height: 4em;
+ }
+ .position-em.date-as-calendar .weekday,
+ .position-em.date-as-calendar .day,
+ .position-em.date-as-calendar .month,
+ .position-em.date-as-calendar .year {
+ display: block;
+ position: absolute;
+ left: 0;
+ right: 0;
+ width: 100%;
+ height: 1em;
+ }
+ .position-em.date-as-calendar .month {
+ top: 0px;
+ font-size: 0.75em;
+ padding: 0.1em 0;
+ }
+ .position-em.date-as-calendar .weekday {
+ top: 1.6em;
+ font-size: 0.6125em;
+ }
+ .position-em.date-as-calendar .day {
+ top: 1.1em;
+ font-size: 1.5em
+ }
+ .position-em.date-as-calendar .year {
+ bottom: 0px;
+ font-size: 0.87750em;
+ }
+
+ /****************************************/
+ /* Layout rules using display: inline-flex and relative dimensions using em. */
+ .inline-flex.date-as-calendar {
+ display: inline-flex;
+ flex-direction: column;
+ flex-wrap: nowrap;
+ justify-content: space-between;
+
+ width: 4em;
+ height: 4em;
+ }
+ .inline-flex.date-as-calendar .weekday,
+ .inline-flex.date-as-calendar .day,
+ .inline-flex.date-as-calendar .month,
+ .inline-flex.date-as-calendar .year {
+ display: block;
+ flex: 1 1 auto;
+ }
+ .inline-flex.date-as-calendar .month {
+ order: 1;
+ font-size: 0.75em;
+ padding: 0.1em 0;
+ }
+ .inline-flex.date-as-calendar .weekday {
+ order: 2;
+ font-size: 0.6125em;
+ }
+ .inline-flex.date-as-calendar .day {
+ order: 3;
+ font-size: 1.5em;
+ }
+ .inline-flex.date-as-calendar .year {
+ order: 4;
+ font-size: 0.87750em;
+ }
+
+ /****************************************/
+ /* Multiple sizes. */
+ .date-as-calendar.size0_5x {
+ font-size: 8px;
+ }
+ .date-as-calendar.size0_75x {
+ font-size: 12px;
+ }
+ .date-as-calendar.size1x {
+ font-size: 16px;
+ }
+ .date-as-calendar.size1_25x {
+ font-size: 20px;
+ }
+ .date-as-calendar.size1_5x {
+ font-size: 24px;
+ }
+ .date-as-calendar.size1_75x {
+ font-size: 28px;
+ }
+ .date-as-calendar.size2x {
+ font-size: 32px;
+ }
+ .date-as-calendar.size3x {
+ font-size: 48px;
+ }
+}
diff --git a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018.css b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018.css
index 59daa70..68b2364 100644
--- a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018.css
+++ b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018.css
@@ -24,6 +24,13 @@ body{
}
}
+@media print{
+ body{
+ font-size: 1.3vw;
+ }
+}
+
+
/*
* Ein Reset für das BoxSizing
* Wir wollen Maße auf die "äußere Boundingbox" beziehen
@@ -169,9 +176,19 @@ body{
}
.displayNone{
- display: none !important;
+ display: none;
}
.fontSizeXxSmall{
font-size: xx-small;
}
+
+.print-only{
+ display: none;
+}
+
+@media print{
+ .print-only{
+ display: initial;
+ }
+}
diff --git a/homepage/redesign2018/markdownExperiment/src/galleryHelper/getFfmpegFlags.py b/homepage/redesign2018/markdownExperiment/src/galleryHelper/getFfmpegFlags.py
new file mode 100644
index 0000000..56d238a
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/src/galleryHelper/getFfmpegFlags.py
@@ -0,0 +1,91 @@
+#!/usr/bin/env python3
+
+#
+# Command line use of 'ffprobe':
+#
+# ffprobe -loglevel quiet -print_format json \
+# -show_format -show_streams \
+# video-file-name.mp4
+#
+# man ffprobe # for more information about ffprobe
+#
+
+import subprocess as sp
+import json
+import sys
+import argparse
+
+
+def probe(vid_file_path):
+ ''' Give a json from ffprobe command line
+
+ @vid_file_path : The absolute (full) path of the video file, string.
+ '''
+ if type(vid_file_path) != str:
+ raise Exception('Give ffprobe a full file path of the video')
+ return
+
+ command = ["ffprobe",
+ "-loglevel", "quiet",
+ "-print_format", "json",
+ "-show_format",
+ "-show_streams",
+ vid_file_path
+ ]
+
+ pipe = sp.Popen(command, stdout=sp.PIPE, stderr=sp.STDOUT)
+ out, err = pipe.communicate()
+ return json.loads(out.decode('utf-8'))
+
+def duration(vid_file_path):
+ ''' Video's duration in seconds, return a float number
+ '''
+ _json = probe(vid_file_path)
+
+ if 'format' in _json:
+ if 'duration' in _json['format']:
+ return float(_json['format']['duration'])
+
+ if 'streams' in _json:
+ # commonly stream 0 is the video
+ for s in _json['streams']:
+ if 'duration' in s:
+ return float(s['duration'])
+
+ # if everything didn't happen,
+ # we got here because no single 'return' in the above happen.
+ raise Exception('I found no duration')
+ #return None
+
+def getPixelSize(bitrate):
+ if(bitrate >= 500):
+ return 480
+ if(bitrate >= 250):
+ return 360
+ return 240
+
+if __name__ == "__main__":
+ argParser = argparse.ArgumentParser(description='Calculate Bitrate and Pixelsize (height) for a encoding a video with limited (byte-)size')
+ argParser.add_argument('inFile', help="file to be analysed")
+ argParser.add_argument('flagToGet', help="Zielparameter wählen", choices=['pixelSize', 'videoBitrate'])
+ argParser.add_argument('--audioBitrate', help="audio bitrate die abgezogen werden soll (in kbit/s)", default=0)
+ argParser.add_argument('--targetSize', help="dateigröße der zieldatei in MB", default=10)
+ argParser.add_argument('--overhead', help="prozentualer overhead in %", default=95)
+ argParser.add_argument('--maxVidBitrate', help="Videobitrate, bei der gedeckelt werden soll", default=750)
+ argv = argParser.parse_args()
+
+ video_file_path = argv.inFile
+
+ durationInSec = duration(video_file_path)
+
+ videoBitrateInKbPerSec = argv.overhead/100 * (argv.targetSize * 1000 * 8)/durationInSec - argv.audioBitrate
+ videoBitrateInKbPerSec = int(min(argv.maxVidBitrate, videoBitrateInKbPerSec))
+
+ pixelSize = getPixelSize(videoBitrateInKbPerSec)
+
+ if(argv.flagToGet == "pixelSize"):
+ print(pixelSize)
+
+ if(argv.flagToGet == "videoBitrate"):
+ print(videoBitrateInKbPerSec)
+
diff --git a/homepage/redesign2018/markdownExperiment/src/md/hilfsmittel.md b/homepage/redesign2018/markdownExperiment/src/md/hilfsmittel.md
index 13f785c..c5178f8 100644
--- a/homepage/redesign2018/markdownExperiment/src/md/hilfsmittel.md
+++ b/homepage/redesign2018/markdownExperiment/src/md/hilfsmittel.md
@@ -1,6 +1,6 @@
---
lang: de
-title: "Helferlein für das Juodtraining"
+title: "Helferlein für das Judotraining"
description: "Kleine Helferlein für das Training, insbesondere das Judotraining"
author: "marko"
keywords:
diff --git a/homepage/redesign2018/markdownExperiment/src/yaml/index.subNav.yaml b/homepage/redesign2018/markdownExperiment/src/yaml/index.subNav.yaml
index 0cbd470..c01dbc0 100644
--- a/homepage/redesign2018/markdownExperiment/src/yaml/index.subNav.yaml
+++ b/homepage/redesign2018/markdownExperiment/src/yaml/index.subNav.yaml
@@ -6,5 +6,5 @@ subNav:
- *galerien
- *kontakt
- *judoWiki
- - *extras
+ - *tools
...
diff --git a/homepage/redesign2018/markdownExperiment/wkParticipo/wkParticipo.css b/homepage/redesign2018/markdownExperiment/wkParticipo/wkParticipo.css
deleted file mode 100644
index c7bb573..0000000
--- a/homepage/redesign2018/markdownExperiment/wkParticipo/wkParticipo.css
+++ /dev/null
@@ -1,132 +0,0 @@
-/* blau: #291670 */
-/* gelb: #fff500*/
-
-.wkInfoCard{
- border-left: .5rem solid #291670;
- margin: 1rem 0;
- display: flex;
- background-color: #FFAE00;
- border-radius: 2px;
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.16),
- 0 2px 10px 0 rgba(0, 0, 0, 0.12);
- position: relative;
-
- a{
- text-decoration: none;
- }
-}
-
-.wkInfoCardDate{
- display: flex;
- flex-direction: column;
- align-items: center;
- color: #291670;
- padding: 0rem 0.5rem 0rem 0rem;
- width: 6rem;
-}
-@media (min-width: 640px){
- .wkInfoCardDate{
- justify-content: center;
- }
-}
-
-.wkInfoCardDateDay{
- font-size: 1.75rem;
-}
-
-.wkInfoCardDateWeekday{
- font-size: 1.15rem;
-}
-
-.wkInfoCardDateMonth{
- font-size: 1.15rem;
-}
-
-.wkInfoCardWkData{
- display: flex;
- flex-direction: column;
- flex-grow: 1;
- background-color: #FF8100;
-}
-@media (min-width: 640px){
- .wkInfoCardWkData{
- flex-direction: row;
- }
-}
-
-.wkInfoCardWkInfo{
- padding: 0 1rem;
- flex-grow: 1;
-}
-
-.wkInfoCardWkInfo ul{
- padding: 0;
- list-style-type: none;
-}
-
-@media (min-width: 640px){
- .wkInfoCardWkInfo ul{
- padding: initial;
- list-style-type: initial;
- }
-}
-
-.wkInfoCardButtonBar{
- align-items: center;
- display: flex;
- flex-direction: column;
- justify-content: center;
- padding: 1rem;
-}
-
-.wkInfoCardButton{
- background-color: #fff;
- border-radius: 2px;
- color: #333;
- font-size: .9rem;
- margin: .5rem 0;
- padding: .75rem 1rem;
- text-align: center;
- width: 7rem;
-}
-
-.wkInfoCardButtonSuccess {
- background-color: #291670;
- color: #eee;
-}
-
-.wkInfoCardButtonRaised {
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.16),
- 0 2px 10px 0 rgba(0, 0, 0, 0.12);
-}
-
-.fontWeightLighter {
- font-weight: lighter;
-}
-
-.flexFlowRow{
- flex-flow: row;
-}
-
-.justifyContentFlexStart{
- justify-content: flex-start;
-}
-
-
-.card__icon {
- align-items: center;
- color: #1ABC9C;
- display: flex;
- flex-direction: column;
- padding: 1rem 2rem 1rem 0;
- justify-content: center;
- width: 6rem;
-}
-
-.event-icon {
- font-size: 36px;
-}
-
-.material-icons {
- width: 1rem;
-}
diff --git a/homepage/redesign2018/markdownExperiment/wkParticipo/addEvent.php b/homepage/wkParticipo/addEvent.php
similarity index 86%
rename from homepage/redesign2018/markdownExperiment/wkParticipo/addEvent.php
rename to homepage/wkParticipo/addEvent.php
index 30a6ff1..de4df97 100644
--- a/homepage/redesign2018/markdownExperiment/wkParticipo/addEvent.php
+++ b/homepage/wkParticipo/addEvent.php
@@ -3,7 +3,7 @@
require_once('../local/wkParticipoConf.php.inc');
$message = array();
if(!empty($_POST)){
- if( empty($_POST['f']['wkId']) || empty($_POST['f']['meldefrist']) || empty($_POST['f']['datum']) ){
+ if( empty($_POST['f']['wkId']) || empty($_POST['f']['meldefrist']) ){
$message['error'] = 'Es wurden nicht alle Felder ausgefüllt.';
}
else{
@@ -12,13 +12,12 @@
$message['error'] = 'Datenbankverbindung fehlgeschlagen: ' . $mysqli->connect_error;
}
$query = sprintf(
- "INSERT INTO wkParticipo_Events (wkId, datum, meldefrist)
- SELECT * FROM (SELECT '%s', '%s', '%s') as new_event
+ "INSERT INTO wkParticipo_Events (wkId, meldefrist)
+ SELECT * FROM (SELECT '%s', '%s') as new_event
WHERE NOT EXISTS (
SELECT wkId FROM wkParticipo_Events WHERE wkId = '%s'
) LIMIT 1;",
$mysqli->real_escape_string($_POST['f']['wkId']),
- $mysqli->real_escape_string($_POST['f']['datum']),
$mysqli->real_escape_string($_POST['f']['meldefrist']),
$mysqli->real_escape_string($_POST['f']['wkId'])
);
@@ -56,7 +55,6 @@