// yt - A fully featured command line YouTube client // // Copyright (C) 2024 Benedikt Peetz // SPDX-License-Identifier: GPL-3.0-or-later // // This file is part of Yt. // // You should have received a copy of the License along with this program. // If not, see . use serde_json::{json, Value}; use crate::{app::App, storage::video_database::YtDlpOptions}; // { // "ratelimit": conf.ratelimit if conf.ratelimit > 0 else None, // "retries": conf.retries, // "merge_output_format": conf.merge_output_format, // "restrictfilenames": conf.restrict_filenames, // "ignoreerrors": False, // "postprocessors": [{"key": "FFmpegMetadata"}], // "logger": _ytdl_logger // } pub fn download_opts( app: &App, additional_opts: YtDlpOptions, ) -> serde_json::Map { match json!({ "extract_flat": false, "extractor_args": { "youtube": { "comment_sort": [ "top" ], "max_comments": [ "150", "all", "100" ] } }, "ffmpeg_location": env!("FFMPEG_LOCATION"), "format": "bestvideo[height<=?1080]+bestaudio/best", "fragment_retries": 10, "getcomments": true, "ignoreerrors": false, "retries": 10, "writeinfojson": true, "writeannotations": true, "writesubtitles": true, "writeautomaticsub": true, "outtmpl": { "default": app.config.paths.download_dir.join("%(channel)s/%(title)s.%(ext)s"), "chapter": "%(title)s - %(section_number)03d %(section_title)s [%(id)s].%(ext)s" }, "compat_opts": {}, "forceprint": {}, "print_to_file": {}, "windowsfilenames": false, "restrictfilenames": false, "trim_file_names": false, "postprocessors": [ { "api": "https://sponsor.ajay.app", "categories": [ "interaction", "intro", "music_offtopic", "sponsor", "outro", "poi_highlight", "preview", "selfpromo", "filler", "chapter" ], "key": "SponsorBlock", "when": "after_filter" }, { "force_keyframes": false, "key": "ModifyChapters", "remove_chapters_patterns": [], "remove_ranges": [], "remove_sponsor_segments": [ "sponsor" ], "sponsorblock_chapter_title": "[SponsorBlock]: %(category_names)l" }, { "add_chapters": true, "add_infojson": null, "add_metadata": false, "key": "FFmpegMetadata" }, { "key": "FFmpegConcat", "only_multi_video": true, "when": "playlist" } ] }) { serde_json::Value::Object(mut obj) => { obj.insert( "subtitleslangs".to_owned(), serde_json::Value::Array( additional_opts .subtitle_langs .split(',') .map(|val| Value::String(val.to_owned())) .collect::>(), ), ); obj } _ => unreachable!("This is an object"), } }