diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.deshakeVp9 b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.deshakeVp9 new file mode 100644 index 0000000..349164b --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.deshakeVp9 @@ -0,0 +1,93 @@ +#include Makefile.webmCompress.cfg + +FFMPEG=ffmpeg +GUETZLI=guetzli +audioBitrate = 32 +videoBitrate = $(shell $(getTargetParameter) --audioBitrate=$(audioBitrate) $< videoBitrate) \ +pixelSize=$(shell $(getTargetParameter) --audioBitrate=$(audioBitrate) $< pixelSize) + +getTargetParameter = ~/keeper/cwsvJudo/homepage/redesign2018/markdownExperiment/src/galleryHelper/getFfmpegFlags.py + +ffmpegVideoScaleFilter = scale="if\(gt\(in_w\,in_h\)\,-2\,$(shell $(getTargetParameter) --audioBitrate=$(audioBitrate) $< pixelSize)\)":"if\(gt\(in_w\,in_h\)\,$(shell $(getTargetParameter) --audioBitrate=$(audioBitrate) $< pixelSize)\,-2\)":sws_flags=bicubic +ffmpegVideoFilterDeinterlace = yadif +ffmpegVideoFilterDenoise = nlmeans +ffmpegVideoFilterDeshake = deshake=rx=64:ry=64 + +#ffmpegVideoFilters = $(ffmpegVideoFilterDeinterlace),$(ffmpegVideoScaleFilter),$(ffmpegVideoFilterDenoise),$(ffmpegVideoFilterDeshake),$(ffmpegVideoFilterUnsharp),$(ffmpegVideoScaleFilter) +ffmpegVideoFilters=$(ffmpegVideoFilterDeinterlace) +#,$(ffmpegVideoFilterDenoise),$(ffmpegVideoFilterDeshake),$(ffmpegVideoFilterUnsharp),$(ffmpegVideoScaleFilter) + +vidCodec = libvpx-vp9 +audCodec = libopus +#vidCodecDeadline = -deadline best +vidCodecDeadline = -deadline good +vidFormat = webm + +.SECONDARY: $(vidstabLogs) $(firstPassLogs) + +.DEFAULT: info +info: + @echo Es muss ein Target übergeben werden! + + +# First Pass +videos/.forCompressing/%.firstPassLog-0.log: videos/.forCompressing/%.video + $(FFMPEG) -i $< \ + -codec:v $(vidCodec) \ + -filter:v yadif \ + -filter:v deshake=rx=64:ry=64 \ + -filter:v crop=in_w-2*64:in_h-2*64 \ + -filter:v scale="if\(gt\(in_w\,in_h\)\,-2\,$(shell $(getTargetParameter) --audioBitrate=$(audioBitrate) $< pixelSize)\)":"if\(gt\(in_w\,in_h\)\,$(shell $(getTargetParameter) --audioBitrate=$(audioBitrate) $< pixelSize)\,-2\)":sws_flags=bicubic \ + -codec:a $(audCodec) \ + -pass 1 \ + -passlogfile "$(basename $<).firstPassLog" \ + -threads 1 \ + -speed 4 \ + -tile-columns 0 \ + -frame-parallel 0 \ + -g 9999 \ + -aq-mode 0 \ + -an \ + -f $(vidFormat) \ + -y \ + /dev/null + +# Second Pass +# - Die erste Abhängigkeit muss das quellVideo sein! +videos/webm/%.webm: videos/.forCompressing/%.video videos/.forCompressing/%.firstPassLog-0.log + mkdir -p videos/webm + $(FFMPEG) -i $< \ + -filter:v yadif \ + -filter:v deshake=rx=64:ry=64 \ + -filter:v crop=in_w-2*64:in_h-2*64 \ + -filter:v scale="if\(gt\(in_w\,in_h\)\,-2\,$(shell $(getTargetParameter) --audioBitrate=$(audioBitrate) $< pixelSize)\)":"if\(gt\(in_w\,in_h\)\,$(shell $(getTargetParameter) --audioBitrate=$(audioBitrate) $< pixelSize)\,-2\)":sws_flags=bicubic \ + -codec:v $(vidCodec) \ + -codec:a $(audCodec) \ + -pass 2 \ + -passlogfile "$(basename $<).firstPassLog" \ + $(vidCodecDeadline) \ + -b:a $(audioBitrate)k \ + -b:v $(shell $(getTargetParameter) --audioBitrate=$(audioBitrate) $< videoBitrate)k \ + -threads 1 \ + -speed 0 \ + -tile-columns 0 \ + -frame-parallel 0 \ + -auto-alt-ref 1 \ + -lag-in-frames 25 \ + -g 9999 \ + -f $(vidFormat) \ + $@ + +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.vidGal b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal index abf0cb6..86a1aac 100644 --- a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal +++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal @@ -1,4 +1,4 @@ -include ${makefileDir}/Makefile.vidGal.cfg +include $(makefileDir)/Makefile.vidGal.cfg .PHONY: all clean all: $(webmVideos) $(jpegThumbs) @@ -38,5 +38,5 @@ targetSources: # 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 $@ + make --include-dir=${makefileDir} --file=${makefileDir}/Makefile.deshakeVp9 $@ 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 index d9ce64b..195bb3c 100644 --- a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal.cfg +++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.vidGal.cfg @@ -1,4 +1,4 @@ -defaultTargetSourceDirectories = $(sort $(dir $(wildcard ./videos/aufnahmen/*/))) +defaultTargetSourceDirectories = $(sort $(dir $(wildcard ./aufnahmen/videos/*/))) #targetSourceDirectories = $(sort $(dir $(wildcard ./videos/aufnahmen/*/))) targetSourceDirectories := $(if $(targetSourceDirectories), $(targetSourceDirectories), $(defaultTargetSourceDirectories)) 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 index d47e241..d968508 100644 --- a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.webmCompress.cfg +++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefiles.vidGal.d/Makefile.webmCompress.cfg @@ -1,7 +1,8 @@ +FFMPEG = ffmpeg #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 +#FFMPEG = /home/marko/Downloads/ffmpeg-4.1.3-amd64-static/ffmpeg +#GUETZLI = guetzli GUETZLI = ~/tmp/guetzli/bin/Release/guetzli #GUETZLI = /d/projekte/tests/guetzli.git/bin/Release/guetzli.exe #GUETZLI = /home/marko/proggis/guetzli/bin/Release/guetzli @@ -12,7 +13,8 @@ DEFAULT_FFMPEG = ffmpeg 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 +#getTargetParameter = /d/temp/cwsvJudo/homepage/redesign2018/markdownExperiment/src/galleryHelper/getFfmpegFlags.py +getTargetParameter = ~/keeper/cwsvJudo/homepage/redesign2018/markdownExperiment/src/galleryHelper/getFfmpegFlags.py # Für eine schnelle Komprimierung libvpx, sonst vp9 diff --git a/homepage/redesign2018/markdownExperiment/src/galleryHelper/getFfmpegFlags.py b/homepage/redesign2018/markdownExperiment/src/galleryHelper/getFfmpegFlags.py old mode 100644 new mode 100755 index 56d238a..e0eede5 --- a/homepage/redesign2018/markdownExperiment/src/galleryHelper/getFfmpegFlags.py +++ b/homepage/redesign2018/markdownExperiment/src/galleryHelper/getFfmpegFlags.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 - +# -*- coding: utf8 -*- # # Command line use of 'ffprobe': # @@ -68,7 +68,7 @@ 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('--audioBitrate', help="audio bitrate die abgezogen werden soll (in kbit/s)", default=0, type=float) 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)