diff --git a/.gitignore b/.gitignore index 17d03fd4a3a91d1c30aa1baa4845dbb0a0496626..53311fac5b8bf71547a7293934cfea11eae22d70 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ assets/backgrounds/* assets/sounds/* radio/* +out/* diff --git a/Makefile b/Makefile index 8b40b8a61c90c0b9f54681997cf93307100e1acc..f288578f5881eeaadcd02fa360196a3ce462d6c9 100644 --- a/Makefile +++ b/Makefile @@ -21,10 +21,23 @@ ifndef back $(eval back=${DEFAULT_BG}) endif @echo "Compiling ending" - @ sh ${ASSETS_DIR}/scripts/downloader.sh "${ASSETS_DIR}backgrounds/${back}" "${OUT_DIR}/ending_src" - @ffmpeg -v error -stream_loop -1 -i "${OUT_DIR}/ending_src" -i "${ASSETS_DIR}/sounds/${sound}" -vf "subtitles=${ASSETS_DIR}message.ass" -c:a copy -strict -1 -shortest -y "${OUT_DIR}ending.mp4" + @sh ${ASSETS_DIR}/scripts/downloader.sh "${ASSETS_DIR}backgrounds/${back}" "${OUT_DIR}/ending_src" + @ffmpeg -stream_loop -1 -i "${OUT_DIR}/ending_src" -i "${ASSETS_DIR}/sounds/${sound}" -vf "subtitles=${ASSETS_DIR}/messages/announce.ass" -c:a copy -strict -1 -shortest -y "${OUT_DIR}ending.mp4" @echo "Ending compiled successfully" +build_ad: cleanup out_dir + @sh ${ASSETS_DIR}/scripts/downloader.sh "${url}" "${OUT_DIR}/new_ad" + @ffmpeg -i "${OUT_DIR}/new_ad" \ + -ss ${ss} -t 10 \ + -an -y "${OUT_DIR}/new_ad.webm" + @ffmpeg -i "${OUT_DIR}/new_ad.webm" \ + -framerate 30 -pix_fmt yuv420p \ + -movflags +faststart \ + -b:v 0 -crf 20 \ + -vf "scale=w=1280:h=720:force_original_aspect_ratio=2,crop=1280:720,subtitles=${ASSETS_DIR}/messages/ad.ass" \ + -c:v vp8 -an -y -strict 1 "${OUT_DIR}/ad.webm" + @mktemp "${ASSETS_DIR}/ads/adXXXXX.webm" | xargs mv -v "${OUT_DIR}/ad.webm" + build_sound: out_dir @sh ${ASSETS_DIR}/scripts/downloader.sh "${url}" "${OUT_DIR}/sound_target" @ffmpeg -i "${OUT_DIR}/sound_target" -ss ${ss} -t ${t} -q:a 0 -map a -y sound.mp3 @@ -45,10 +58,12 @@ concat: preview: @mpv "${OUT_DIR}/final.mp4" - playerctl_load: @sh ${ASSETS_DIR}/scripts/playerctl_loader.sh +play_radio: + vlc --no-dbus --sout '#transcode{vcodec=VP80,ab64,acodec=opus}:standard{access=http,mux=ogg,dst=:8888/}' --sout-mux-caching 10000 + cleanup: @echo "Cleaning up outdir" @rm -rfv "${OUT_DIR}" diff --git a/assets/ads/adE9soi.webm b/assets/ads/adE9soi.webm new file mode 100644 index 0000000000000000000000000000000000000000..fd4775c2bb13a52590cb2be79548deacdd9cb2b3 Binary files /dev/null and b/assets/ads/adE9soi.webm differ diff --git a/assets/ads/adOfPam.webm b/assets/ads/adOfPam.webm new file mode 100644 index 0000000000000000000000000000000000000000..d2f9683ece1218868b2f1c8388cd0e90edad1da4 Binary files /dev/null and b/assets/ads/adOfPam.webm differ diff --git a/assets/ads/adcdkrD.webm b/assets/ads/adcdkrD.webm new file mode 100644 index 0000000000000000000000000000000000000000..4f2c150ed3ef2af8a6890729615f74c028ededa5 Binary files /dev/null and b/assets/ads/adcdkrD.webm differ diff --git a/assets/ads/adulP4O.webm b/assets/ads/adulP4O.webm new file mode 100644 index 0000000000000000000000000000000000000000..60c3f3f4d331ca5b662cadcccdefa4ad3b8de087 Binary files /dev/null and b/assets/ads/adulP4O.webm differ diff --git a/assets/ads/adzsUQz.webm b/assets/ads/adzsUQz.webm new file mode 100644 index 0000000000000000000000000000000000000000..77c261aefc5abe1de1a74b3c4b7ed70058c1bf1b Binary files /dev/null and b/assets/ads/adzsUQz.webm differ diff --git a/assets/messages/ad.ass b/assets/messages/ad.ass new file mode 100644 index 0000000000000000000000000000000000000000..b6b9bb318f9862bf7fce8253ed3960629b3d441b --- /dev/null +++ b/assets/messages/ad.ass @@ -0,0 +1,20 @@ +[Script Info] +; Script generated by Aegisub 3.2.2 +; http://www.aegisub.org/ +Title: Ad subtitle. +ScriptType: v4.00+ +WrapStyle: 0 +ScaledBorderAndShadow: yes +YCbCr Matrix: None + +[Aegisub Project Garbage] +Last Style Storage: Default + +[V4+ Styles] +Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding +Style: Center,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,2,5,10,10,10,1 + +[Events] +Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text +Dialogue: 0,00:00:00.00,00:00:10.00,Center,,0,0,0,,{\pos(190,160)}{\fad(1200, 0)} We happy to see you here at {\fad}{\pos} +Dialogue: 0,00:00:00.00,00:00:10.00,Center,,0,0,0,,{\pos(190,200)}{\fad(1200, 0)} http://s3rius.ddns.net/{\fad}{\pos} diff --git a/assets/message.ass b/assets/messages/announce.ass similarity index 100% rename from assets/message.ass rename to assets/messages/announce.ass diff --git a/assets/scripts/playerctl_loader.sh b/assets/scripts/playerctl_loader.sh index f041d7a0a0ee91f889a713ffc288ffec88c72b25..690237ffeb22fa2f0b54982d80adbe3b491448b6 100644 --- a/assets/scripts/playerctl_loader.sh +++ b/assets/scripts/playerctl_loader.sh @@ -10,16 +10,28 @@ if [[ $(playerctl status) != "Playing" ]]; then fi workdir="$(mktemp -d playlist-XXXXXX)" -pushd "$workdir" +ads_dir="../assets/ads/" +today="$(date +%D)" +res_dir="radio/${today}" + +mkdir -p "$res_dir" -index=0 +if [[ -e "${res_dir}" ]];then + compiled_index="$(ls "$res_dir" | grep compiled | sort --numeric-sort | tail -n 1 | cut -d '.' -f1 | cut -d '-' -f2)" +else + compiled_index="-1" +fi +index="0" -playlist_title="playlist" +pushd "$workdir" function cleanup_and_exit() { rm -fv "current.mp3" "bg.png" "cover.jpg" "cover.png" + ffmpeg -f concat -i concat -c copy "compiled-$((compiled_index + 1)).webm" + rm -fv "concat" popd - mv "$workdir" "$playlist_title" + ls "$workdir" | grep compiled | xargs -I '{}' mv -v $workdir/'{}' "$res_dir" + rm -rfv "$workdir" } trap "cleanup_and_exit" EXIT @@ -30,10 +42,6 @@ while [[ "$(playerctl status)" = "Playing" ]];do artUrl="$(playerctl metadata mpris:artUrl)" url="$(playerctl metadata xesam:url)" - if [[ "${index}" = "0" ]];then - playlist_title="Radio ${artist} - ${title}" - fi - # Downloading song and album cover wget "${url}" -O "current.mp3" wget "${artUrl}" -O "cover.jpg" @@ -47,19 +55,28 @@ while [[ "$(playerctl status)" = "Playing" ]];do rm -fv "cover.jpg" "cover.png" - ffmpeg -r 1 -loop 1 -i "bg.png" -i "current.mp3" \ - -map 0:v -map 1:a \ - -c:v vp9 -crf 23 -g 60 \ - -c:a opus \ - -vf "scale=-1:720,pad=ceil(iw/2)*2:ceil(ih/2)*2" \ - -maxrate 2M -bufsize 2M \ - -preset ultrafast -pix_fmt yuv420p \ - -framerate 30 \ - -movflags +faststart \ - -shortest -y -strict -2 "${index}.webm" + target_adv="$(find "$ads_dir" -type f | shuf -n 1)" + echo "Selected ad: $target_adv" + + ffmpeg -loop 1 -r 3 -i bg.png -i current.mp3 -r 25 -i "${target_adv}" \ + -filter_complex "[0:v]scale=w=1280:h=720:force_original_aspect_ratio=2,crop=1280:720[img]; \ + [2:v]setpts=10*PTS[adv]; \ + [adv]loop[ladv]; \ + [img][ladv]overlay=enable='gt(mod(t, 40), 30)'[rv]" \ + -map "[rv]" \ + -map 1:a \ + -framerate 30 -g 360 \ + -c:v vp8 -pix_fmt yuv420p -movflags +faststart \ + -c:a libopus \ + -err_detect ignore_err \ + -shortest -strict -2 -y \ + "${index}.webm" + + echo "file '${index}.webm'" >> concat index=$((index + 1)) if ! (playerctl next);then break fi done +playerctl stop