about summary refs log tree commit diff
path: root/home/profiles/ytdlp.nix
diff options
context:
space:
mode:
Diffstat (limited to 'home/profiles/ytdlp.nix')
-rw-r--r--home/profiles/ytdlp.nix37
1 files changed, 37 insertions, 0 deletions
diff --git a/home/profiles/ytdlp.nix b/home/profiles/ytdlp.nix
new file mode 100644
index 0000000..ce2e32c
--- /dev/null
+++ b/home/profiles/ytdlp.nix
@@ -0,0 +1,37 @@
+{ pkgs, ... }:
+{
+  home.packages = with pkgs; [
+    yt-dlp
+  ];
+
+  xdg.configFile."yt-dlp/config".source = pkgs.writeText "config" ''
+    # Preferred formats:
+    # 1. 1080p, combined, mp4 (for some non-youtube sites).
+    # 2. 1080p, combined, any format (in case mp4 is not available).
+    # 3. 1080p, best video + best audio (only available with separate video and audio on youtube).
+    # 4. >30fps (any resolution), best video + best audio (only available with separate video and audio on youtube).
+    # 5. 720p, pre-joined, because it is available on youtube.
+    # 6. <720p, best video + best audio (480p and some other lower resolutions are only available with separate video and audio on youtube).
+    # 7. When all else fails, take whatever youtube-dl thinks is the best (mainly for non-YT websites).
+    --format="best[height=1080][ext=mp4]/best[height=1080]/bestvideo[height=1080][ext=mp4]+bestaudio[ext=m4a]/bestvideo[fps>30][ext=mp4]+bestaudio[ext=m4a]/best[height=720][ext=mp4]/bestvideo[ext=mp4]+bestaudio[ext=m4a]/best"
+
+    --continue
+
+    --sub-langs all
+    --write-subs
+
+    --convert-subs=srt
+
+    --restrict-filenames
+    --output="$HOME/media/videos/%(uploader)s/%(playlist)s/%(upload_date)s-%(title)s.%(ext)s"
+    --merge-output-format mkv
+
+    --embed-metadata
+    --embed-chapters
+    --embed-info-json
+    # create chapter entries to mark sponsor segments
+    --sponsorblock-mark all
+
+    --yes-playlist
+  '';
+}