From 63b517bc210c147b9aa898873702a4604ed401c3 Mon Sep 17 00:00:00 2001 From: cbax Date: Sat, 19 Oct 2024 16:54:59 -0400 Subject: [PATCH] nyaaaa~ --- README.md | 19 +++ encode.sh | 84 ++++++++++++ encoded/.gitkeep | 0 package.sh | 30 +++++ packaged/.gitkeep | 0 source/.gitkeep | 0 static/index.html | 246 ++++++++++++++++++++++++++++++++++++ static/manifest.example.mpd | 81 ++++++++++++ 8 files changed, 460 insertions(+) create mode 100644 README.md create mode 100755 encode.sh create mode 100644 encoded/.gitkeep create mode 100755 package.sh create mode 100644 packaged/.gitkeep create mode 100644 source/.gitkeep create mode 100644 static/index.html create mode 100644 static/manifest.example.mpd diff --git a/README.md b/README.md new file mode 100644 index 0000000..0a5f70f --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +# SSI Movie Night Processing + +### Dependencies +- ffmpeg +- shaka packager +- your time +- some facedesking +- blahaj + +### Notes +specifically, I changed `availabilityStartTime`, added `suggestedPresentationDelay="PT10S"`, and removed `timeShiftBufferDepth` +probably non-spec but who cares +oh I also removed `minimumUpdatePeriod` to disable polling +usually it's supposed to be polling that endpoint to see new chunks or end the livestream but you can also just... not do that and make the player hang forever after the livestream ends +the BBC actually just removed the segment list alltogether and their file is literally static and gets refetched every few hours as a sanity check +and then there's Apple, who forces you to create a manifest for each stream (incl. every quality option) and update all of them with a non-dynamic list of available segments +it's literally an M3U playlist with extra steps + +SEE `static/manifest.mpd.example` FOR MANIFEST FORMAT! diff --git a/encode.sh b/encode.sh new file mode 100755 index 0000000..d73442a --- /dev/null +++ b/encode.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash + +if [ "$2" = "true" ]; then + ffmpeg \ + -hide_banner \ + -hwaccel qsv \ + -hwaccel_output_format qsv \ + -hwaccel_device /dev/dri/renderD128 \ + -i $1 \ + -map_metadata -1 -map_chapters -1 \ + -vf "scale_qsv=-1:1080" \ + -map 0:0 \ + -c:v vp9_qsv \ + -color_range full \ + -colorspace bt709 -color_primaries bt709 \ + -color_trc iec61966-2-1 \ + -crf 31 -b:v 3M \ + -keyint_min 96 -g 96 \ + -row-mt 1 -tile-columns 2 \ + -deadline good -threads 12 \ + encoded/video-1080p-crf31-b3m.mp4 + +# -hwaccel_device /dev/dri/renderD128 \ + ffmpeg \ + -hide_banner \ + -hwaccel qsv \ + -hwaccel_output_format qsv \ + -hwaccel_device /dev/dri/renderD128 \ + -i $1 \ + -map_metadata -1 -map_chapters -1 \ + -map 0:0 \ + -vf "scale_qsv=-1:720" \ + -c:v vp9_qsv \ + -color_range full \ + -colorspace bt709 -color_primaries bt709 \ + -color_trc iec61966-2-1 \ + -crf 32 -b:v 2M \ + -keyint_min 96 -g 96 \ + -row-mt 1 -tile-columns 2 \ + -deadline good -threads 12 \ + encoded/video-0720p-crf32-b2m.mp4 + + # -vf "scale_qsv=-1:540,hwdownload" + # -hwaccel_device /dev/dri/renderD128 \ + ffmpeg \ + -hide_banner \ + -hwaccel qsv \ + -hwaccel_output_format qsv \ + -hwaccel_device /dev/dri/renderD128 \ + -i $1 \ + -map_metadata -1 -map_chapters -1 \ + -map 0:0 \ + -vf "scale_qsv=-1:540" \ + -c:v vp9_qsv \ + -color_range full \ + -colorspace bt709 -color_primaries bt709 \ + -color_trc iec61966-2-1 \ + -crf 33 -b:v 1M \ + -keyint_min 96 -g 96 \ + -row-mt 1 -tile-columns 1 \ + -deadline good -threads 12 \ + encoded/video-0540p-crf33-b1m.mp4 +fi + +#ffmpeg \ +# -hide_banner \ +# -i $1 \ +# -map 0:a:0 -c copy -c:s mov_text -metadata:s:s:0 language=eng encoded/audio-opus-unknown.mp4 + +if [ "$3" = "true" ]; then + ffmpeg \ + -hide_banner \ + -i $1 \ + -map_metadata -1 -map_chapters -1 -map 0:1 -c:a libopus -copyts -b:a 384k -af "channelmap=channel_layout=5.1" encoded/audio-surround-opus-384k.mp4 \ + -map_metadata -1 -map_chapters -1 -map 0:1 -c:a libopus -copyts -b:a 288k -af "channelmap=channel_layout=5.1" encoded/audio-surround-opus-288k.mp4 \ + -map_metadata -1 -map_chapters -1 -map 0:1 -c:a libopus -copyts -b:a 128k -ac 2 encoded/audio-stereo-opus-128k.mp4 \ + -map_metadata -1 -map_chapters -1 -map 0:1 -c:a libopus -copyts -b:a 96k -ac 2 encoded/audio-stereo-opus-96k.mp4 + #-map_metadata -1 -map_chapters -1 -map 0:1 -c:a flac -compression_level 8 -af "channelmap=channel_layout=5.1" encoded/audio-surround-flac-l8.mp4 \ + #-map_metadata -1 -map_chapters -1 -map 0:1 -c:a flac -compression_level 8 encoded/audio-stereo-flac-l8.mp4 + #ffmpeg \ + # -hide_banner \ + # -i $1 \ + # -map 0:s:1 -c copy subs.pgs +fi diff --git a/encoded/.gitkeep b/encoded/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/package.sh b/package.sh new file mode 100755 index 0000000..9e1f48f --- /dev/null +++ b/package.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +packager \ + "in=encoded/video-1080p-crf31-b3m.mp4,stream=video,segment_template=packaged/main-video-1080p-crf31-b3m-\$Number%04d\$.mp4,init_segment=packaged/main-video-1080p-crf31-b3m-init.mp4" \ + "in=encoded/video-0720p-crf32-b2m.mp4,stream=video,segment_template=packaged/main-video-0720p-crf32-b2m-\$Number%04d\$.mp4,init_segment=packaged/main-video-0720p-crf32-b2m-init.mp4" \ + "in=encoded/video-0540p-crf33-b1m.mp4,stream=video,segment_template=packaged/main-video-0540p-crf33-b1m-\$Number%04d\$.mp4,init_segment=packaged/main-video-0540p-crf33-b1m-init.mp4" \ + "in=encoded/audio-surround-opus-384k.mp4,lang=en,stream=audio,segment_template=packaged/main-audio-surround-opus-384k-\$Number%04d\$.mp4,init_segment=packaged/main-audio-surround-opus-384k-init.mp4" \ + "in=encoded/audio-surround-opus-288k.mp4,lang=en,stream=audio,segment_template=packaged/main-audio-surround-opus-288k-\$Number%04d\$.mp4,init_segment=packaged/main-audio-surround-opus-288k-init.mp4" \ + "in=encoded/audio-stereo-opus-128k.mp4,lang=en,stream=audio,segment_template=packaged/main-audio-stereo-opus-128k-\$Number%04d\$.mp4,init_segment=packaged/main-audio-stereo-opus-128k-init.mp4" \ + "in=encoded/audio-stereo-opus-96k.mp4,lang=en,stream=audio,segment_template=packaged/main-audio-stereo-opus-96k-\$Number%04d\$.mp4,init_segment=packaged/main-audio-stereo-opus-96k-init.mp4" \ + --segment_duration 8 --utc_timings "urn:mpeg:dash:utc:http-xsdate:2014=https://time.akamai.com/?iso&ms" \ + --default_language en \ + --generate_static_live_mpd --mpd_output "packaged/manifest.mpd" + + #"in=encoded/subs.sup,lang=en,stream=text,segment_template=packaged/main-subs-eng-\$Number%04d\$.sup" +#packager \ +# "in=encoded/video-1080p-crf31-b3m.mp4,stream=video,segment_template=packaged/video-1080p-crf31-b3m-\$Number%04d\$.mp4,init_segment=packaged/video-1080p-crf31-b3m-init.mp4,drm_label=mrrp" \ +# "in=encoded/video-0720p-crf32-b2m.mp4,stream=video,segment_template=packaged/video-0720p-crf32-b2m-\$Number%04d\$.mp4,init_segment=packaged/video-0720p-crf32-b2m-init.mp4,drm_label=mrrp" \ +# "in=encoded/video-0540p-crf33-b1m.mp4,stream=video,segment_template=packaged/video-0540p-crf33-b1m-\$Number%04d\$.mp4,init_segment=packaged/video-0540p-crf33-b1m-init.mp4,drm_label=mrrp" \ +# "in=encoded/audio-opus-unknown.mp4,lang=en,stream=audio,segment_template=packaged/audio-opus-unknown-\$Number%04d\$.mp4,init_segment=packaged/audio-opus-unknown-init.mp4,drm_label=mrrp" \ +# --segment_duration 8 --utc_timings "urn:mpeg:dash:utc:http-xsdate:2014=https://time.akamai.com/?iso&ms" \ +# --default_language en \ +# --suggested_presentation_delay 30 \ +# --generate_static_live_mpd --mpd_output "packaged/manifest.mpd" + +#sed -i 's/type="static"/type="dynamic"/g' ./packaged/manifest.mpd +#rep="s/mediaPresentationDuration=\".*\"/publishTime=\"$()\"/g" +#sed -i 's/mediaPresentationDuration=".*"/publishTime=""/g' + + #--enable_raw_key_encryption --keys "label=mrrp:key_id=:key=" \ diff --git a/packaged/.gitkeep b/packaged/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/source/.gitkeep b/source/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/static/index.html b/static/index.html new file mode 100644 index 0000000..47c120a --- /dev/null +++ b/static/index.html @@ -0,0 +1,246 @@ + + + + + Silly video player + + + + + + + + + + +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ 00:00:00 +
+ +
+ 00:00:00 +
+
+
+ + +
+
+
+ diff --git a/static/manifest.example.mpd b/static/manifest.example.mpd new file mode 100644 index 0000000..557bc32 --- /dev/null +++ b/static/manifest.example.mpd @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +