diff --git a/README.md b/README.md new file mode 100644 index 0000000..ec96615 --- /dev/null +++ b/README.md @@ -0,0 +1,91 @@ +# steamdeck_startup_animations +A collection of steamdeck startup animations, plus a script to randomize your startup on each boot + +# So far, I've made boot animations from the following consoles: + +* dreamcast +* ps1 +* ps2 +* ps4 +* switch +* gamecube +* ps2 +* switchfirst (first boot animation) +* switch (regular boot animation) +* xbox +* xbox 360 +* xbox one + +# Installation + +```sh +curl -o - https://raw.githubusercontent.com/kageurufu/steamdeck_startup_animations/main/install.sh | bash - +``` + +If you're (justifiably) not a fan of `curl | bash`, you can run this: + +```sh +mkdir -p "$HOME/homebrew" +mkdir -p "$HOME/.config/systemd/user" +git clone https://github.com/kageurufu/steamdeck_startup_animations "$HOME/homebrew/startup_animations" +ln -sf "$HOME/homebrew/startup_animations/randomize_deck_startup.service" "$HOME/.config/systemd/user/randomize_deck_startup.service" +systemctl --user daemon-reload +systemctl --user enable --now randomize_deck_startup.service +``` + +# Uninstallation + +```sh +bash $HOME/homebrew/startup_animations/uninstall.sh +``` + +# Making an animation (somewhat advanced) + +I used youtube-dl to grab the best video and audio tracks from youtube, and then ffmpeg to merge them, resizing down to fit the Deck's 1280x800 screen. Then I use `truncate` to make the file the right size. + +This all does work on the steamdeck + +### Getting the dependencies + +```sh +python3 -m ensurepip +~/.local/bin/pip install --user youtube-dl +``` + +### Creating the animation + +```sh +# Get ps1.webm and ps1.m4a. Your file extensions may differ here +~/.local/bin/youtube-dl -f bestvideo -o 'ps1.%(ext)s' https://www.youtube.com/watch?v=1JwbfIi5Uio +~/.local/bin/youtube-dl -f bestaudio -o 'ps1.%(ext)s' https://www.youtube.com/watch?v=1JwbfIi5Uio + +# Convert the video from whatever input formats to a webm video in VP9 encoding, with vorbis encoded audio +ffmpeg -i ps1.webm -i ps1.m4a \ + -map 0:v:0 -map 1:a:0 \ + -filter:v "scale='min(1280,iw)':min'(800,ih)':force_original_aspect_ratio=decrease,pad=1280:800:(ow-iw)/2:(oh-ih)/2" \ + -c:v vp9 \ + -c:a libvorbis \ + my_deck_startup_ps1.webm + +# Make sure the generated file is less than 1840847B here +# Mine was `389670`, plenty small enough +stat -c '%s' my_deck_startup_ps1.webm + +truncate -s 1840847 my_deck_startup_ps1.webm +``` + +The ffmpeg command is a bit confusing, so heres a breakdown + +* `-i ps1.webm -i ps1.m4a` + Load both the video and audio files we downloaded. +* `-map 0:v:0 -map 1:a:0` + Only use the first video stream from the first file, and first audio stream from the second. + This prevents having multiple video or audio streams in the final file +* `-filter:v "scale='min(1280,iw)':min'(800,ih)':force_original_aspect_ratio=decrease,pad=1280:800:(ow-iw)/2:(oh-ih)/2"` + This is most confusing part, basically we're resizing the video to fit 1280x800 + `min'(1280,iw)':min'(800,ih)'` ensures the target size is never upscaled + `force_original_aspect_ratio=decrease` scales to fit within a given size, keeping the original aspect ratio + `pad=1280:800:(ow-iw)/2:(oh-ih)/2` pad the video size to 1280:800, centering the original video. This is optional and I might not use it in the future +* `-c:v vp9 c:a libvorbis` Select our output VP9 / vorbis codecs + +