diff --git a/.gitignore b/.gitignore
index 81199f4..4ef91f6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,3 +38,4 @@ npm-debug.log
/.elixir_ls
.env
+.DS_Store
diff --git a/Dockerfile b/Dockerfile
index 9c93dc8..e987099 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -29,5 +29,7 @@ RUN chmod +x ./docker-run.sh
# Install Elixir deps
RUN mix deps.get
+# Gives us iex shell history
+ENV ERL_AFLAGS="-kernel shell_history enabled"
EXPOSE 4008
diff --git a/assets/yarn.lock b/assets/yarn.lock
new file mode 100644
index 0000000..fb57ccd
--- /dev/null
+++ b/assets/yarn.lock
@@ -0,0 +1,4 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
diff --git a/config/config.exs b/config/config.exs
index f920c3c..91b3920 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -12,7 +12,10 @@ config :pinchflat,
generators: [timestamp_type: :utc_datetime],
# Specifying backend data here makes mocking and local testing SUPER easy
yt_dlp_executable: System.find_executable("yt-dlp"),
- yt_dlp_runner: Pinchflat.DownloaderBackends.YtDlp.CommandRunner
+ yt_dlp_runner: Pinchflat.MediaClient.Backends.YtDlp.CommandRunner,
+ # TODO: figure this out
+ media_directory: :not_implemented,
+ metadata_directory: Path.join([System.tmp_dir!(), "pinchflat", "metadata"])
# Configures the endpoint
config :pinchflat, PinchflatWeb.Endpoint,
@@ -25,6 +28,13 @@ config :pinchflat, PinchflatWeb.Endpoint,
pubsub_server: Pinchflat.PubSub,
live_view: [signing_salt: "/t5878kO"]
+config :pinchflat, Oban,
+ repo: Pinchflat.Repo,
+ # Keep old jobs for 30 days for display in the UI
+ plugins: [{Oban.Plugins.Pruner, max_age: 30 * 24 * 60 * 60}],
+ # TODO: consider making this an env var or something?
+ queues: [default: 10, media_indexing: 2, media_fetching: 2]
+
# Configures the mailer
#
# By default it uses the "Local" adapter which stores the emails
diff --git a/config/dev.exs b/config/dev.exs
index a3bc3e4..ccf1d70 100644
--- a/config/dev.exs
+++ b/config/dev.exs
@@ -1,5 +1,9 @@
import Config
+config :pinchflat,
+ media_directory: Path.join([File.cwd!(), "tmp", "videos"]),
+ metadata_directory: Path.join([File.cwd!(), "tmp", "metadata"])
+
# Configure your database
config :pinchflat, Pinchflat.Repo,
username: System.get_env("POSTGRES_USER"),
diff --git a/config/test.exs b/config/test.exs
index 20d03ff..b2d8614 100644
--- a/config/test.exs
+++ b/config/test.exs
@@ -2,7 +2,11 @@ import Config
config :pinchflat,
# Specifying backend data here makes mocking and local testing SUPER easy
- yt_dlp_executable: Path.join([File.cwd!(), "/test/support/scripts/yt-dlp-mocks/repeater.sh"])
+ yt_dlp_executable: Path.join([File.cwd!(), "/test/support/scripts/yt-dlp-mocks/repeater.sh"]),
+ media_directory: Path.join([System.tmp_dir!(), "videos"]),
+ metadata_directory: Path.join([System.tmp_dir!(), "metadata"])
+
+config :pinchflat, Oban, testing: :manual
# Configure your database
#
diff --git a/ideas.md b/ideas.md
new file mode 100644
index 0000000..2cb74e3
--- /dev/null
+++ b/ideas.md
@@ -0,0 +1,3 @@
+- Write media datbase ID as metadata/to file/whatever so it gives us an option to retroactively match media to the DB down the line. Useful if someone moves the media without informing the UI
+ - Use a UUID for the media database ID (or at least alongside it)
+- Look into this and its recommended plugins https://hexdocs.pm/ex_check/readme.html
diff --git a/lib/pinchflat/application.ex b/lib/pinchflat/application.ex
index 774cc5d..6842111 100644
--- a/lib/pinchflat/application.ex
+++ b/lib/pinchflat/application.ex
@@ -10,6 +10,7 @@ defmodule Pinchflat.Application do
children = [
PinchflatWeb.Telemetry,
Pinchflat.Repo,
+ {Oban, Application.fetch_env!(:pinchflat, Oban)},
{DNSCluster, query: Application.get_env(:pinchflat, :dns_cluster_query) || :ignore},
{Phoenix.PubSub, name: Pinchflat.PubSub},
# Start the Finch HTTP client for sending emails
diff --git a/lib/pinchflat/downloader_backends/backend_command_runner.ex b/lib/pinchflat/downloader_backends/backend_command_runner.ex
deleted file mode 100644
index 6e1bcb7..0000000
--- a/lib/pinchflat/downloader_backends/backend_command_runner.ex
+++ /dev/null
@@ -1,7 +0,0 @@
-defmodule Pinchflat.DownloaderBackends.BackendCommandRunner do
- @moduledoc """
- A behaviour for running CLI commands against a downloader backend
- """
-
- @callback run(binary(), keyword()) :: {:ok, binary()} | {:error, binary(), integer()}
-end
diff --git a/lib/pinchflat/downloader_backends/yt_dlp/command_runner.ex b/lib/pinchflat/downloader_backends/yt_dlp/command_runner.ex
deleted file mode 100644
index 014ae0e..0000000
--- a/lib/pinchflat/downloader_backends/yt_dlp/command_runner.ex
+++ /dev/null
@@ -1,58 +0,0 @@
-defmodule Pinchflat.DownloaderBackends.YtDlp.CommandRunner do
- @moduledoc """
- Runs yt-dlp commands using the `System.cmd/3` function
- """
-
- alias Pinchflat.Utils.StringUtils
- alias Pinchflat.DownloaderBackends.BackendCommandRunner
-
- @behaviour BackendCommandRunner
-
- @doc """
- Runs a yt-dlp command and returns the string output
- """
- @impl BackendCommandRunner
- def run(url, command_opts) do
- command = backend_executable()
- formatted_command_opts = parse_options(command_opts) ++ [url]
-
- case System.cmd(command, formatted_command_opts, stderr_to_stdout: true) do
- {output, 0} -> {:ok, output}
- {output, status} -> {:error, output, status}
- end
- end
-
- # We want to satisfy the following behaviours:
- #
- # 1. If the key is an atom, convert it to a string and convert it to kebab case (for convenience)
- # 2. If the key is a string, assume we want it as-is and don't convert it
- # 3. If the key is accompanied by a value, append the value to the list
- # 4. If the key is not accompanied by a value, assume it's a flag and PREpend it to the list
- defp parse_options(command_opts) do
- Enum.reduce(command_opts, [], &parse_option/2)
- end
-
- defp parse_option({k, v}, acc) when is_atom(k) do
- stringified_key = StringUtils.to_kebab_case(Atom.to_string(k))
-
- parse_option({"--#{stringified_key}", v}, acc)
- end
-
- defp parse_option({k, v}, acc) when is_binary(k) do
- acc ++ [k, to_string(v)]
- end
-
- defp parse_option(arg, acc) when is_atom(arg) do
- stringified_arg = StringUtils.to_kebab_case(Atom.to_string(arg))
-
- parse_option("--#{stringified_arg}", acc)
- end
-
- defp parse_option(arg, acc) when is_binary(arg) do
- [arg | acc]
- end
-
- defp backend_executable do
- Application.get_env(:pinchflat, :yt_dlp_executable)
- end
-end
diff --git a/lib/pinchflat/downloader_backends/yt_dlp/video_collection.ex b/lib/pinchflat/downloader_backends/yt_dlp/video_collection.ex
deleted file mode 100644
index 324895b..0000000
--- a/lib/pinchflat/downloader_backends/yt_dlp/video_collection.ex
+++ /dev/null
@@ -1,21 +0,0 @@
-defmodule Pinchflat.DownloaderBackends.YtDlp.VideoCollection do
- @moduledoc """
- Contains utilities for working with collections of videos (ie: channels, playlists)
- """
-
- @doc """
- Returns a list of strings representing the video ids in the collection
- """
- def get_video_ids(url, command_opts \\ []) do
- opts = command_opts ++ [:simulate, :skip_download, :get_id]
-
- case backend_runner().run(url, opts) do
- {:ok, output} -> {:ok, String.split(output, "\n", trim: true)}
- res -> res
- end
- end
-
- defp backend_runner do
- Application.get_env(:pinchflat, :yt_dlp_runner)
- end
-end
diff --git a/lib/pinchflat/media.ex b/lib/pinchflat/media.ex
new file mode 100644
index 0000000..0ec21d1
--- /dev/null
+++ b/lib/pinchflat/media.ex
@@ -0,0 +1,75 @@
+defmodule Pinchflat.Media do
+ @moduledoc """
+ The Media context.
+ """
+
+ import Ecto.Query, warn: false
+
+ alias Pinchflat.Repo
+ alias Pinchflat.Tasks
+ alias Pinchflat.Media.MediaItem
+ alias Pinchflat.MediaSource.Channel
+
+ @doc """
+ Returns the list of media_items. Returns [%MediaItem{}, ...].
+ """
+ def list_media_items do
+ Repo.all(MediaItem)
+ end
+
+ @doc """
+ Returns a list of pending media_items for a given channel, where
+ pending means the `video_filepath` is `nil`.
+
+ Returns [%MediaItem{}, ...].
+ """
+ def list_pending_media_items_for(%Channel{} = channel) do
+ from(
+ m in MediaItem,
+ where: m.channel_id == ^channel.id and is_nil(m.video_filepath)
+ )
+ |> Repo.all()
+ end
+
+ @doc """
+ Gets a single media_item.
+
+ Returns %MediaItem{}. Raises `Ecto.NoResultsError` if the Media item does not exist.
+ """
+ def get_media_item!(id), do: Repo.get!(MediaItem, id)
+
+ @doc """
+ Creates a media_item. Returns {:ok, %MediaItem{}} | {:error, %Ecto.Changeset{}}.
+ """
+ def create_media_item(attrs) do
+ %MediaItem{}
+ |> MediaItem.changeset(attrs)
+ |> Repo.insert()
+ end
+
+ @doc """
+ Updates a media_item. Returns {:ok, %MediaItem{}} | {:error, %Ecto.Changeset{}}.
+ """
+ def update_media_item(%MediaItem{} = media_item, attrs) do
+ media_item
+ |> MediaItem.changeset(attrs)
+ |> Repo.update()
+ end
+
+ @doc """
+ Deletes a media_item and its associated tasks.
+
+ Returns {:ok, %MediaItem{}} | {:error, %Ecto.Changeset{}}.
+ """
+ def delete_media_item(%MediaItem{} = media_item) do
+ Tasks.delete_tasks_for(media_item)
+ Repo.delete(media_item)
+ end
+
+ @doc """
+ Returns an `%Ecto.Changeset{}` for tracking media_item changes.
+ """
+ def change_media_item(%MediaItem{} = media_item, attrs \\ %{}) do
+ MediaItem.changeset(media_item, attrs)
+ end
+end
diff --git a/lib/pinchflat/media/media_item.ex b/lib/pinchflat/media/media_item.ex
new file mode 100644
index 0000000..a15427a
--- /dev/null
+++ b/lib/pinchflat/media/media_item.ex
@@ -0,0 +1,38 @@
+defmodule Pinchflat.Media.MediaItem do
+ @moduledoc """
+ The MediaItem schema.
+ """
+
+ use Ecto.Schema
+ import Ecto.Changeset
+
+ alias Pinchflat.Tasks.Task
+ alias Pinchflat.MediaSource.Channel
+ alias Pinchflat.Media.MediaMetadata
+
+ @required_fields ~w(media_id channel_id)a
+ @allowed_fields ~w(title media_id video_filepath channel_id)a
+
+ schema "media_items" do
+ field :title, :string
+ field :media_id, :string
+ field :video_filepath, :string
+
+ belongs_to :channel, Channel
+
+ has_one :metadata, MediaMetadata, on_replace: :update
+
+ has_many :tasks, Task
+
+ timestamps(type: :utc_datetime)
+ end
+
+ @doc false
+ def changeset(media_item, attrs) do
+ media_item
+ |> cast(attrs, @allowed_fields)
+ |> cast_assoc(:metadata, with: &MediaMetadata.changeset/2, required: false)
+ |> validate_required(@required_fields)
+ |> unique_constraint([:media_id, :channel_id])
+ end
+end
diff --git a/lib/pinchflat/media/media_metadata.ex b/lib/pinchflat/media/media_metadata.ex
new file mode 100644
index 0000000..e41db27
--- /dev/null
+++ b/lib/pinchflat/media/media_metadata.ex
@@ -0,0 +1,28 @@
+defmodule Pinchflat.Media.MediaMetadata do
+ @moduledoc """
+ The MediaMetadata schema.
+
+ Look. Don't @ me about Metadata vs. Metadatum. I'm very sensitive.
+ """
+
+ use Ecto.Schema
+ import Ecto.Changeset
+
+ alias Pinchflat.Media.MediaItem
+
+ schema "media_metadata" do
+ field :client_response, :map
+
+ belongs_to :media_item, MediaItem
+
+ timestamps(type: :utc_datetime)
+ end
+
+ @doc false
+ def changeset(media_metadata, attrs) do
+ media_metadata
+ |> cast(attrs, [:client_response])
+ |> validate_required([:client_response])
+ |> unique_constraint([:media_item_id])
+ end
+end
diff --git a/lib/pinchflat/media_client/backends/backend_command_runner.ex b/lib/pinchflat/media_client/backends/backend_command_runner.ex
new file mode 100644
index 0000000..272286f
--- /dev/null
+++ b/lib/pinchflat/media_client/backends/backend_command_runner.ex
@@ -0,0 +1,7 @@
+defmodule Pinchflat.MediaClient.Backends.BackendCommandRunner do
+ @moduledoc """
+ A behaviour for running CLI commands against a downloader backend
+ """
+
+ @callback run(binary(), keyword(), binary()) :: {:ok, binary()} | {:error, binary(), integer()}
+end
diff --git a/lib/pinchflat/media_client/backends/yt_dlp/channel.ex b/lib/pinchflat/media_client/backends/yt_dlp/channel.ex
new file mode 100644
index 0000000..d97f88d
--- /dev/null
+++ b/lib/pinchflat/media_client/backends/yt_dlp/channel.ex
@@ -0,0 +1,32 @@
+defmodule Pinchflat.MediaClient.Backends.YtDlp.Channel do
+ @moduledoc """
+ Contains utilities for working with a channel's videos
+ """
+
+ use Pinchflat.MediaClient.Backends.YtDlp.VideoCollection
+ alias Pinchflat.MediaClient.ChannelDetails
+
+ @doc """
+ Gets a channel's ID and name from its URL.
+
+ yt-dlp does not _really_ have channel-specific functions, so
+ instead we're fetching just the first video (using playlist_end: 1)
+ and parsing the channel ID and name from _its_ metadata
+
+ Returns {:ok, %ChannelDetails{}} | {:error, any, ...}.
+ """
+ def get_channel_details(channel_url) do
+ opts = [playlist_end: 1]
+
+ with {:ok, output} <- backend_runner().run(channel_url, opts, "%(.{channel,channel_id})j"),
+ {:ok, parsed_json} <- Phoenix.json_library().decode(output) do
+ {:ok, ChannelDetails.new(parsed_json["channel_id"], parsed_json["channel"])}
+ else
+ err -> err
+ end
+ end
+
+ defp backend_runner do
+ Application.get_env(:pinchflat, :yt_dlp_runner)
+ end
+end
diff --git a/lib/pinchflat/media_client/backends/yt_dlp/command_runner.ex b/lib/pinchflat/media_client/backends/yt_dlp/command_runner.ex
new file mode 100644
index 0000000..e88e238
--- /dev/null
+++ b/lib/pinchflat/media_client/backends/yt_dlp/command_runner.ex
@@ -0,0 +1,90 @@
+defmodule Pinchflat.MediaClient.Backends.YtDlp.CommandRunner do
+ @moduledoc """
+ Runs yt-dlp commands using the `System.cmd/3` function
+ """
+
+ require Logger
+
+ alias Pinchflat.Utils.StringUtils
+ alias Pinchflat.MediaClient.Backends.BackendCommandRunner
+
+ @behaviour BackendCommandRunner
+
+ @doc """
+ Runs a yt-dlp command and returns the string output. Saves the output to
+ a file and then returns its contents because yt-dlp will return warnings
+ to stdout even if the command is successful, but these will break JSON parsing.
+
+ Returns {:ok, binary()} | {:error, output, status}.
+
+ IDEA: Indexing takes a long time, but the output is actually streamed to stdout.
+ Maybe we could listen to that stream instead so we can index videos as they're discovered.
+ See: https://stackoverflow.com/a/49061086/5665799
+ """
+ @impl BackendCommandRunner
+ def run(url, command_opts, output_template) do
+ command = backend_executable()
+ # These must stay in exactly this order, hence why I'm giving it its own variable.
+ # Also, can't use RAM file since yt-dlp needs a concrete filepath.
+ json_output_path = generate_json_output_path()
+ print_to_file_opts = [{:print_to_file, output_template}, json_output_path]
+ formatted_command_opts = [url] ++ parse_options(command_opts ++ print_to_file_opts)
+
+ Logger.debug("[yt-dlp] called with: #{Enum.join(formatted_command_opts, " ")}")
+
+ case System.cmd(command, formatted_command_opts, stderr_to_stdout: true) do
+ {_, 0} ->
+ # IDEA: consider deleting the file after reading it
+ # (even on error? especially on error?)
+ File.read(json_output_path)
+
+ {output, status} ->
+ {:error, output, status}
+ end
+ end
+
+ defp generate_json_output_path do
+ metadata_directory = Application.get_env(:pinchflat, :metadata_directory)
+ filepath = Path.join([metadata_directory, "#{StringUtils.random_string(64)}.json"])
+
+ # Ensure the file can be created and written to BEFORE we run the `yt-dlp` command
+ :ok = File.mkdir_p!(Path.dirname(filepath))
+ :ok = File.write(filepath, "")
+
+ filepath
+ end
+
+ # We want to satisfy the following behaviours:
+ #
+ # 1. If the key is an atom, convert it to a string and convert it to kebab case (for convenience)
+ # 2. If the key is a string, assume we want it as-is and don't convert it
+ # 3. If the key is accompanied by a value, append the value to the list
+ # 4. If the key is not accompanied by a value, assume it's a flag and PREpend it to the list
+ defp parse_options(command_opts) do
+ Enum.reduce(command_opts, [], &parse_option/2)
+ end
+
+ defp parse_option({k, v}, acc) when is_atom(k) do
+ stringified_key = StringUtils.to_kebab_case(Atom.to_string(k))
+
+ parse_option({"--#{stringified_key}", v}, acc)
+ end
+
+ defp parse_option({k, v}, acc) when is_binary(k) do
+ acc ++ [k, to_string(v)]
+ end
+
+ defp parse_option(arg, acc) when is_atom(arg) do
+ stringified_arg = StringUtils.to_kebab_case(Atom.to_string(arg))
+
+ parse_option("--#{stringified_arg}", acc)
+ end
+
+ defp parse_option(arg, acc) when is_binary(arg) do
+ acc ++ [arg]
+ end
+
+ defp backend_executable do
+ Application.get_env(:pinchflat, :yt_dlp_executable)
+ end
+end
diff --git a/lib/pinchflat/media_client/backends/yt_dlp/metadata_parser.ex b/lib/pinchflat/media_client/backends/yt_dlp/metadata_parser.ex
new file mode 100644
index 0000000..be7f8ab
--- /dev/null
+++ b/lib/pinchflat/media_client/backends/yt_dlp/metadata_parser.ex
@@ -0,0 +1,27 @@
+defmodule Pinchflat.MediaClient.Backends.YtDlp.MetadataParser do
+ @moduledoc """
+ yt-dlp offers a LOT of metadata in its JSON response, some of which
+ needs to be extracted and included in various models.
+
+ For now, also squirrel all of it away in the `media_metadata` table.
+ I might revisit this or pare it down later, but I'd rather need it
+ and not have it, ya know?
+ """
+
+ @doc """
+ Parses the given JSON response from yt-dlp and returns a map of
+ the needful media_item attributes, along with anything needed for
+ its associations.
+
+ Returns map()
+ """
+ def parse_for_media_item(metadata) do
+ %{
+ title: metadata["title"],
+ video_filepath: metadata["filepath"],
+ metadata: %{
+ client_response: metadata
+ }
+ }
+ end
+end
diff --git a/lib/pinchflat/media_client/backends/yt_dlp/video.ex b/lib/pinchflat/media_client/backends/yt_dlp/video.ex
new file mode 100644
index 0000000..fac8564
--- /dev/null
+++ b/lib/pinchflat/media_client/backends/yt_dlp/video.ex
@@ -0,0 +1,26 @@
+defmodule Pinchflat.MediaClient.Backends.YtDlp.Video do
+ @moduledoc """
+ Contains utilities for working with singular videos
+ """
+
+ @doc """
+ Downloads a single video (and possibly its metadata) directly to its
+ final destination. Returns the parsed JSON output from yt-dlp.
+
+ Returns {:ok, map()} | {:error, any, ...}.
+ """
+ def download(url, command_opts \\ []) do
+ opts = [:no_simulate] ++ command_opts
+
+ with {:ok, output} <- backend_runner().run(url, opts, "after_move:%()j"),
+ {:ok, parsed_json} <- Phoenix.json_library().decode(output) do
+ {:ok, parsed_json}
+ else
+ err -> err
+ end
+ end
+
+ defp backend_runner do
+ Application.get_env(:pinchflat, :yt_dlp_runner)
+ end
+end
diff --git a/lib/pinchflat/media_client/backends/yt_dlp/video_collection.ex b/lib/pinchflat/media_client/backends/yt_dlp/video_collection.ex
new file mode 100644
index 0000000..d89c064
--- /dev/null
+++ b/lib/pinchflat/media_client/backends/yt_dlp/video_collection.ex
@@ -0,0 +1,28 @@
+defmodule Pinchflat.MediaClient.Backends.YtDlp.VideoCollection do
+ @moduledoc """
+ Contains utilities for working with collections of videos (ie: channels, playlists).
+
+ Meant to be included in other modules but can be used on its own. Channels and playlists
+ will have many of their own methods, but also share a lot of methods. This module is for
+ those shared methods.
+ """
+
+ defmacro __using__(_) do
+ quote do
+ @doc """
+ Returns a list of strings representing the video ids in the collection.
+
+ Returns {:ok, [binary()]} | {:error, any, ...}.
+ """
+ def get_video_ids(url, command_opts \\ []) do
+ runner = Application.get_env(:pinchflat, :yt_dlp_runner)
+ opts = command_opts ++ [:simulate, :skip_download]
+
+ case runner.run(url, opts, "%(id)s") do
+ {:ok, output} -> {:ok, String.split(output, "\n", trim: true)}
+ res -> res
+ end
+ end
+ end
+ end
+end
diff --git a/lib/pinchflat/media_client/channel_details.ex b/lib/pinchflat/media_client/channel_details.ex
new file mode 100644
index 0000000..021238b
--- /dev/null
+++ b/lib/pinchflat/media_client/channel_details.ex
@@ -0,0 +1,41 @@
+defmodule Pinchflat.MediaClient.ChannelDetails do
+ @moduledoc """
+ This is the integration layer for actually working with channels.
+
+ Technically hardcodes the yt-dlp backend for now, but should leave
+ it open-ish for future expansion (just in case).
+ """
+ @enforce_keys [:id, :name]
+ defstruct [:id, :name]
+
+ alias Pinchflat.MediaClient.Backends.YtDlp.Channel, as: YtDlpChannel
+
+ @doc false
+ def new(id, name) do
+ %__MODULE__{id: id, name: name}
+ end
+
+ @doc """
+ Gets a channel's ID and name from its URL, using the given backend.
+
+ Returns {:ok, map()} | {:error, any, ...}.
+ """
+ def get_channel_details(channel_url, backend \\ :yt_dlp) do
+ channel_module(backend).get_channel_details(channel_url)
+ end
+
+ @doc """
+ Returns a list of video IDs for the given channel URL, using the given backend.
+
+ Returns {:ok, list(binary())} | {:error, any, ...}.
+ """
+ def get_video_ids(channel_url, backend \\ :yt_dlp) do
+ channel_module(backend).get_video_ids(channel_url)
+ end
+
+ defp channel_module(backend) do
+ case backend do
+ :yt_dlp -> YtDlpChannel
+ end
+ end
+end
diff --git a/lib/pinchflat/media_client/video_downloader.ex b/lib/pinchflat/media_client/video_downloader.ex
new file mode 100644
index 0000000..a993f59
--- /dev/null
+++ b/lib/pinchflat/media_client/video_downloader.ex
@@ -0,0 +1,70 @@
+defmodule Pinchflat.MediaClient.VideoDownloader do
+ @moduledoc """
+ This is the integration layer for actually downloading videos.
+ It takes into account the media profile's settings in order
+ to download the video with the desired options.
+
+ Technically hardcodes the yt-dlp backend for now, but should leave
+ it open-ish for future expansion (just in case).
+ """
+
+ alias Pinchflat.Repo
+ alias Pinchflat.Media
+ alias Pinchflat.Media.MediaItem
+ alias Pinchflat.Profiles.MediaProfile
+
+ alias Pinchflat.MediaClient.Backends.YtDlp.Video, as: YtDlpVideo
+ alias Pinchflat.Profiles.Options.YtDlp.OptionBuilder, as: YtDlpOptionBuilder
+ alias Pinchflat.MediaClient.Backends.YtDlp.MetadataParser, as: YtDlpMetadataParser
+
+ @doc """
+ Downloads a video for a media item, updating the media item based on the metadata
+ returned by the backend. Also saves the entire metadata response to the associated
+ media_metadata record.
+
+ Returns {:ok, %MediaItem{}} | {:error, any, ...any}
+ """
+ def download_for_media_item(%MediaItem{} = media_item, backend \\ :yt_dlp) do
+ item_with_preloads = Repo.preload(media_item, [:metadata, channel: :media_profile])
+ media_profile = item_with_preloads.channel.media_profile
+
+ case download_for_media_profile(media_item.media_id, media_profile, backend) do
+ {:ok, parsed_json} ->
+ parser = metadata_parser(backend)
+ parsed_attrs = parser.parse_for_media_item(parsed_json)
+
+ # Don't forgor to use preloaded associations or updates to
+ # associations won't work!
+ Media.update_media_item(item_with_preloads, parsed_attrs)
+
+ err ->
+ err
+ end
+ end
+
+ defp download_for_media_profile(url, %MediaProfile{} = media_profile, backend) do
+ option_builder = option_builder(backend)
+ video_backend = video_backend(backend)
+ {:ok, options} = option_builder.build(media_profile)
+
+ video_backend.download(url, options)
+ end
+
+ defp option_builder(backend) do
+ case backend do
+ :yt_dlp -> YtDlpOptionBuilder
+ end
+ end
+
+ defp video_backend(backend) do
+ case backend do
+ :yt_dlp -> YtDlpVideo
+ end
+ end
+
+ defp metadata_parser(backend) do
+ case backend do
+ :yt_dlp -> YtDlpMetadataParser
+ end
+ end
+end
diff --git a/lib/pinchflat/media_source.ex b/lib/pinchflat/media_source.ex
new file mode 100644
index 0000000..8f8b6f7
--- /dev/null
+++ b/lib/pinchflat/media_source.ex
@@ -0,0 +1,163 @@
+defmodule Pinchflat.MediaSource do
+ @moduledoc """
+ The MediaSource context.
+ """
+
+ import Ecto.Query, warn: false
+ alias Pinchflat.Repo
+
+ alias Pinchflat.Tasks
+ alias Pinchflat.Media
+ alias Pinchflat.Tasks.ChannelTasks
+ alias Pinchflat.MediaSource.Channel
+ alias Pinchflat.MediaClient.ChannelDetails
+
+ @doc """
+ Returns the list of channels. Returns [%Channel{}, ...]
+ """
+ def list_channels do
+ Repo.all(Channel)
+ end
+
+ @doc """
+ Gets a single channel.
+
+ Returns %Channel{}. Raises `Ecto.NoResultsError` if the Channel does not exist.
+ """
+ def get_channel!(id), do: Repo.get!(Channel, id)
+
+ @doc """
+ Creates a channel. May attempt to pull additional channel details from the
+ original_url (if provided). Will attempt to start indexing the channel's
+ media if successfully inserted.
+
+ Returns {:ok, %Channel{}} | {:error, %Ecto.Changeset{}}
+ """
+ def create_channel(attrs) do
+ %Channel{}
+ |> change_channel_from_url(attrs)
+ |> commit_and_start_indexing()
+ end
+
+ @doc """
+ Given a media source, creates (indexes) the media by creating media_items for each
+ media ID in the source.
+
+ Returns [%MediaItem{}, ...] | [%Ecto.Changeset{}, ...]
+ """
+ def index_media_items(%Channel{} = channel) do
+ {:ok, media_ids} = ChannelDetails.get_video_ids(channel.original_url)
+
+ media_ids
+ |> Enum.map(fn media_id ->
+ attrs = %{channel_id: channel.id, media_id: media_id}
+
+ case Media.create_media_item(attrs) do
+ {:ok, media_item} -> media_item
+ {:error, changeset} -> changeset
+ end
+ end)
+ end
+
+ @doc """
+ Updates a channel. May attempt to pull additional channel details from the
+ original_url (if changed). May attempt to start indexing the channel's
+ media if the indexing frequency has been changed.
+
+ Existing indexing tasks will be cancelled if the indexing frequency has been
+ changed (logic in `ChannelTasks.kickoff_indexing_task`)
+
+ Returns {:ok, %Channel{}} | {:error, %Ecto.Changeset{}}
+ """
+ def update_channel(%Channel{} = channel, attrs) do
+ channel
+ |> change_channel_from_url(attrs)
+ |> commit_and_start_indexing()
+ end
+
+ @doc """
+ Deletes a channel and it's associated tasks (of any state).
+
+ Returns {:ok, %Channel{}} | {:error, %Ecto.Changeset{}}
+ """
+ def delete_channel(%Channel{} = channel) do
+ Tasks.delete_tasks_for(channel)
+ Repo.delete(channel)
+ end
+
+ @doc """
+ Returns an `%Ecto.Changeset{}` for tracking channel changes.
+ """
+ def change_channel(%Channel{} = channel, attrs \\ %{}) do
+ Channel.changeset(channel, attrs)
+ end
+
+ @doc """
+ Returns an `%Ecto.Changeset{}` for tracking channel changes and additionally
+ fetches channel details from the original_url (if provided). If the channel
+ details cannot be fetched, an error is added to the changeset.
+
+ Note that this fetches channel details as long as the `original_url` is present.
+ This means that it'll go for it even if a changeset is otherwise invalid. This
+ is pretty easy to change, but for MVP I'm not concerned.
+ """
+ def change_channel_from_url(%Channel{} = channel, attrs) do
+ case change_channel(channel, attrs) do
+ %Ecto.Changeset{changes: %{original_url: _}} = changeset ->
+ add_channel_details_to_changeset(channel, changeset)
+
+ changeset ->
+ changeset
+ end
+ end
+
+ defp add_channel_details_to_changeset(channel, changeset) do
+ %Ecto.Changeset{changes: changes} = changeset
+
+ case ChannelDetails.get_channel_details(changes.original_url) do
+ {:ok, %ChannelDetails{} = channel_details} ->
+ change_channel(
+ channel,
+ Map.merge(changes, %{
+ name: channel_details.name,
+ channel_id: channel_details.id
+ })
+ )
+
+ {:error, runner_error, _status_code} ->
+ Ecto.Changeset.add_error(
+ changeset,
+ :original_url,
+ "could not fetch channel details from URL",
+ error: runner_error
+ )
+ end
+ end
+
+ defp commit_and_start_indexing(changeset) do
+ case Repo.insert_or_update(changeset) do
+ {:ok, %Channel{} = channel} ->
+ maybe_run_indexing_task(changeset, channel)
+
+ {:ok, channel}
+
+ err ->
+ err
+ end
+ end
+
+ defp maybe_run_indexing_task(changeset, channel) do
+ case changeset.data do
+ # If the changeset is new (not persisted), attempt indexing no matter what
+ %{__meta__: %{state: :built}} ->
+ ChannelTasks.kickoff_indexing_task(channel)
+
+ # If the record has been persisted, only attempt indexing if the
+ # indexing frequency has been changed
+ %{__meta__: %{state: :loaded}} ->
+ if Map.has_key?(changeset.changes, :index_frequency_minutes) do
+ ChannelTasks.kickoff_indexing_task(channel)
+ end
+ end
+ end
+end
diff --git a/lib/pinchflat/media_source/channel.ex b/lib/pinchflat/media_source/channel.ex
new file mode 100644
index 0000000..e70030c
--- /dev/null
+++ b/lib/pinchflat/media_source/channel.ex
@@ -0,0 +1,37 @@
+defmodule Pinchflat.MediaSource.Channel do
+ @moduledoc """
+ The Channel schema.
+ """
+
+ use Ecto.Schema
+ import Ecto.Changeset
+
+ alias Pinchflat.Media.MediaItem
+ alias Pinchflat.Profiles.MediaProfile
+
+ @allowed_fields ~w(name channel_id index_frequency_minutes original_url media_profile_id)a
+ @required_fields @allowed_fields -- ~w(index_frequency_minutes)a
+
+ schema "channels" do
+ field :name, :string
+ field :channel_id, :string
+ field :index_frequency_minutes, :integer
+ # This should only be used for user reference going forward
+ # as the channel_id should be used for all API calls
+ field :original_url, :string
+
+ belongs_to :media_profile, MediaProfile
+
+ has_many :media_items, MediaItem
+
+ timestamps(type: :utc_datetime)
+ end
+
+ @doc false
+ def changeset(channel, attrs) do
+ channel
+ |> cast(attrs, @allowed_fields)
+ |> validate_required(@required_fields)
+ |> unique_constraint([:channel_id, :media_profile_id])
+ end
+end
diff --git a/lib/pinchflat/profiles.ex b/lib/pinchflat/profiles.ex
new file mode 100644
index 0000000..01d78b4
--- /dev/null
+++ b/lib/pinchflat/profiles.ex
@@ -0,0 +1,56 @@
+defmodule Pinchflat.Profiles do
+ @moduledoc """
+ The Profiles context.
+ """
+
+ import Ecto.Query, warn: false
+ alias Pinchflat.Repo
+
+ alias Pinchflat.Profiles.MediaProfile
+
+ @doc """
+ Returns the list of media_profiles. Returns [%MediaProfile{}, ...]
+ """
+ def list_media_profiles do
+ Repo.all(MediaProfile)
+ end
+
+ @doc """
+ Gets a single media_profile.
+
+ Returns %MediaProfile{}. Raises `Ecto.NoResultsError` if the Media profile does not exist.
+ """
+ def get_media_profile!(id), do: Repo.get!(MediaProfile, id)
+
+ @doc """
+ Creates a media_profile. Returns {:ok, %MediaProfile{}} | {:error, %Ecto.Changeset{}}
+ """
+ def create_media_profile(attrs) do
+ %MediaProfile{}
+ |> MediaProfile.changeset(attrs)
+ |> Repo.insert()
+ end
+
+ @doc """
+ Updates a media_profile. Returns {:ok, %MediaProfile{}} | {:error, %Ecto.Changeset{}}
+ """
+ def update_media_profile(%MediaProfile{} = media_profile, attrs) do
+ media_profile
+ |> MediaProfile.changeset(attrs)
+ |> Repo.update()
+ end
+
+ @doc """
+ Deletes a media_profile. Returns {:ok, %MediaProfile{}} | {:error, %Ecto.Changeset{}}
+ """
+ def delete_media_profile(%MediaProfile{} = media_profile) do
+ Repo.delete(media_profile)
+ end
+
+ @doc """
+ Returns an `%Ecto.Changeset{}` for tracking media_profile changes.
+ """
+ def change_media_profile(%MediaProfile{} = media_profile, attrs \\ %{}) do
+ MediaProfile.changeset(media_profile, attrs)
+ end
+end
diff --git a/lib/pinchflat/profiles/media_profile.ex b/lib/pinchflat/profiles/media_profile.ex
new file mode 100644
index 0000000..34b3fdf
--- /dev/null
+++ b/lib/pinchflat/profiles/media_profile.ex
@@ -0,0 +1,27 @@
+defmodule Pinchflat.Profiles.MediaProfile do
+ @moduledoc """
+ A media profile is a set of settings that can be applied to many media sources
+ """
+
+ use Ecto.Schema
+ import Ecto.Changeset
+
+ alias Pinchflat.MediaSource.Channel
+
+ schema "media_profiles" do
+ field :name, :string
+ field :output_path_template, :string
+
+ has_many :channels, Channel
+
+ timestamps(type: :utc_datetime)
+ end
+
+ @doc false
+ def changeset(media_profile, attrs) do
+ media_profile
+ |> cast(attrs, [:name, :output_path_template])
+ |> validate_required([:name, :output_path_template])
+ |> unique_constraint(:name)
+ end
+end
diff --git a/lib/pinchflat/profiles/options/yt_dlp/option_builder.ex b/lib/pinchflat/profiles/options/yt_dlp/option_builder.ex
new file mode 100644
index 0000000..ce99e1f
--- /dev/null
+++ b/lib/pinchflat/profiles/options/yt_dlp/option_builder.ex
@@ -0,0 +1,39 @@
+defmodule Pinchflat.Profiles.Options.YtDlp.OptionBuilder do
+ @moduledoc """
+ Builds the options for yt-dlp based on the given media profile.
+
+ IDEA: consider making this a behaviour so I can add other backends later
+ """
+
+ alias Pinchflat.Profiles.MediaProfile
+ alias Pinchflat.Profiles.Options.YtDlp.OutputPathBuilder
+
+ @doc """
+ Builds the options for yt-dlp based on the given media profile.
+
+ IDEA: consider adding the ability to pass in a second argument to override
+ these options
+ """
+ def build(%MediaProfile{} = media_profile) do
+ {:ok, output_path} = OutputPathBuilder.build(media_profile.output_path_template)
+
+ # NOTE: I'll be hardcoding most things for now (esp. options to help me test) -
+ # add more configuration later as I build out the models. Walk before you can run!
+
+ # NOTE: Looks like you can put different media types in different directories.
+ # see: https://github.com/yt-dlp/yt-dlp#output-template
+ {:ok,
+ [
+ :embed_metadata,
+ :embed_thumbnail,
+ :embed_subs,
+ :no_progress,
+ sub_langs: "en.*",
+ output: Path.join(base_directory(), output_path)
+ ]}
+ end
+
+ defp base_directory do
+ Application.get_env(:pinchflat, :media_directory)
+ end
+end
diff --git a/lib/pinchflat/profiles/options/yt_dlp/output_path_builder.ex b/lib/pinchflat/profiles/options/yt_dlp/output_path_builder.ex
new file mode 100644
index 0000000..b058784
--- /dev/null
+++ b/lib/pinchflat/profiles/options/yt_dlp/output_path_builder.ex
@@ -0,0 +1,64 @@
+defmodule Pinchflat.Profiles.Options.YtDlp.OutputPathBuilder do
+ @moduledoc """
+ Builds yt-dlp-friendly output paths for downloaded media
+
+ IDEA: consider making this a behaviour so I can add other backends later
+ """
+
+ alias Pinchflat.RenderedString.Parser, as: TemplateParser
+
+ @doc """
+ Builds the actual final filepath from a given template.
+
+ Translates liquid-style templates into yt-dlp-style templates,
+ leaving yt-dlp syntax intact.
+ """
+ def build(template_string) do
+ TemplateParser.parse(template_string, full_yt_dlp_options_map())
+ end
+
+ defp full_yt_dlp_options_map do
+ Map.merge(
+ standard_yt_dlp_option_map(),
+ custom_yt_dlp_option_map()
+ )
+ end
+
+ defp standard_yt_dlp_option_map do
+ %{
+ # Uppercase "S" means "safe" - ie: filepath-safe
+ "id" => "%(id)S",
+ "ext" => "%(ext)S",
+ "title" => "%(title)S",
+ "fulltitle" => "%(fulltitle)S",
+ "uploader" => "%(uploader)S",
+ "creator" => "%(creator)S",
+ "upload_date" => "%(upload_date)S",
+ "release_date" => "%(release_date)S",
+ "duration" => "%(duration)S",
+ # For videos classified as an episode of a series:
+ "series" => "%(series)S",
+ "season" => "%(season)S",
+ "season_number" => "%(season_number)S",
+ "episode" => "%(episode)S",
+ "episode_number" => "%(episode_number)S",
+ "episode_id" => "%(episode_id)S",
+ # For videos classified as music:
+ "track" => "%(track)S",
+ "track_number" => "%(track_number)S",
+ "artist" => "%(artist)S",
+ "album" => "%(album)S",
+ "album_type" => "%(album_type)S",
+ "genre" => "%(genre)S"
+ }
+ end
+
+ defp custom_yt_dlp_option_map do
+ %{
+ # Individual parts of the upload date
+ "upload_year" => "%(upload_date>%Y)S",
+ "upload_month" => "%(upload_date>%m)S",
+ "upload_day" => "%(upload_date>%d)S"
+ }
+ end
+end
diff --git a/lib/pinchflat/rendered_string/base.ex b/lib/pinchflat/rendered_string/base.ex
new file mode 100644
index 0000000..549a676
--- /dev/null
+++ b/lib/pinchflat/rendered_string/base.ex
@@ -0,0 +1,52 @@
+defmodule Pinchflat.RenderedString.Base do
+ @moduledoc """
+ A base module for parsing rendered strings, designed as a macro to be used
+ in other modules. See https://elixirforum.com/t/help-to-parse-a-template-with-nimbleparsec/47980
+
+ NOTE: if the needs here get any more complicated, look into using a Liquid
+ template parser. No need to reinvent the wheel any more than I already have.
+
+ NOTE: this is effectively tested by the `Pinchflat.RenderedString.Parser`'s tests
+ """
+
+ defmacro __using__(_opts) do
+ quote location: :keep do
+ import NimbleParsec
+
+ opening_tag = string("{{")
+ closing_tag = string("}}")
+ optional_whitespaces = ascii_string(~c[ \t\n\r], min: 0)
+
+ # Capture everything up to the opening object
+ text =
+ lookahead_not(opening_tag)
+ # ... as long as it's a character
+ |> utf8_char([])
+ # ... and there's at least one character
+ |> times(min: 1)
+ # ... and then convert it to a string
+ |> reduce({List, :to_string, []})
+ # ... finally bag it and tag it
+ |> unwrap_and_tag(:text)
+
+ identifier =
+ utf8_string([?a..?z, ?A..?Z, ?_, ?0..?9], min: 1)
+ |> reduce({Enum, :join, []})
+ |> unwrap_and_tag(:identifier)
+
+ defparsecp(:expression, identifier)
+
+ # when spotting interpolation, ignore the opening tag and any whitespace
+ interpolation =
+ ignore(concat(opening_tag, optional_whitespaces))
+ # ... then parse the expression (identifier)
+ |> parsec(:expression)
+ # ... then ignore any whitespace and the closing tags after the expression
+ |> ignore(concat(optional_whitespaces, closing_tag))
+ # ... once again we bag it and tag it
+ |> unwrap_and_tag(:interpolation)
+
+ defparsec(:do_parse, choice([interpolation, text]) |> repeat() |> eos())
+ end
+ end
+end
diff --git a/lib/pinchflat/rendered_string/parser.ex b/lib/pinchflat/rendered_string/parser.ex
new file mode 100644
index 0000000..ab167fa
--- /dev/null
+++ b/lib/pinchflat/rendered_string/parser.ex
@@ -0,0 +1,35 @@
+defmodule Pinchflat.RenderedString.Parser do
+ @moduledoc """
+ Parses liquid-ish-style strings into a rendered string
+
+ Used for turning filepath templates into real filepaths
+ """
+
+ use Pinchflat.RenderedString.Base
+
+ @doc """
+ Parses a string into a rendered string, using the provided variables.
+
+ Variable identifiers are surrounded by {{ and }}. The variable keys MUST be strings.
+ If an identifier is not found in the provided variables, it will be removed from the string.
+ """
+ def parse(string, variables) do
+ # `do_parse` comes from `RenderedString.Base`
+ case do_parse(string) do
+ {:ok, parsed, _, _, _, _} ->
+ {:ok, build_string(parsed, variables)}
+
+ {:error, message, _, _, _, _} ->
+ {:error, message}
+ end
+ end
+
+ defp build_string(parsed, variables) do
+ Enum.reduce(parsed, "", fn element, acc ->
+ case element do
+ {:text, text} -> acc <> text
+ {:interpolation, {:identifier, identifier}} -> acc <> to_string(variables[identifier])
+ end
+ end)
+ end
+end
diff --git a/lib/pinchflat/repo.ex b/lib/pinchflat/repo.ex
index 05ad6a6..9751f75 100644
--- a/lib/pinchflat/repo.ex
+++ b/lib/pinchflat/repo.ex
@@ -2,4 +2,18 @@ defmodule Pinchflat.Repo do
use Ecto.Repo,
otp_app: :pinchflat,
adapter: Ecto.Adapters.Postgres
+
+ @doc """
+ It's not immediately obvious if an Oban job qualifies as unique, so this method
+ attempts creating a job and checks for the `conflict?` field in the returned job.
+
+ Returns {:ok, %Oban.Job{}} | {:duplicate, %Oban.Job{}} | {:error, any()}.
+ """
+ def insert_unique_job(job_struct) do
+ case Oban.insert(job_struct) do
+ {:ok, %Oban.Job{conflict?: false} = job} -> {:ok, job}
+ {:ok, %Oban.Job{conflict?: true} = job} -> {:duplicate, job}
+ err -> err
+ end
+ end
end
diff --git a/lib/pinchflat/tasks.ex b/lib/pinchflat/tasks.ex
new file mode 100644
index 0000000..052b137
--- /dev/null
+++ b/lib/pinchflat/tasks.ex
@@ -0,0 +1,148 @@
+defmodule Pinchflat.Tasks do
+ @moduledoc """
+ The Tasks context.
+ """
+
+ import Ecto.Query, warn: false
+ alias Pinchflat.Repo
+
+ alias Pinchflat.Tasks.Task
+ alias Pinchflat.Media.MediaItem
+ alias Pinchflat.MediaSource.Channel
+
+ @doc """
+ Returns the list of tasks. Returns [%Task{}, ...]
+ """
+ def list_tasks do
+ Repo.all(Task)
+ end
+
+ @doc """
+ Returns the list of tasks for a given record type and ID. Optionally allows you to specify
+ which job states to include.
+
+ Returns [%Task{}, ...]
+ """
+ def list_tasks_for(attached_record_type, attached_record_id, job_states \\ Oban.Job.states()) do
+ stringified_states = Enum.map(job_states, &to_string/1)
+
+ Repo.all(
+ from t in Task,
+ join: j in assoc(t, :job),
+ where: field(t, ^attached_record_type) == ^attached_record_id,
+ where: j.state in ^stringified_states
+ )
+ end
+
+ @doc """
+ Returns the list of pending tasks for a given record type and ID.
+
+ Returns [%Task{}, ...]
+ """
+ def list_pending_tasks_for(attached_record_type, attached_record_id) do
+ list_tasks_for(
+ attached_record_type,
+ attached_record_id,
+ [:available, :scheduled, :retryable]
+ )
+ end
+
+ @doc """
+ Gets a single task.
+
+ Returns %Task{}. Raises `Ecto.NoResultsError` if the Task does not exist.
+ """
+ def get_task!(id), do: Repo.get!(Task, id)
+
+ @doc """
+ Creates a task.
+
+ Accepts map() | %Oban.Job{}, %Channel{} | %Oban.Job{}, %MediaItem{}.
+ Returns {:ok, %Task{}} | {:error, %Ecto.Changeset{}}.
+ """
+ def create_task(attrs) do
+ %Task{}
+ |> Task.changeset(attrs)
+ |> Repo.insert()
+ end
+
+ # This function's signature is designed to help simplify
+ # usage of `create_job_with_task/2`
+ def create_task(%Oban.Job{} = job, attached_record) do
+ attached_record_attr =
+ case attached_record do
+ %Channel{} = channel -> %{channel_id: channel.id}
+ %MediaItem{} = media_item -> %{media_item_id: media_item.id}
+ end
+
+ %Task{}
+ |> Task.changeset(Map.merge(%{job_id: job.id}, attached_record_attr))
+ |> Repo.insert()
+ end
+
+ @doc """
+ Creates a job from given attrs, creating a task with an attached record
+ if successful. Returns an error if the job already exists.
+
+ Returns {:ok, %Task{}} | {:error, :duplicate_job} | {:error, %Ecto.Changeset{}}.
+ """
+ def create_job_with_task(job_attrs, task_attached_record) do
+ case Repo.insert_unique_job(job_attrs) do
+ {:ok, job} -> create_task(job, task_attached_record)
+ {:duplicate, _} -> {:error, :duplicate_job}
+ err -> err
+ end
+ end
+
+ @doc """
+ Deletes a task. Also cancels any attached job.
+
+ Returns {:ok, %Task{}} | {:error, %Ecto.Changeset{}}.
+ """
+ def delete_task(%Task{} = task) do
+ :ok = Oban.cancel_job(task.job_id)
+
+ Repo.delete(task)
+ end
+
+ @doc """
+ Deletes all tasks attached to a given record, cancelling any attached jobs.
+
+ Returns :ok
+ """
+ def delete_tasks_for(attached_record) do
+ tasks =
+ case attached_record do
+ %Channel{} = channel -> list_tasks_for(:channel_id, channel.id)
+ %MediaItem{} = media_item -> list_tasks_for(:media_item_id, media_item.id)
+ end
+
+ Enum.each(tasks, fn task ->
+ delete_task(task)
+ end)
+ end
+
+ @doc """
+ Deletes all _pending_ tasks attached to a given record, cancelling any attached jobs.
+
+ Returns :ok
+ """
+ def delete_pending_tasks_for(attached_record) do
+ tasks =
+ case attached_record do
+ %Channel{} = channel -> list_pending_tasks_for(:channel_id, channel.id)
+ %MediaItem{} = media_item -> list_pending_tasks_for(:media_item_id, media_item.id)
+ end
+
+ Enum.each(tasks, fn task ->
+ delete_task(task)
+ end)
+ end
+
+ @doc """
+ Returns an `%Ecto.Changeset{}` for tracking task changes.
+ """
+ def change_task(%Task{} = task, attrs \\ %{}) do
+ Task.changeset(task, attrs)
+ end
+end
diff --git a/lib/pinchflat/tasks/channel_tasks.ex b/lib/pinchflat/tasks/channel_tasks.ex
new file mode 100644
index 0000000..a2b1cd2
--- /dev/null
+++ b/lib/pinchflat/tasks/channel_tasks.ex
@@ -0,0 +1,33 @@
+defmodule Pinchflat.Tasks.ChannelTasks do
+ @moduledoc """
+ This module contains methods for managing tasks (workers) related to channels.
+ """
+
+ alias Pinchflat.Tasks
+ alias Pinchflat.MediaSource.Channel
+ alias Pinchflat.Workers.MediaIndexingWorker
+
+ @doc """
+ Starts tasks for indexing a channel's media.
+
+ Returns {:ok, :should_not_index} | {:ok, %Task{}}.
+ """
+ def kickoff_indexing_task(%Channel{} = channel) do
+ Tasks.delete_pending_tasks_for(channel)
+
+ if channel.index_frequency_minutes <= 0 do
+ {:ok, :should_not_index}
+ else
+ channel
+ |> Map.take([:id])
+ # Schedule this one immediately, but future ones will be on an interval
+ |> MediaIndexingWorker.new()
+ |> Tasks.create_job_with_task(channel)
+ |> case do
+ # This should never return {:error, :duplicate_job} since we just deleted
+ # any pending tasks. I'm being assertive about it so it's obvious if I'm wrong
+ {:ok, task} -> {:ok, task}
+ end
+ end
+ end
+end
diff --git a/lib/pinchflat/tasks/task.ex b/lib/pinchflat/tasks/task.ex
new file mode 100644
index 0000000..9d53b60
--- /dev/null
+++ b/lib/pinchflat/tasks/task.ex
@@ -0,0 +1,26 @@
+defmodule Pinchflat.Tasks.Task do
+ @moduledoc """
+ The Task schema.
+ """
+
+ use Ecto.Schema
+ import Ecto.Changeset
+
+ alias Pinchflat.Media.MediaItem
+ alias Pinchflat.MediaSource.Channel
+
+ schema "tasks" do
+ belongs_to :job, Oban.Job
+ belongs_to :channel, Channel
+ belongs_to :media_item, MediaItem
+
+ timestamps(type: :utc_datetime)
+ end
+
+ @doc false
+ def changeset(task, attrs) do
+ task
+ |> cast(attrs, [:job_id, :channel_id, :media_item_id])
+ |> validate_required([:job_id])
+ end
+end
diff --git a/lib/utils/string_utils.ex b/lib/pinchflat/utils/string_utils.ex
similarity index 52%
rename from lib/utils/string_utils.ex
rename to lib/pinchflat/utils/string_utils.ex
index f52bcfb..e0f01e8 100644
--- a/lib/utils/string_utils.ex
+++ b/lib/pinchflat/utils/string_utils.ex
@@ -5,10 +5,23 @@ defmodule Pinchflat.Utils.StringUtils do
@doc """
Converts a string to kebab-case (ie: `hello world` -> `hello-world`)
+
+ Returns binary()
"""
def to_kebab_case(string) do
string
|> String.replace(~r/[\s_]/, "-")
|> String.downcase()
end
+
+ @doc """
+ Returns a random string of the given length. Base 16 encoded, lower case.
+
+ Returns binary()
+ """
+ def random_string(length \\ 32) do
+ :crypto.strong_rand_bytes(length)
+ |> Base.encode16(case: :lower)
+ |> String.slice(0..(length - 1))
+ end
end
diff --git a/lib/pinchflat/workers/media_indexing_worker.ex b/lib/pinchflat/workers/media_indexing_worker.ex
new file mode 100644
index 0000000..4869b0d
--- /dev/null
+++ b/lib/pinchflat/workers/media_indexing_worker.ex
@@ -0,0 +1,80 @@
+defmodule Pinchflat.Workers.MediaIndexingWorker do
+ @moduledoc false
+
+ use Oban.Worker,
+ queue: :media_indexing,
+ unique: [period: :infinity, states: [:available, :scheduled, :retryable]],
+ tags: ["media_source", "media_indexing"]
+
+ alias __MODULE__
+ alias Pinchflat.Media
+ alias Pinchflat.Tasks
+ alias Pinchflat.MediaSource
+ alias Pinchflat.Workers.VideoDownloadWorker
+
+ @impl Oban.Worker
+ @doc """
+ The ID is that of a channel _record_, not a YouTube channel ID. Indexes
+ the provided channel, kicks off downloads for each new MediaItem, and
+ reschedules the job to run again in the future (as determined by the
+ channel's `index_frequency_minutes` field).
+
+ README: Re-scheduling here works a little different than you may expect.
+ The reschedule time is relative to the time the job has actually _completed_.
+ This has some benefits but also side effects to be aware of:
+
+ - Benefit: No chance for jobs to overlap if a job takes longer than the
+ scheduled interval. Less likely to hit API rate limits.
+ - Side effect: Intervals are "soft" and _always_ walk forward. This may cause
+ user confusion since a 30-minute job scheduled for every hour will
+ actually run every 1 hour and 30 minutes. The tradeoff of not inundating
+ the API with requests and also not overlapping jobs is worth it, IMO.
+
+ NOTE: Since indexing can take a LONG time, I should check what happens if an
+ application restart occurs while a job is running. Will the job be lost?
+
+ IDEA: Should I use paging and do indexing in chunks? Is that even faster?
+
+ Returns :ok | {:ok, %Task{}}
+ """
+ def perform(%Oban.Job{args: %{"id" => channel_id}}) do
+ channel = MediaSource.get_channel!(channel_id)
+
+ if channel.index_frequency_minutes <= 0 do
+ :ok
+ else
+ index_media_and_reschedule(channel)
+ end
+ end
+
+ defp index_media_and_reschedule(channel) do
+ MediaSource.index_media_items(channel)
+ enqueue_video_downloads(channel)
+
+ channel
+ |> Map.take([:id])
+ |> MediaIndexingWorker.new(schedule_in: channel.index_frequency_minutes * 60)
+ |> Tasks.create_job_with_task(channel)
+ |> case do
+ {:ok, task} -> {:ok, task}
+ {:error, :duplicate_job} -> {:ok, :job_exists}
+ end
+ end
+
+ # NOTE: this starts a download for each media item that is pending,
+ # not just the ones that were indexed in this job run. This should ensure
+ # that any stragglers are caught if, for some reason, they weren't enqueued
+ # or somehow got de-queued.
+ #
+ # I'm not sure of a case where this would happen, but it's cheap insurance.
+ defp enqueue_video_downloads(channel) do
+ channel
+ |> Media.list_pending_media_items_for()
+ |> Enum.each(fn media_item ->
+ media_item
+ |> Map.take([:id])
+ |> VideoDownloadWorker.new()
+ |> Tasks.create_job_with_task(media_item)
+ end)
+ end
+end
diff --git a/lib/pinchflat/workers/video_download_worker.ex b/lib/pinchflat/workers/video_download_worker.ex
new file mode 100644
index 0000000..f0047c1
--- /dev/null
+++ b/lib/pinchflat/workers/video_download_worker.ex
@@ -0,0 +1,26 @@
+defmodule Pinchflat.Workers.VideoDownloadWorker do
+ @moduledoc false
+
+ use Oban.Worker,
+ queue: :media_fetching,
+ unique: [period: :infinity, states: [:available, :scheduled, :retryable, :executing]],
+ tags: ["media_item", "media_fetching"]
+
+ alias Pinchflat.Media
+ alias Pinchflat.MediaClient.VideoDownloader
+
+ @impl Oban.Worker
+ @doc """
+ For a given media item, download the video and save the metadata.
+
+ Returns {:ok, %MediaItem{}} | {:error, any, ...any}
+ """
+ def perform(%Oban.Job{args: %{"id" => media_item_id}}) do
+ media_item = Media.get_media_item!(media_item_id)
+
+ case VideoDownloader.download_for_media_item(media_item) do
+ {:ok, _} -> {:ok, media_item}
+ err -> err
+ end
+ end
+end
diff --git a/lib/pinchflat_web/controllers/media_profiles/media_profile_controller.ex b/lib/pinchflat_web/controllers/media_profiles/media_profile_controller.ex
new file mode 100644
index 0000000..895b219
--- /dev/null
+++ b/lib/pinchflat_web/controllers/media_profiles/media_profile_controller.ex
@@ -0,0 +1,62 @@
+defmodule PinchflatWeb.MediaProfiles.MediaProfileController do
+ use PinchflatWeb, :controller
+
+ alias Pinchflat.Profiles
+ alias Pinchflat.Profiles.MediaProfile
+
+ def index(conn, _params) do
+ media_profiles = Profiles.list_media_profiles()
+ render(conn, :index, media_profiles: media_profiles)
+ end
+
+ def new(conn, _params) do
+ changeset = Profiles.change_media_profile(%MediaProfile{})
+ render(conn, :new, changeset: changeset)
+ end
+
+ def create(conn, %{"media_profile" => media_profile_params}) do
+ case Profiles.create_media_profile(media_profile_params) do
+ {:ok, media_profile} ->
+ conn
+ |> put_flash(:info, "Media profile created successfully.")
+ |> redirect(to: ~p"/media_profiles/#{media_profile}")
+
+ {:error, %Ecto.Changeset{} = changeset} ->
+ render(conn, :new, changeset: changeset)
+ end
+ end
+
+ def show(conn, %{"id" => id}) do
+ media_profile = Profiles.get_media_profile!(id)
+ render(conn, :show, media_profile: media_profile)
+ end
+
+ def edit(conn, %{"id" => id}) do
+ media_profile = Profiles.get_media_profile!(id)
+ changeset = Profiles.change_media_profile(media_profile)
+ render(conn, :edit, media_profile: media_profile, changeset: changeset)
+ end
+
+ def update(conn, %{"id" => id, "media_profile" => media_profile_params}) do
+ media_profile = Profiles.get_media_profile!(id)
+
+ case Profiles.update_media_profile(media_profile, media_profile_params) do
+ {:ok, media_profile} ->
+ conn
+ |> put_flash(:info, "Media profile updated successfully.")
+ |> redirect(to: ~p"/media_profiles/#{media_profile}")
+
+ {:error, %Ecto.Changeset{} = changeset} ->
+ render(conn, :edit, media_profile: media_profile, changeset: changeset)
+ end
+ end
+
+ def delete(conn, %{"id" => id}) do
+ media_profile = Profiles.get_media_profile!(id)
+ {:ok, _media_profile} = Profiles.delete_media_profile(media_profile)
+
+ conn
+ |> put_flash(:info, "Media profile deleted successfully.")
+ |> redirect(to: ~p"/media_profiles")
+ end
+end
diff --git a/lib/pinchflat_web/controllers/media_profiles/media_profile_html.ex b/lib/pinchflat_web/controllers/media_profiles/media_profile_html.ex
new file mode 100644
index 0000000..edb33ee
--- /dev/null
+++ b/lib/pinchflat_web/controllers/media_profiles/media_profile_html.ex
@@ -0,0 +1,13 @@
+defmodule PinchflatWeb.MediaProfiles.MediaProfileHTML do
+ use PinchflatWeb, :html
+
+ embed_templates "media_profile_html/*"
+
+ @doc """
+ Renders a media_profile form.
+ """
+ attr :changeset, Ecto.Changeset, required: true
+ attr :action, :string, required: true
+
+ def media_profile_form(assigns)
+end
diff --git a/lib/pinchflat_web/controllers/media_profiles/media_profile_html/edit.html.heex b/lib/pinchflat_web/controllers/media_profiles/media_profile_html/edit.html.heex
new file mode 100644
index 0000000..ca35b19
--- /dev/null
+++ b/lib/pinchflat_web/controllers/media_profiles/media_profile_html/edit.html.heex
@@ -0,0 +1,8 @@
+<.header>
+ Edit Media profile <%= @media_profile.id %>
+ <:subtitle>Use this form to manage media_profile records in your database.
+
+
+<.media_profile_form changeset={@changeset} action={~p"/media_profiles/#{@media_profile}"} />
+
+<.back navigate={~p"/media_profiles"}>Back to media_profiles
diff --git a/lib/pinchflat_web/controllers/media_profiles/media_profile_html/index.html.heex b/lib/pinchflat_web/controllers/media_profiles/media_profile_html/index.html.heex
new file mode 100644
index 0000000..eec319c
--- /dev/null
+++ b/lib/pinchflat_web/controllers/media_profiles/media_profile_html/index.html.heex
@@ -0,0 +1,30 @@
+<.header>
+ Listing Media profiles
+ <:actions>
+ <.link href={~p"/media_profiles/new"}>
+ <.button>New Media profile
+
+
+
+
+<.table
+ id="media_profiles"
+ rows={@media_profiles}
+ row_click={&JS.navigate(~p"/media_profiles/#{&1}")}
+>
+ <:col :let={media_profile} label="Name"><%= media_profile.name %>
+ <:col :let={media_profile} label="Output path template">
+ <%= media_profile.output_path_template %>
+
+ <:action :let={media_profile}>
+
+ <.link navigate={~p"/media_profiles/#{media_profile}"}>Show
+
+ <.link navigate={~p"/media_profiles/#{media_profile}/edit"}>Edit
+
+ <:action :let={media_profile}>
+ <.link href={~p"/media_profiles/#{media_profile}"} method="delete" data-confirm="Are you sure?">
+ Delete
+
+
+
diff --git a/lib/pinchflat_web/controllers/media_profiles/media_profile_html/media_profile_form.html.heex b/lib/pinchflat_web/controllers/media_profiles/media_profile_html/media_profile_form.html.heex
new file mode 100644
index 0000000..2a3ab66
--- /dev/null
+++ b/lib/pinchflat_web/controllers/media_profiles/media_profile_html/media_profile_form.html.heex
@@ -0,0 +1,10 @@
+<.simple_form :let={f} for={@changeset} action={@action}>
+ <.error :if={@changeset.action}>
+ Oops, something went wrong! Please check the errors below.
+
+ <.input field={f[:name]} type="text" label="Name" />
+ <.input field={f[:output_path_template]} type="text" label="Output path template" />
+ <:actions>
+ <.button>Save Media profile
+
+
diff --git a/lib/pinchflat_web/controllers/media_profiles/media_profile_html/new.html.heex b/lib/pinchflat_web/controllers/media_profiles/media_profile_html/new.html.heex
new file mode 100644
index 0000000..0887e17
--- /dev/null
+++ b/lib/pinchflat_web/controllers/media_profiles/media_profile_html/new.html.heex
@@ -0,0 +1,8 @@
+<.header>
+ New Media profile
+ <:subtitle>Use this form to manage media_profile records in your database.
+
+
+<.media_profile_form changeset={@changeset} action={~p"/media_profiles"} />
+
+<.back navigate={~p"/media_profiles"}>Back to media_profiles
diff --git a/lib/pinchflat_web/controllers/media_profiles/media_profile_html/show.html.heex b/lib/pinchflat_web/controllers/media_profiles/media_profile_html/show.html.heex
new file mode 100644
index 0000000..80ea07f
--- /dev/null
+++ b/lib/pinchflat_web/controllers/media_profiles/media_profile_html/show.html.heex
@@ -0,0 +1,16 @@
+<.header>
+ Media profile <%= @media_profile.id %>
+ <:subtitle>This is a media_profile record from your database.
+ <:actions>
+ <.link href={~p"/media_profiles/#{@media_profile}/edit"}>
+ <.button>Edit media_profile
+
+
+
+
+<.list>
+ <:item title="Name"><%= @media_profile.name %>
+ <:item title="Output path template"><%= @media_profile.output_path_template %>
+
+
+<.back navigate={~p"/media_profiles"}>Back to media_profiles
diff --git a/lib/pinchflat_web/controllers/media_sources/channel_controller.ex b/lib/pinchflat_web/controllers/media_sources/channel_controller.ex
new file mode 100644
index 0000000..08de4f4
--- /dev/null
+++ b/lib/pinchflat_web/controllers/media_sources/channel_controller.ex
@@ -0,0 +1,75 @@
+defmodule PinchflatWeb.MediaSources.ChannelController do
+ use PinchflatWeb, :controller
+
+ alias Pinchflat.Profiles
+ alias Pinchflat.MediaSource
+ alias Pinchflat.MediaSource.Channel
+
+ def index(conn, _params) do
+ channels = MediaSource.list_channels()
+
+ render(conn, :index, channels: channels)
+ end
+
+ def new(conn, _params) do
+ changeset = MediaSource.change_channel(%Channel{})
+
+ render(conn, :new, changeset: changeset, media_profiles: media_profiles())
+ end
+
+ def create(conn, %{"channel" => channel_params}) do
+ case MediaSource.create_channel(channel_params) do
+ {:ok, channel} ->
+ conn
+ |> put_flash(:info, "Channel created successfully.")
+ |> redirect(to: ~p"/media_sources/channels/#{channel}")
+
+ {:error, %Ecto.Changeset{} = changeset} ->
+ render(conn, :new, changeset: changeset, media_profiles: media_profiles())
+ end
+ end
+
+ def show(conn, %{"id" => id}) do
+ channel = MediaSource.get_channel!(id)
+
+ render(conn, :show, channel: channel)
+ end
+
+ def edit(conn, %{"id" => id}) do
+ channel = MediaSource.get_channel!(id)
+ changeset = MediaSource.change_channel(channel)
+
+ render(conn, :edit, channel: channel, changeset: changeset, media_profiles: media_profiles())
+ end
+
+ def update(conn, %{"id" => id, "channel" => channel_params}) do
+ channel = MediaSource.get_channel!(id)
+
+ case MediaSource.update_channel(channel, channel_params) do
+ {:ok, channel} ->
+ conn
+ |> put_flash(:info, "Channel updated successfully.")
+ |> redirect(to: ~p"/media_sources/channels/#{channel}")
+
+ {:error, %Ecto.Changeset{} = changeset} ->
+ render(conn, :edit,
+ channel: channel,
+ changeset: changeset,
+ media_profiles: media_profiles()
+ )
+ end
+ end
+
+ def delete(conn, %{"id" => id}) do
+ channel = MediaSource.get_channel!(id)
+ {:ok, _channel} = MediaSource.delete_channel(channel)
+
+ conn
+ |> put_flash(:info, "Channel deleted successfully.")
+ |> redirect(to: ~p"/media_sources/channels")
+ end
+
+ defp media_profiles do
+ Profiles.list_media_profiles()
+ end
+end
diff --git a/lib/pinchflat_web/controllers/media_sources/channel_html.ex b/lib/pinchflat_web/controllers/media_sources/channel_html.ex
new file mode 100644
index 0000000..0feb191
--- /dev/null
+++ b/lib/pinchflat_web/controllers/media_sources/channel_html.ex
@@ -0,0 +1,27 @@
+defmodule PinchflatWeb.MediaSources.ChannelHTML do
+ use PinchflatWeb, :html
+
+ embed_templates "channel_html/*"
+
+ @doc """
+ Renders a channel form.
+ """
+ attr :changeset, Ecto.Changeset, required: true
+ attr :action, :string, required: true
+ attr :media_profiles, :list, required: true
+
+ def channel_form(assigns)
+
+ def friendly_index_frequencies do
+ [
+ {"Never", -1},
+ {"1 Hour", 60},
+ {"3 Hours", 3 * 60},
+ {"6 Hours", 6 * 60},
+ {"12 Hours", 12 * 60},
+ {"Daily (recommended)", 24 * 60},
+ {"Weekly", 7 * 24 * 60},
+ {"Monthly", 30 * 24 * 60}
+ ]
+ end
+end
diff --git a/lib/pinchflat_web/controllers/media_sources/channel_html/channel_form.html.heex b/lib/pinchflat_web/controllers/media_sources/channel_html/channel_form.html.heex
new file mode 100644
index 0000000..b8b4d4e
--- /dev/null
+++ b/lib/pinchflat_web/controllers/media_sources/channel_html/channel_form.html.heex
@@ -0,0 +1,25 @@
+<.simple_form :let={f} for={@changeset} action={@action}>
+ <.error :if={@changeset.action}>
+ Oops, something went wrong! Please check the errors below.
+
+
+ <.input
+ field={f[:media_profile_id]}
+ options={Enum.map(@media_profiles, &{&1.name, &1.id})}
+ type="select"
+ label="Media Profile"
+ />
+
+ <.input field={f[:original_url]} type="text" label="Channel URL" />
+
+ <.input
+ field={f[:index_frequency_minutes]}
+ options={friendly_index_frequencies()}
+ type="select"
+ label="Index Frequency"
+ />
+
+ <:actions>
+ <.button>Save Channel
+
+
diff --git a/lib/pinchflat_web/controllers/media_sources/channel_html/edit.html.heex b/lib/pinchflat_web/controllers/media_sources/channel_html/edit.html.heex
new file mode 100644
index 0000000..c65d810
--- /dev/null
+++ b/lib/pinchflat_web/controllers/media_sources/channel_html/edit.html.heex
@@ -0,0 +1,12 @@
+<.header>
+ Edit Channel <%= @channel.id %>
+ <:subtitle>Use this form to manage channel records in your database.
+
+
+<.channel_form
+ changeset={@changeset}
+ media_profiles={@media_profiles}
+ action={~p"/media_sources/channels/#{@channel}"}
+/>
+
+<.back navigate={~p"/media_sources/channels"}>Back to channels
diff --git a/lib/pinchflat_web/controllers/media_sources/channel_html/index.html.heex b/lib/pinchflat_web/controllers/media_sources/channel_html/index.html.heex
new file mode 100644
index 0000000..b78a61b
--- /dev/null
+++ b/lib/pinchflat_web/controllers/media_sources/channel_html/index.html.heex
@@ -0,0 +1,28 @@
+<.header>
+ Listing Channels
+ <:actions>
+ <.link href={~p"/media_sources/channels/new"}>
+ <.button>New Channel
+
+
+
+
+<.table id="channels" rows={@channels} row_click={&JS.navigate(~p"/media_sources/channels/#{&1}")}>
+ <:col :let={channel} label="Name"><%= channel.name %>
+ <:col :let={channel} label="Channel"><%= channel.channel_id %>
+ <:action :let={channel}>
+
+ <.link navigate={~p"/media_sources/channels/#{channel}"}>Show
+
+ <.link navigate={~p"/media_sources/channels/#{channel}/edit"}>Edit
+
+ <:action :let={channel}>
+ <.link
+ href={~p"/media_sources/channels/#{channel}"}
+ method="delete"
+ data-confirm="Are you sure?"
+ >
+ Delete
+
+
+
diff --git a/lib/pinchflat_web/controllers/media_sources/channel_html/new.html.heex b/lib/pinchflat_web/controllers/media_sources/channel_html/new.html.heex
new file mode 100644
index 0000000..b09a477
--- /dev/null
+++ b/lib/pinchflat_web/controllers/media_sources/channel_html/new.html.heex
@@ -0,0 +1,12 @@
+<.header>
+ New Channel
+ <:subtitle>Use this form to manage channel records in your database.
+
+
+<.channel_form
+ changeset={@changeset}
+ media_profiles={@media_profiles}
+ action={~p"/media_sources/channels"}
+/>
+
+<.back navigate={~p"/media_sources/channels"}>Back to channels
diff --git a/lib/pinchflat_web/controllers/media_sources/channel_html/show.html.heex b/lib/pinchflat_web/controllers/media_sources/channel_html/show.html.heex
new file mode 100644
index 0000000..0f59e3b
--- /dev/null
+++ b/lib/pinchflat_web/controllers/media_sources/channel_html/show.html.heex
@@ -0,0 +1,17 @@
+<.header>
+ Channel <%= @channel.id %>
+ <:subtitle>This is a channel record from your database.
+ <:actions>
+ <.link href={~p"/media_sources/channels/#{@channel}/edit"}>
+ <.button>Edit channel
+
+
+
+
+<.list>
+ <:item title="Channel Name"><%= @channel.name %>
+ <:item title="Channel ID"><%= @channel.channel_id %>
+ <:item title="Original URL"><%= @channel.original_url %>
+
+
+<.back navigate={~p"/media_sources/channels"}>Back to channels
diff --git a/lib/pinchflat_web/router.ex b/lib/pinchflat_web/router.ex
index 186fcb3..e0775ea 100644
--- a/lib/pinchflat_web/router.ex
+++ b/lib/pinchflat_web/router.ex
@@ -18,6 +18,12 @@ defmodule PinchflatWeb.Router do
pipe_through :browser
get "/", PageController, :home
+
+ resources "/media_profiles", MediaProfiles.MediaProfileController
+
+ scope "/media_sources", MediaSources do
+ resources "/channels", ChannelController
+ end
end
# Other scopes may use custom stacks.
diff --git a/mix.exs b/mix.exs
index 83b991b..d89ada4 100644
--- a/mix.exs
+++ b/mix.exs
@@ -51,8 +51,11 @@ defmodule Pinchflat.MixProject do
{:jason, "~> 1.2"},
{:dns_cluster, "~> 0.1.1"},
{:plug_cowboy, "~> 2.5"},
+ {:oban, "~> 2.16"},
+ {:nimble_parsec, "~> 1.4"},
{:mox, "~> 1.0", only: :test},
- {:credo, "~> 1.7", only: [:dev, :test], runtime: false}
+ {:credo, "~> 1.7", only: [:dev, :test], runtime: false},
+ {:faker, "~> 0.17", only: :test}
]
end
diff --git a/mix.lock b/mix.lock
index 9a2d029..157a94f 100644
--- a/mix.lock
+++ b/mix.lock
@@ -12,6 +12,7 @@
"ecto_sql": {:hex, :ecto_sql, "3.11.1", "e9abf28ae27ef3916b43545f9578b4750956ccea444853606472089e7d169470", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.11.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ce14063ab3514424276e7e360108ad6c2308f6d88164a076aac8a387e1fea634"},
"esbuild": {:hex, :esbuild, "0.8.1", "0cbf919f0eccb136d2eeef0df49c4acf55336de864e63594adcea3814f3edf41", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "25fc876a67c13cb0a776e7b5d7974851556baeda2085296c14ab48555ea7560f"},
"expo": {:hex, :expo, "0.5.1", "249e826a897cac48f591deba863b26c16682b43711dd15ee86b92f25eafd96d9", [:mix], [], "hexpm", "68a4233b0658a3d12ee00d27d37d856b1ba48607e7ce20fd376958d0ba6ce92b"},
+ "faker": {:hex, :faker, "0.17.0", "671019d0652f63aefd8723b72167ecdb284baf7d47ad3a82a15e9b8a6df5d1fa", [:mix], [], "hexpm", "a7d4ad84a93fd25c5f5303510753789fc2433ff241bf3b4144d3f6f291658a6a"},
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
"finch": {:hex, :finch, "0.17.0", "17d06e1d44d891d20dbd437335eebe844e2426a0cd7e3a3e220b461127c73f70", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.6 or ~> 1.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "8d014a661bb6a437263d4b5abf0bcbd3cf0deb26b1e8596f2a271d22e48934c7"},
"floki": {:hex, :floki, "0.35.2", "87f8c75ed8654b9635b311774308b2760b47e9a579dabf2e4d5f1e1d42c39e0b", [:mix], [], "hexpm", "6b05289a8e9eac475f644f09c2e4ba7e19201fd002b89c28c1293e7bd16773d9"},
@@ -22,7 +23,9 @@
"mint": {:hex, :mint, "1.5.2", "4805e059f96028948870d23d7783613b7e6b0e2fb4e98d720383852a760067fd", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "d77d9e9ce4eb35941907f1d3df38d8f750c357865353e21d335bdcdf6d892a02"},
"mox": {:hex, :mox, "1.1.0", "0f5e399649ce9ab7602f72e718305c0f9cdc351190f72844599545e4996af73c", [:mix], [], "hexpm", "d44474c50be02d5b72131070281a5d3895c0e7a95c780e90bc0cfe712f633a13"},
"nimble_options": {:hex, :nimble_options, "1.1.0", "3b31a57ede9cb1502071fade751ab0c7b8dbe75a9a4c2b5bbb0943a690b63172", [:mix], [], "hexpm", "8bbbb3941af3ca9acc7835f5655ea062111c9c27bcac53e004460dfd19008a99"},
+ "nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"},
"nimble_pool": {:hex, :nimble_pool, "1.0.0", "5eb82705d138f4dd4423f69ceb19ac667b3b492ae570c9f5c900bb3d2f50a847", [:mix], [], "hexpm", "80be3b882d2d351882256087078e1b1952a28bf98d0a287be87e4a24a710b67a"},
+ "oban": {:hex, :oban, "2.17.3", "ddfd5710aadcd550d2e174c8d73ce5f1865601418cf54a91775f20443fb832b7", [:mix], [{:ecto_sql, "~> 3.6", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "452eada8bfe0d0fefd0740ab5fa8cf3ef6c375df0b4a3c3805d179022a04738a"},
"phoenix": {:hex, :phoenix, "1.7.10", "02189140a61b2ce85bb633a9b6fd02dff705a5f1596869547aeb2b2b95edd729", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "cf784932e010fd736d656d7fead6a584a4498efefe5b8227e9f383bf15bb79d0"},
"phoenix_ecto": {:hex, :phoenix_ecto, "4.4.3", "86e9878f833829c3f66da03d75254c155d91d72a201eb56ae83482328dc7ca93", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "d36c401206f3011fefd63d04e8ef626ec8791975d9d107f9a0817d426f61ac07"},
"phoenix_html": {:hex, :phoenix_html, "3.3.3", "380b8fb45912b5638d2f1d925a3771b4516b9a78587249cabe394e0a5d579dc9", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "923ebe6fec6e2e3b3e569dfbdc6560de932cd54b000ada0208b5f45024bdd76c"},
diff --git a/package.json b/package.json
index 6f12368..aa41386 100644
--- a/package.json
+++ b/package.json
@@ -1,5 +1,5 @@
{
- "description": "Prettier is used for linting of all files so this package has to live in the root of the project. Use the other package.json files for dependencies.",
+ "description": "Prettier is used for linting of all files so this package has to live in the root of the project. Use the other package.json files for dependencies. Also, look into making this global or something to remove the need for this file.",
"devDependencies": {
"prettier": "3.2.4"
}
diff --git a/priv/repo/migrations/20240122030944_create_media_profiles.exs b/priv/repo/migrations/20240122030944_create_media_profiles.exs
new file mode 100644
index 0000000..5997a44
--- /dev/null
+++ b/priv/repo/migrations/20240122030944_create_media_profiles.exs
@@ -0,0 +1,14 @@
+defmodule Pinchflat.Repo.Migrations.CreateMediaProfiles do
+ use Ecto.Migration
+
+ def change do
+ create table(:media_profiles) do
+ add :name, :string, null: false
+ add :output_path_template, :string, null: false
+
+ timestamps(type: :utc_datetime)
+ end
+
+ create unique_index(:media_profiles, [:name])
+ end
+end
diff --git a/priv/repo/migrations/20240123174417_create_channels.exs b/priv/repo/migrations/20240123174417_create_channels.exs
new file mode 100644
index 0000000..4430c3d
--- /dev/null
+++ b/priv/repo/migrations/20240123174417_create_channels.exs
@@ -0,0 +1,17 @@
+defmodule Pinchflat.Repo.Migrations.CreateChannels do
+ use Ecto.Migration
+
+ def change do
+ create table(:channels) do
+ add :name, :string, null: false
+ add :channel_id, :string, null: false
+ add :original_url, :string, null: false
+ add :media_profile_id, references(:media_profiles, on_delete: :restrict), null: false
+
+ timestamps(type: :utc_datetime)
+ end
+
+ create index(:channels, [:media_profile_id])
+ create unique_index(:channels, [:channel_id, :media_profile_id])
+ end
+end
diff --git a/priv/repo/migrations/20240125025325_create_media_items.exs b/priv/repo/migrations/20240125025325_create_media_items.exs
new file mode 100644
index 0000000..cfaa25f
--- /dev/null
+++ b/priv/repo/migrations/20240125025325_create_media_items.exs
@@ -0,0 +1,17 @@
+defmodule Pinchflat.Repo.Migrations.CreateMediaItems do
+ use Ecto.Migration
+
+ def change do
+ create table(:media_items) do
+ add :media_id, :string, null: false
+ add :title, :string
+ add :video_filepath, :string
+ add :channel_id, references(:channels, on_delete: :restrict), null: false
+
+ timestamps(type: :utc_datetime)
+ end
+
+ create index(:media_items, [:channel_id])
+ create unique_index(:media_items, [:media_id, :channel_id])
+ end
+end
diff --git a/priv/repo/migrations/20240125043813_add_oban_jobs_table.exs b/priv/repo/migrations/20240125043813_add_oban_jobs_table.exs
new file mode 100644
index 0000000..8044fc0
--- /dev/null
+++ b/priv/repo/migrations/20240125043813_add_oban_jobs_table.exs
@@ -0,0 +1,13 @@
+defmodule Pinchflat.Repo.Migrations.AddObanJobsTable do
+ use Ecto.Migration
+
+ def up do
+ Oban.Migration.up(version: 11)
+ end
+
+ # We specify `version: 1` in `down`, ensuring that we'll roll all the way back down if
+ # necessary, regardless of which version we've migrated `up` to.
+ def down do
+ Oban.Migration.down(version: 1)
+ end
+end
diff --git a/priv/repo/migrations/20240125165519_add_index_frequency_to_channels.exs b/priv/repo/migrations/20240125165519_add_index_frequency_to_channels.exs
new file mode 100644
index 0000000..c03b25b
--- /dev/null
+++ b/priv/repo/migrations/20240125165519_add_index_frequency_to_channels.exs
@@ -0,0 +1,9 @@
+defmodule Pinchflat.Repo.Migrations.AddIndexFrequencyToChannels do
+ use Ecto.Migration
+
+ def change do
+ alter table(:channels) do
+ add :index_frequency_minutes, :integer, default: 60 * 24, null: false
+ end
+ end
+end
diff --git a/priv/repo/migrations/20240125212753_create_tasks.exs b/priv/repo/migrations/20240125212753_create_tasks.exs
new file mode 100644
index 0000000..7a7b5e3
--- /dev/null
+++ b/priv/repo/migrations/20240125212753_create_tasks.exs
@@ -0,0 +1,16 @@
+defmodule Pinchflat.Repo.Migrations.CreateTasks do
+ use Ecto.Migration
+
+ def change do
+ create table(:tasks) do
+ add :job_id, references(:oban_jobs, on_delete: :delete_all), null: false
+ # `restrict` because we need to be sure to delete pending tasks when a channel is deleted
+ add :channel_id, references(:channels, on_delete: :restrict), null: true
+
+ timestamps(type: :utc_datetime)
+ end
+
+ create index(:tasks, [:job_id])
+ create index(:tasks, [:channel_id])
+ end
+end
diff --git a/priv/repo/migrations/20240129015810_create_media_metadata.exs b/priv/repo/migrations/20240129015810_create_media_metadata.exs
new file mode 100644
index 0000000..bd7e49f
--- /dev/null
+++ b/priv/repo/migrations/20240129015810_create_media_metadata.exs
@@ -0,0 +1,15 @@
+defmodule Pinchflat.Repo.Migrations.CreateMediaMetadata do
+ use Ecto.Migration
+
+ def change do
+ create table(:media_metadata) do
+ add :client_response, :jsonb, null: false
+ add :media_item_id, references(:media_items, on_delete: :delete_all), null: false
+
+ timestamps(type: :utc_datetime)
+ end
+
+ create unique_index(:media_metadata, [:media_item_id])
+ create index(:media_metadata, [:client_response], using: :gin)
+ end
+end
diff --git a/priv/repo/migrations/20240130161316_add_media_item_to_tasks.exs b/priv/repo/migrations/20240130161316_add_media_item_to_tasks.exs
new file mode 100644
index 0000000..bd8a9c9
--- /dev/null
+++ b/priv/repo/migrations/20240130161316_add_media_item_to_tasks.exs
@@ -0,0 +1,12 @@
+defmodule Pinchflat.Repo.Migrations.AddMediaItemToTasks do
+ use Ecto.Migration
+
+ def change do
+ alter table(:tasks) do
+ # `restrict` because we need to be sure to delete pending tasks when a channel is deleted
+ add :media_item_id, references(:media_items, on_delete: :restrict), null: true
+ end
+
+ create index(:tasks, [:media_item_id])
+ end
+end
diff --git a/test/pinchflat/downloader_backends/yt_dlp/video_collection_test.exs b/test/pinchflat/downloader_backends/yt_dlp/video_collection_test.exs
deleted file mode 100644
index 08296fc..0000000
--- a/test/pinchflat/downloader_backends/yt_dlp/video_collection_test.exs
+++ /dev/null
@@ -1,44 +0,0 @@
-defmodule Pinchflat.DownloaderBackends.YtDlp.VideoCollectionTest do
- use ExUnit.Case, async: true
- import Mox
-
- alias Pinchflat.DownloaderBackends.YtDlp.VideoCollection, as: VideoCollection
-
- @channel_url "https://www.youtube.com/@TheUselessTrials"
-
- setup :verify_on_exit!
-
- describe "get_video_ids/2" do
- test "returns a list of video ids with no blank elements" do
- expect(CommandRunnerMock, :run, fn _url, _opts -> {:ok, "id1\nid2\n\nid3\n"} end)
-
- assert {:ok, ["id1", "id2", "id3"]} = VideoCollection.get_video_ids(@channel_url)
- end
-
- test "it passes the expected default args" do
- expect(CommandRunnerMock, :run, fn _url, opts ->
- assert opts == [:simulate, :skip_download, :get_id]
-
- {:ok, ""}
- end)
-
- assert {:ok, _} = VideoCollection.get_video_ids(@channel_url)
- end
-
- test "it passes the expected custom args" do
- expect(CommandRunnerMock, :run, fn _url, opts ->
- assert opts == [:custom_arg, :simulate, :skip_download, :get_id]
-
- {:ok, ""}
- end)
-
- assert {:ok, _} = VideoCollection.get_video_ids(@channel_url, [:custom_arg])
- end
-
- test "returns the error straight through when the command fails" do
- expect(CommandRunnerMock, :run, fn _url, _opts -> {:error, "Big issue", 1} end)
-
- assert {:error, "Big issue", 1} = VideoCollection.get_video_ids(@channel_url)
- end
- end
-end
diff --git a/test/pinchflat/media_client/backends/yt_dlp/channel_test.exs b/test/pinchflat/media_client/backends/yt_dlp/channel_test.exs
new file mode 100644
index 0000000..3f9d52f
--- /dev/null
+++ b/test/pinchflat/media_client/backends/yt_dlp/channel_test.exs
@@ -0,0 +1,45 @@
+defmodule Pinchflat.MediaClient.Backends.YtDlp.ChannelTest do
+ use ExUnit.Case, async: true
+ import Mox
+
+ alias Pinchflat.MediaClient.ChannelDetails
+ alias Pinchflat.MediaClient.Backends.YtDlp.Channel
+
+ @channel_url "https://www.youtube.com/c/TheUselessTrials"
+
+ setup :verify_on_exit!
+
+ describe "get_channel_details/1" do
+ test "it returns a %ChannelDetails{} with data on success" do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot ->
+ {:ok, "{\"channel\": \"TheUselessTrials\", \"channel_id\": \"UCQH2\"}"}
+ end)
+
+ assert {:ok, res} = Channel.get_channel_details(@channel_url)
+ assert %ChannelDetails{id: "UCQH2", name: "TheUselessTrials"} = res
+ end
+
+ test "it passes the expected args to the backend runner" do
+ expect(YtDlpRunnerMock, :run, fn @channel_url, opts, ot ->
+ assert opts == [playlist_end: 1]
+ assert ot == "%(.{channel,channel_id})j"
+
+ {:ok, "{}"}
+ end)
+
+ assert {:ok, _} = Channel.get_channel_details(@channel_url)
+ end
+
+ test "it returns an error if the runner returns an error" do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> {:error, "Big issue", 1} end)
+
+ assert {:error, "Big issue", 1} = Channel.get_channel_details(@channel_url)
+ end
+
+ test "it returns an error if the output is not JSON" do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> {:ok, "Not JSON"} end)
+
+ assert {:error, %Jason.DecodeError{}} = Channel.get_channel_details(@channel_url)
+ end
+ end
+end
diff --git a/test/pinchflat/downloader_backends/yt_dlp/command_runner_test.exs b/test/pinchflat/media_client/backends/yt_dlp/command_runner_test.exs
similarity index 62%
rename from test/pinchflat/downloader_backends/yt_dlp/command_runner_test.exs
rename to test/pinchflat/media_client/backends/yt_dlp/command_runner_test.exs
index 02e18c2..d63bfcc 100644
--- a/test/pinchflat/downloader_backends/yt_dlp/command_runner_test.exs
+++ b/test/pinchflat/media_client/backends/yt_dlp/command_runner_test.exs
@@ -1,10 +1,10 @@
-defmodule Pinchflat.DownloaderBackends.YtDlp.CommandRunnerTest do
+defmodule Pinchflat.MediaClient.Backends.YtDlp.CommandRunnerTest do
use ExUnit.Case, async: true
- alias Pinchflat.DownloaderBackends.YtDlp.CommandRunner, as: Runner
+ alias Pinchflat.MediaClient.Backends.YtDlp.CommandRunner, as: Runner
@original_executable Application.compile_env(:pinchflat, :yt_dlp_executable)
- @video_url "https://www.youtube.com/watch?v=9bZkp7q19f0"
+ @video_url "https://www.youtube.com/watch?v=-LHXuyzpex0"
setup do
on_exit(&reset_executable/0)
@@ -12,50 +12,49 @@ defmodule Pinchflat.DownloaderBackends.YtDlp.CommandRunnerTest do
describe "run/2" do
test "it returns the output and status when the command succeeds" do
- assert {:ok, _output} = Runner.run(@video_url, [])
+ assert {:ok, _output} = Runner.run(@video_url, [], "")
end
test "it converts symbol k-v arg keys to kebab case" do
- assert {:ok, output} = Runner.run(@video_url, buffer_size: 1024)
+ assert {:ok, output} = Runner.run(@video_url, [buffer_size: 1024], "")
assert String.contains?(output, "--buffer-size 1024")
end
test "it keeps string k-v arg keys untouched" do
- assert {:ok, output} = Runner.run(@video_url, [{"--under_score", 1024}])
+ assert {:ok, output} = Runner.run(@video_url, [{"--under_score", 1024}], "")
assert String.contains?(output, "--under_score 1024")
end
test "it converts symbol arg keys to kebab case" do
- assert {:ok, output} = Runner.run(@video_url, [:ignore_errors])
+ assert {:ok, output} = Runner.run(@video_url, [:ignore_errors], "")
assert String.contains?(output, "--ignore-errors")
end
test "it keeps string arg keys untouched" do
- assert {:ok, output} = Runner.run(@video_url, ["-v"])
+ assert {:ok, output} = Runner.run(@video_url, ["-v"], "")
assert String.contains?(output, "-v")
refute String.contains?(output, "--v")
end
- test "it places arg keys (flags) at the beginning of the command" do
- assert {:ok, output} =
- Runner.run(@video_url, [{"--under_score", 1024}, :ignore_errors])
+ test "it includes the video url as the first argument" do
+ assert {:ok, output} = Runner.run(@video_url, [:ignore_errors], "")
- assert String.contains?(output, "--ignore-errors --under_score 1024")
+ assert String.contains?(output, "#{@video_url} --ignore-errors")
end
- test "it includes the video url as the last argument" do
- assert {:ok, output} = Runner.run(@video_url, [:ignore_errors])
+ test "it automatically includes the --print-to-file flag" do
+ assert {:ok, output} = Runner.run(@video_url, [], "%(id)s")
- assert String.contains?(output, "--ignore-errors #{@video_url}\n")
+ assert String.contains?(output, "--print-to-file %(id)s /tmp/")
end
test "it returns the output and status when the command fails" do
wrap_executable("/bin/false", fn ->
- assert {:error, "", 1} = Runner.run(@video_url, [])
+ assert {:error, "", 1} = Runner.run(@video_url, [], "")
end)
end
end
diff --git a/test/pinchflat/media_client/backends/yt_dlp/metadata_parser_test.exs b/test/pinchflat/media_client/backends/yt_dlp/metadata_parser_test.exs
new file mode 100644
index 0000000..7bbcb18
--- /dev/null
+++ b/test/pinchflat/media_client/backends/yt_dlp/metadata_parser_test.exs
@@ -0,0 +1,45 @@
+defmodule Pinchflat.MediaClient.Backends.YtDlp.MediaParserTest do
+ use ExUnit.Case, async: true
+
+ alias Pinchflat.MediaClient.Backends.YtDlp.MetadataParser, as: Parser
+
+ setup do
+ json_filepath =
+ Path.join([
+ File.cwd!(),
+ "test",
+ "support",
+ "files",
+ "media_metadata.json"
+ ])
+
+ {:ok, file_body} = File.read(json_filepath)
+ {:ok, parsed_json} = Phoenix.json_library().decode(file_body)
+
+ {:ok,
+ %{
+ metadata: parsed_json
+ }}
+ end
+
+ describe "parse_for_media_item/1" do
+ test "it extracts the video filepath", %{metadata: metadata} do
+ result = Parser.parse_for_media_item(metadata)
+
+ assert String.contains?(result.video_filepath, "bwRHIkYqYJo")
+ assert String.ends_with?(result.video_filepath, ".mkv")
+ end
+
+ test "it extracts the title", %{metadata: metadata} do
+ result = Parser.parse_for_media_item(metadata)
+
+ assert result.title == "Trying to Wheelie Without the Rear Brake"
+ end
+
+ test "it returns the metadata as a map", %{metadata: metadata} do
+ result = Parser.parse_for_media_item(metadata)
+
+ assert result.metadata.client_response == metadata
+ end
+ end
+end
diff --git a/test/pinchflat/media_client/backends/yt_dlp/output_path_builder_test.exs b/test/pinchflat/media_client/backends/yt_dlp/output_path_builder_test.exs
new file mode 100644
index 0000000..4c67a44
--- /dev/null
+++ b/test/pinchflat/media_client/backends/yt_dlp/output_path_builder_test.exs
@@ -0,0 +1,25 @@
+defmodule Pinchflat.MediaClient.Backends.YtDlp.OutputPathBuilderTest do
+ use ExUnit.Case, async: true
+
+ alias Pinchflat.Profiles.Options.YtDlp.OutputPathBuilder
+
+ describe "build/1" do
+ test "it expands 'standard' curly brace variables in the template" do
+ assert {:ok, res} = OutputPathBuilder.build("/videos/{{ title }}.{{ ext }}")
+
+ assert res == "/videos/%(title)S.%(ext)S"
+ end
+
+ test "it expands 'custom' curly brace variables in the template" do
+ assert {:ok, res} = OutputPathBuilder.build("/videos/{{ upload_year }}.{{ ext }}")
+
+ assert res == "/videos/%(upload_date>%Y)S.%(ext)S"
+ end
+
+ test "it leaves yt-dlp variables alone" do
+ assert {:ok, res} = OutputPathBuilder.build("/videos/%(title)s.%(ext)s")
+
+ assert res == "/videos/%(title)s.%(ext)s"
+ end
+ end
+end
diff --git a/test/pinchflat/media_client/backends/yt_dlp/video_collection_test.exs b/test/pinchflat/media_client/backends/yt_dlp/video_collection_test.exs
new file mode 100644
index 0000000..3acae20
--- /dev/null
+++ b/test/pinchflat/media_client/backends/yt_dlp/video_collection_test.exs
@@ -0,0 +1,49 @@
+defmodule Pinchflat.MediaClient.Backends.YtDlp.VideoCollectionTest do
+ use ExUnit.Case, async: true
+ import Mox
+
+ alias Pinchflat.MediaClient.Backends.YtDlp.VideoCollection
+
+ @channel_url "https://www.youtube.com/@TheUselessTrials"
+
+ defmodule VideoCollectionUser do
+ use VideoCollection
+ end
+
+ setup :verify_on_exit!
+
+ describe "get_video_ids/2" do
+ test "returns a list of video ids with no blank elements" do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> {:ok, "id1\nid2\n\nid3\n"} end)
+
+ assert {:ok, ["id1", "id2", "id3"]} = VideoCollectionUser.get_video_ids(@channel_url)
+ end
+
+ test "it passes the expected default args" do
+ expect(YtDlpRunnerMock, :run, fn _url, opts, ot ->
+ assert opts == [:simulate, :skip_download]
+ assert ot == "%(id)s"
+
+ {:ok, ""}
+ end)
+
+ assert {:ok, _} = VideoCollectionUser.get_video_ids(@channel_url)
+ end
+
+ test "it passes the expected custom args" do
+ expect(YtDlpRunnerMock, :run, fn _url, opts, _ot ->
+ assert opts == [:custom_arg, :simulate, :skip_download]
+
+ {:ok, ""}
+ end)
+
+ assert {:ok, _} = VideoCollectionUser.get_video_ids(@channel_url, [:custom_arg])
+ end
+
+ test "returns the error straight through when the command fails" do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> {:error, "Big issue", 1} end)
+
+ assert {:error, "Big issue", 1} = VideoCollectionUser.get_video_ids(@channel_url)
+ end
+ end
+end
diff --git a/test/pinchflat/media_client/backends/yt_dlp/video_test.exs b/test/pinchflat/media_client/backends/yt_dlp/video_test.exs
new file mode 100644
index 0000000..841fdb0
--- /dev/null
+++ b/test/pinchflat/media_client/backends/yt_dlp/video_test.exs
@@ -0,0 +1,56 @@
+defmodule Pinchflat.MediaClient.Backends.YtDlp.VideoTest do
+ use Pinchflat.DataCase
+ import Mox
+
+ alias Pinchflat.MediaClient.Backends.YtDlp.Video
+
+ @video_url "https://www.youtube.com/watch?v=TiZPUDkDYbk"
+
+ setup :verify_on_exit!
+
+ # expect(YtDlpRunnerMock, :run, fn _url, [_, _, json_output_path | _] ->
+ # copy_metadata(json_output_path)
+
+ # {:ok, ""}
+ # end)
+
+ describe "download/2" do
+ test "it calls the backend runner with the expected arguments" do
+ expect(YtDlpRunnerMock, :run, fn @video_url, opts, ot ->
+ assert [:no_simulate] = opts
+ assert "after_move:%()j" = ot
+
+ {:ok, render_metadata(:media_metadata)}
+ end)
+
+ assert {:ok, _} = Video.download(@video_url)
+ end
+
+ test "it passes along additional options" do
+ expect(YtDlpRunnerMock, :run, fn _url, opts, _ot ->
+ assert [:no_simulate, :custom_arg] = opts
+
+ {:ok, "{}"}
+ end)
+
+ assert {:ok, _} = Video.download(@video_url, [:custom_arg])
+ end
+
+ test "it parses and returns the generated file as JSON" do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot ->
+ {:ok, render_metadata(:media_metadata)}
+ end)
+
+ assert {:ok, %{"title" => "Trying to Wheelie Without the Rear Brake"}} =
+ Video.download(@video_url)
+ end
+
+ test "it returns errors" do
+ expect(YtDlpRunnerMock, :run, fn _url, _opt, _ot ->
+ {:error, "something"}
+ end)
+
+ assert {:error, "something"} = Video.download(@video_url)
+ end
+ end
+end
diff --git a/test/pinchflat/media_client/channel_details_test.exs b/test/pinchflat/media_client/channel_details_test.exs
new file mode 100644
index 0000000..920fc02
--- /dev/null
+++ b/test/pinchflat/media_client/channel_details_test.exs
@@ -0,0 +1,60 @@
+defmodule Pinchflat.MediaClient.ChannelDetailsTest do
+ use ExUnit.Case, async: true
+ import Mox
+
+ alias Pinchflat.MediaClient.ChannelDetails
+
+ @channel_url "https://www.youtube.com/c/TheUselessTrials"
+
+ setup :verify_on_exit!
+
+ describe "new/2" do
+ test "it returns a struct with the given values" do
+ assert %ChannelDetails{id: "UCQH2", name: "TheUselessTrials"} =
+ ChannelDetails.new("UCQH2", "TheUselessTrials")
+ end
+ end
+
+ describe "get_channel_details/2" do
+ test "it passes the expected arguments to the backend" do
+ expect(YtDlpRunnerMock, :run, fn @channel_url, opts, ot ->
+ assert opts == [playlist_end: 1]
+ assert ot == "%(.{channel,channel_id})j"
+
+ {:ok, "{\"channel\": \"TheUselessTrials\", \"channel_id\": \"UCQH2\"}"}
+ end)
+
+ assert {:ok, _} = ChannelDetails.get_channel_details(@channel_url)
+ end
+
+ test "it returns a struct composed of the returned data" do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot ->
+ {:ok, "{\"channel\": \"TheUselessTrials\", \"channel_id\": \"UCQH2\"}"}
+ end)
+
+ assert {:ok, res} = ChannelDetails.get_channel_details(@channel_url)
+ assert %ChannelDetails{id: "UCQH2", name: "TheUselessTrials"} = res
+ end
+ end
+
+ describe "get_video_ids/2" do
+ test "it passes the expected arguments to the backend" do
+ expect(YtDlpRunnerMock, :run, fn @channel_url, opts, ot ->
+ assert opts == [:simulate, :skip_download]
+ assert ot == "%(id)s"
+
+ {:ok, ""}
+ end)
+
+ assert {:ok, _} = ChannelDetails.get_video_ids(@channel_url)
+ end
+
+ test "it returns a list of strings" do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot ->
+ {:ok, "video1\nvideo2\nvideo3"}
+ end)
+
+ assert {:ok, ["video1", "video2", "video3"]} = ChannelDetails.get_video_ids(@channel_url)
+ end
+ end
+end
diff --git a/test/pinchflat/media_client/video_downloader_test.exs b/test/pinchflat/media_client/video_downloader_test.exs
new file mode 100644
index 0000000..77b2c44
--- /dev/null
+++ b/test/pinchflat/media_client/video_downloader_test.exs
@@ -0,0 +1,61 @@
+defmodule Pinchflat.MediaClient.VideoDownloaderTest do
+ use Pinchflat.DataCase
+ import Mox
+ import Pinchflat.MediaFixtures
+
+ alias Pinchflat.MediaClient.VideoDownloader
+
+ setup :verify_on_exit!
+
+ setup do
+ media_item =
+ Repo.preload(
+ media_item_fixture(%{title: nil, video_filepath: nil}),
+ [:metadata, channel: :media_profile]
+ )
+
+ {:ok, %{media_item: media_item}}
+ end
+
+ describe "download_for_media_item/3" do
+ test "it calls the backend runner", %{media_item: media_item} do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, ot ->
+ assert ot == "after_move:%()j"
+
+ {:ok, render_metadata(:media_metadata)}
+ end)
+
+ assert {:ok, _} = VideoDownloader.download_for_media_item(media_item)
+ end
+
+ test "it writes attributes to the media item", %{media_item: media_item} do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot ->
+ {:ok, render_metadata(:media_metadata)}
+ end)
+
+ assert %{video_filepath: nil, title: nil} = media_item
+ assert {:ok, updated_media_item} = VideoDownloader.download_for_media_item(media_item)
+ assert updated_media_item.video_filepath
+ assert updated_media_item.title
+ end
+
+ test "it saves the metadata to the database", %{media_item: media_item} do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot ->
+ {:ok, render_metadata(:media_metadata)}
+ end)
+
+ assert is_nil(media_item.metadata)
+ assert {:ok, updated_media_item} = VideoDownloader.download_for_media_item(media_item)
+ assert updated_media_item.metadata
+ assert is_map(updated_media_item.metadata.client_response)
+ end
+
+ test "errors are passed through", %{media_item: media_item} do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot ->
+ {:error, :some_error}
+ end)
+
+ assert {:error, :some_error} = VideoDownloader.download_for_media_item(media_item)
+ end
+ end
+end
diff --git a/test/pinchflat/media_source_test.exs b/test/pinchflat/media_source_test.exs
new file mode 100644
index 0000000..f46cfb3
--- /dev/null
+++ b/test/pinchflat/media_source_test.exs
@@ -0,0 +1,313 @@
+defmodule Pinchflat.MediaSourceTest do
+ use Pinchflat.DataCase
+ import Mox
+ import Pinchflat.TasksFixtures
+ import Pinchflat.ProfilesFixtures
+ import Pinchflat.MediaSourceFixtures
+
+ alias Pinchflat.MediaSource
+ alias Pinchflat.Media.MediaItem
+ alias Pinchflat.MediaSource.Channel
+ alias Pinchflat.Workers.MediaIndexingWorker
+
+ @invalid_channel_attrs %{name: nil, channel_id: nil}
+
+ setup :verify_on_exit!
+
+ describe "list_channels/0" do
+ test "it returns all channels" do
+ channel = channel_fixture()
+ assert MediaSource.list_channels() == [channel]
+ end
+ end
+
+ describe "get_channel!/1" do
+ test "it returns the channel with given id" do
+ channel = channel_fixture()
+ assert MediaSource.get_channel!(channel.id) == channel
+ end
+ end
+
+ describe "create_channel/1" do
+ test "creates a channel and adds name + ID from runner response" do
+ expect(YtDlpRunnerMock, :run, &runner_function_mock/3)
+
+ valid_attrs = %{
+ media_profile_id: media_profile_fixture().id,
+ original_url: "https://www.youtube.com/channel/abc123"
+ }
+
+ assert {:ok, %Channel{} = channel} = MediaSource.create_channel(valid_attrs)
+ assert channel.name == "some name"
+ assert String.starts_with?(channel.channel_id, "some_channel_id_")
+ end
+
+ test "creation with invalid data returns error changeset" do
+ assert {:error, %Ecto.Changeset{}} = MediaSource.create_channel(@invalid_channel_attrs)
+ end
+
+ test "creation enforces uniqueness of channel_id scoped to the media_profile" do
+ expect(YtDlpRunnerMock, :run, 2, fn _url, _opts, _ot ->
+ {:ok,
+ Phoenix.json_library().encode!(%{
+ channel: "some name",
+ channel_id: "some_channel_id_12345678"
+ })}
+ end)
+
+ valid_once_attrs = %{
+ media_profile_id: media_profile_fixture().id,
+ original_url: "https://www.youtube.com/channel/abc123"
+ }
+
+ assert {:ok, %Channel{}} = MediaSource.create_channel(valid_once_attrs)
+ assert {:error, %Ecto.Changeset{}} = MediaSource.create_channel(valid_once_attrs)
+ end
+
+ test "creation lets you duplicate channel_ids as long as the media profile is different" do
+ expect(YtDlpRunnerMock, :run, 2, fn _url, _opts, _ot ->
+ {:ok,
+ Phoenix.json_library().encode!(%{
+ channel: "some name",
+ channel_id: "some_channel_id_12345678"
+ })}
+ end)
+
+ valid_attrs = %{
+ name: "some name",
+ original_url: "https://www.youtube.com/channel/abc123"
+ }
+
+ channel_1_attrs = Map.merge(valid_attrs, %{media_profile_id: media_profile_fixture().id})
+ channel_2_attrs = Map.merge(valid_attrs, %{media_profile_id: media_profile_fixture().id})
+
+ assert {:ok, %Channel{}} = MediaSource.create_channel(channel_1_attrs)
+ assert {:ok, %Channel{}} = MediaSource.create_channel(channel_2_attrs)
+ end
+
+ test "creation will schedule the indexing task" do
+ expect(YtDlpRunnerMock, :run, &runner_function_mock/3)
+
+ valid_attrs = %{
+ media_profile_id: media_profile_fixture().id,
+ original_url: "https://www.youtube.com/channel/abc123"
+ }
+
+ assert {:ok, %Channel{} = channel} = MediaSource.create_channel(valid_attrs)
+
+ assert_enqueued(worker: MediaIndexingWorker, args: %{"id" => channel.id})
+ end
+ end
+
+ describe "index_media_items/1" do
+ setup do
+ stub(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> {:ok, "video1\nvideo2\nvideo3"} end)
+
+ {:ok, [channel: channel_fixture()]}
+ end
+
+ test "it creates a media_item record for each media ID returned", %{channel: channel} do
+ assert media_items = MediaSource.index_media_items(channel)
+
+ assert Enum.count(media_items) == 3
+ assert ["video1", "video2", "video3"] == Enum.map(media_items, & &1.media_id)
+ assert Enum.all?(media_items, fn %MediaItem{} -> true end)
+ end
+
+ test "it attaches all media_items to the given channel", %{channel: channel} do
+ channel_id = channel.id
+ assert media_items = MediaSource.index_media_items(channel)
+
+ assert Enum.count(media_items) == 3
+ assert Enum.all?(media_items, fn %MediaItem{channel_id: ^channel_id} -> true end)
+ end
+
+ test "it won't duplicate media_items based on media_id and channel", %{channel: channel} do
+ _first_run = MediaSource.index_media_items(channel)
+ _duplicate_run = MediaSource.index_media_items(channel)
+
+ media_items = Repo.preload(channel, :media_items).media_items
+ assert Enum.count(media_items) == 3
+ end
+
+ test "it can duplicate media_ids for different channels", %{channel: channel} do
+ other_channel = channel_fixture()
+
+ media_items = MediaSource.index_media_items(channel)
+ media_items_other_channel = MediaSource.index_media_items(other_channel)
+
+ assert Enum.count(media_items) == 3
+ assert Enum.count(media_items_other_channel) == 3
+
+ assert Enum.map(media_items, & &1.media_id) ==
+ Enum.map(media_items_other_channel, & &1.media_id)
+ end
+
+ test "it returns a list of media_items or changesets", %{channel: channel} do
+ first_run = MediaSource.index_media_items(channel)
+ duplicate_run = MediaSource.index_media_items(channel)
+
+ assert Enum.all?(first_run, fn %MediaItem{} -> true end)
+ assert Enum.all?(duplicate_run, fn %Ecto.Changeset{} -> true end)
+ end
+ end
+
+ describe "update_channel/2" do
+ test "updates with valid data updates the channel" do
+ channel = channel_fixture()
+ update_attrs = %{name: "some updated name"}
+
+ assert {:ok, %Channel{} = channel} = MediaSource.update_channel(channel, update_attrs)
+ assert channel.name == "some updated name"
+ end
+
+ test "updating the original_url will re-fetch the channel details" do
+ expect(YtDlpRunnerMock, :run, &runner_function_mock/3)
+
+ channel = channel_fixture()
+ update_attrs = %{original_url: "https://www.youtube.com/channel/abc123"}
+
+ assert {:ok, %Channel{} = channel} = MediaSource.update_channel(channel, update_attrs)
+ assert channel.name == "some name"
+ assert String.starts_with?(channel.channel_id, "some_channel_id_")
+ end
+
+ test "not updating the original_url will not re-fetch the channel details" do
+ expect(YtDlpRunnerMock, :run, 0, &runner_function_mock/3)
+
+ channel = channel_fixture()
+ update_attrs = %{name: "some updated name"}
+
+ assert {:ok, %Channel{}} = MediaSource.update_channel(channel, update_attrs)
+ end
+
+ test "updating the index frequency will re-schedule the indexing task" do
+ channel = channel_fixture()
+ update_attrs = %{index_frequency_minutes: 123}
+
+ assert {:ok, %Channel{} = channel} = MediaSource.update_channel(channel, update_attrs)
+ assert channel.index_frequency_minutes == 123
+ assert_enqueued(worker: MediaIndexingWorker, args: %{"id" => channel.id})
+ end
+
+ test "not updating the index frequency will not re-schedule the indexing task" do
+ channel = channel_fixture()
+ update_attrs = %{name: "some updated name"}
+
+ assert {:ok, %Channel{}} = MediaSource.update_channel(channel, update_attrs)
+ refute_enqueued(worker: MediaIndexingWorker, args: %{"id" => channel.id})
+ end
+
+ test "updates with invalid data returns error changeset" do
+ channel = channel_fixture()
+
+ assert {:error, %Ecto.Changeset{}} =
+ MediaSource.update_channel(channel, @invalid_channel_attrs)
+
+ assert channel == MediaSource.get_channel!(channel.id)
+ end
+ end
+
+ describe "delete_channel/1" do
+ test "it deletes the channel" do
+ channel = channel_fixture()
+ assert {:ok, %Channel{}} = MediaSource.delete_channel(channel)
+ assert_raise Ecto.NoResultsError, fn -> MediaSource.get_channel!(channel.id) end
+ end
+
+ test "it returns a channel changeset" do
+ channel = channel_fixture()
+ assert %Ecto.Changeset{} = MediaSource.change_channel(channel)
+ end
+
+ test "deletion also deletes all associated tasks" do
+ channel = channel_fixture()
+ task = task_fixture(channel_id: channel.id)
+
+ assert {:ok, %Channel{}} = MediaSource.delete_channel(channel)
+ assert_raise Ecto.NoResultsError, fn -> Repo.reload!(task) end
+ end
+ end
+
+ describe "change_channel/2" do
+ test "it returns a changeset" do
+ channel = channel_fixture()
+
+ assert %Ecto.Changeset{} = MediaSource.change_channel(channel)
+ end
+ end
+
+ describe "change_channel_from_url/2" do
+ test "it returns a changeset" do
+ stub(YtDlpRunnerMock, :run, &runner_function_mock/3)
+ channel = channel_fixture()
+
+ assert %Ecto.Changeset{} = MediaSource.change_channel_from_url(channel, %{})
+ end
+
+ test "it does not fetch channel details if the original_url isn't in the changeset" do
+ expect(YtDlpRunnerMock, :run, 0, &runner_function_mock/3)
+
+ changeset = MediaSource.change_channel_from_url(%Channel{}, %{name: "some updated name"})
+
+ assert %Ecto.Changeset{} = changeset
+ end
+
+ test "it fetches channel details if the original_url is in the changeset" do
+ expect(YtDlpRunnerMock, :run, &runner_function_mock/3)
+
+ changeset =
+ MediaSource.change_channel_from_url(%Channel{}, %{
+ original_url: "https://www.youtube.com/channel/abc123"
+ })
+
+ assert %Ecto.Changeset{} = changeset
+ end
+
+ test "it adds channel details to the changeset, keeping the orignal details" do
+ expect(YtDlpRunnerMock, :run, &runner_function_mock/3)
+
+ media_profile = media_profile_fixture()
+ media_profile_id = media_profile.id
+
+ changeset =
+ MediaSource.change_channel_from_url(%Channel{}, %{
+ original_url: "https://www.youtube.com/channel/abc123",
+ media_profile_id: media_profile.id
+ })
+
+ assert %Ecto.Changeset{} = changeset
+ assert String.starts_with?(changeset.changes.channel_id, "some_channel_id_")
+
+ assert %{
+ name: "some name",
+ media_profile_id: ^media_profile_id,
+ original_url: "https://www.youtube.com/channel/abc123"
+ } = changeset.changes
+ end
+
+ test "it adds an error to the changeset if the runner fails" do
+ expect(YtDlpRunnerMock, :run, 1, fn _url, _opts, _ot ->
+ {:error, "some error", 1}
+ end)
+
+ changeset =
+ MediaSource.change_channel_from_url(%Channel{}, %{
+ original_url: "https://www.youtube.com/channel/abc123"
+ })
+
+ assert %Ecto.Changeset{} = changeset
+ assert errors_on(changeset).original_url == ["could not fetch channel details from URL"]
+ end
+ end
+
+ defp runner_function_mock(_url, _opts, _ot) do
+ {
+ :ok,
+ Phoenix.json_library().encode!(%{
+ channel: "some name",
+ channel_id: "some_channel_id_#{:rand.uniform(1_000_000)}"
+ })
+ }
+ end
+end
diff --git a/test/pinchflat/media_test.exs b/test/pinchflat/media_test.exs
new file mode 100644
index 0000000..d7a99cf
--- /dev/null
+++ b/test/pinchflat/media_test.exs
@@ -0,0 +1,126 @@
+defmodule Pinchflat.MediaTest do
+ use Pinchflat.DataCase
+
+ import Pinchflat.TasksFixtures
+ import Pinchflat.MediaFixtures
+ import Pinchflat.MediaSourceFixtures
+
+ alias Pinchflat.Media
+ alias Pinchflat.Media.MediaItem
+
+ @invalid_attrs %{title: nil, media_id: nil, video_filepath: nil}
+
+ describe "schema" do
+ test "media_metadata is deleted when media_item is deleted" do
+ media_item = media_item_fixture(%{metadata: %{client_response: %{foo: "bar"}}})
+ metadata = media_item.metadata
+ assert {:ok, %MediaItem{}} = Media.delete_media_item(media_item)
+
+ assert_raise Ecto.NoResultsError, fn ->
+ Repo.reload!(metadata)
+ end
+ end
+ end
+
+ describe "list_media_items/0" do
+ test "it returns all media_items" do
+ media_item = media_item_fixture()
+ assert Media.list_media_items() == [media_item]
+ end
+ end
+
+ describe "list_pending_media_items_for/1" do
+ test "it returns pending media_items for a given channel" do
+ channel = channel_fixture()
+ media_item = media_item_fixture(%{channel_id: channel.id, video_filepath: nil})
+
+ assert Media.list_pending_media_items_for(channel) == [media_item]
+ end
+
+ test "it does not return media_items with video_filepath" do
+ channel = channel_fixture()
+
+ _media_item =
+ media_item_fixture(%{
+ channel_id: channel.id,
+ video_filepath: "/video/#{Faker.File.file_name(:video)}"
+ })
+
+ assert Media.list_pending_media_items_for(channel) == []
+ end
+ end
+
+ describe "get_media_item!/1" do
+ test "it returns the media_item with given id" do
+ media_item = media_item_fixture()
+ assert Media.get_media_item!(media_item.id) == media_item
+ end
+ end
+
+ describe "create_media_item/1" do
+ test "creating with valid data creates a media_item" do
+ valid_attrs = %{
+ media_id: Faker.String.base64(12),
+ title: Faker.Commerce.product_name(),
+ video_filepath: "/video/#{Faker.File.file_name(:video)}",
+ channel_id: channel_fixture().id
+ }
+
+ assert {:ok, %MediaItem{} = media_item} = Media.create_media_item(valid_attrs)
+ assert media_item.title == valid_attrs.title
+ assert media_item.media_id == valid_attrs.media_id
+ assert media_item.video_filepath == valid_attrs.video_filepath
+ end
+
+ test "creating with invalid data returns error changeset" do
+ assert {:error, %Ecto.Changeset{}} = Media.create_media_item(@invalid_attrs)
+ end
+ end
+
+ describe "update_media_item/2" do
+ test "updating with valid data updates the media_item" do
+ media_item = media_item_fixture()
+
+ update_attrs = %{
+ media_id: Faker.String.base64(12),
+ title: Faker.Commerce.product_name(),
+ video_filepath: "/video/#{Faker.File.file_name(:video)}",
+ channel_id: channel_fixture().id
+ }
+
+ assert {:ok, %MediaItem{} = media_item} = Media.update_media_item(media_item, update_attrs)
+ assert media_item.title == update_attrs.title
+ assert media_item.media_id == update_attrs.media_id
+ assert media_item.video_filepath == update_attrs.video_filepath
+ end
+
+ test "updating with invalid data returns error changeset" do
+ media_item = media_item_fixture()
+ assert {:error, %Ecto.Changeset{}} = Media.update_media_item(media_item, @invalid_attrs)
+ assert media_item == Media.get_media_item!(media_item.id)
+ end
+ end
+
+ describe "delete_media_item/1" do
+ test "deletion deletes the media_item" do
+ media_item = media_item_fixture()
+ assert {:ok, %MediaItem{}} = Media.delete_media_item(media_item)
+ assert_raise Ecto.NoResultsError, fn -> Media.get_media_item!(media_item.id) end
+ end
+
+ test "it also deletes attached tasks" do
+ media_item = media_item_fixture()
+ task = task_fixture(%{media_item_id: media_item.id})
+
+ assert {:ok, %MediaItem{}} = Media.delete_media_item(media_item)
+ assert_raise Ecto.NoResultsError, fn -> Repo.reload!(task) end
+ end
+ end
+
+ describe "change_media_item/1" do
+ test "change_media_item/1 returns a media_item changeset" do
+ media_item = media_item_fixture()
+ assert %Ecto.Changeset{} = Media.change_media_item(media_item)
+ end
+ end
+end
diff --git a/test/pinchflat/profiles/options/yt_dlp/option_builder_test.exs b/test/pinchflat/profiles/options/yt_dlp/option_builder_test.exs
new file mode 100644
index 0000000..b274731
--- /dev/null
+++ b/test/pinchflat/profiles/options/yt_dlp/option_builder_test.exs
@@ -0,0 +1,18 @@
+defmodule Pinchflat.Profiles.Options.YtDlp.OptionBuilderTest do
+ use ExUnit.Case, async: true
+
+ alias Pinchflat.Profiles.MediaProfile
+ alias Pinchflat.Profiles.Options.YtDlp.OptionBuilder
+
+ @media_profile %MediaProfile{
+ output_path_template: "{{ title }}.%(ext)s"
+ }
+
+ describe "build/1" do
+ test "it generates an expanded output path based on the given template" do
+ assert {:ok, res} = OptionBuilder.build(@media_profile)
+
+ assert {:output, "/tmp/videos/%(title)S.%(ext)s"} in res
+ end
+ end
+end
diff --git a/test/pinchflat/profiles_test.exs b/test/pinchflat/profiles_test.exs
new file mode 100644
index 0000000..8635750
--- /dev/null
+++ b/test/pinchflat/profiles_test.exs
@@ -0,0 +1,78 @@
+defmodule Pinchflat.ProfilesTest do
+ use Pinchflat.DataCase
+
+ alias Pinchflat.Profiles
+ alias Pinchflat.Profiles.MediaProfile
+ import Pinchflat.ProfilesFixtures
+
+ @invalid_attrs %{name: nil, output_path_template: nil}
+
+ describe "list_media_profiles/0" do
+ test "it returns all media_profiles" do
+ media_profile = media_profile_fixture()
+ assert Profiles.list_media_profiles() == [media_profile]
+ end
+ end
+
+ describe "get_media_profile!/1" do
+ test "it returns the media_profile with given id" do
+ media_profile = media_profile_fixture()
+ assert Profiles.get_media_profile!(media_profile.id) == media_profile
+ end
+ end
+
+ describe "create_media_profile/1" do
+ test "creation with valid data creates a media_profile" do
+ valid_attrs = %{name: "some name", output_path_template: "some output_path_template"}
+
+ assert {:ok, %MediaProfile{} = media_profile} = Profiles.create_media_profile(valid_attrs)
+ assert media_profile.name == "some name"
+ assert media_profile.output_path_template == "some output_path_template"
+ end
+
+ test "creation with invalid data returns error changeset" do
+ assert {:error, %Ecto.Changeset{}} = Profiles.create_media_profile(@invalid_attrs)
+ end
+ end
+
+ describe "update_media_profile/2" do
+ test "updating with valid data updates the media_profile" do
+ media_profile = media_profile_fixture()
+
+ update_attrs = %{
+ name: "some updated name",
+ output_path_template: "some updated output_path_template"
+ }
+
+ assert {:ok, %MediaProfile{} = media_profile} =
+ Profiles.update_media_profile(media_profile, update_attrs)
+
+ assert media_profile.name == "some updated name"
+ assert media_profile.output_path_template == "some updated output_path_template"
+ end
+
+ test "updating with invalid data returns error changeset" do
+ media_profile = media_profile_fixture()
+
+ assert {:error, %Ecto.Changeset{}} =
+ Profiles.update_media_profile(media_profile, @invalid_attrs)
+
+ assert media_profile == Profiles.get_media_profile!(media_profile.id)
+ end
+ end
+
+ describe "delete_media_profile/1" do
+ test "deletion deletes the media_profile" do
+ media_profile = media_profile_fixture()
+ assert {:ok, %MediaProfile{}} = Profiles.delete_media_profile(media_profile)
+ assert_raise Ecto.NoResultsError, fn -> Profiles.get_media_profile!(media_profile.id) end
+ end
+ end
+
+ describe "change_media_profile/1" do
+ test "it returns a media_profile changeset" do
+ media_profile = media_profile_fixture()
+ assert %Ecto.Changeset{} = Profiles.change_media_profile(media_profile)
+ end
+ end
+end
diff --git a/test/pinchflat/rendered_string/parser_test.exs b/test/pinchflat/rendered_string/parser_test.exs
new file mode 100644
index 0000000..b7c4b70
--- /dev/null
+++ b/test/pinchflat/rendered_string/parser_test.exs
@@ -0,0 +1,40 @@
+defmodule Pinchflat.RenderedString.ParserTest do
+ use ExUnit.Case, async: true
+
+ alias Pinchflat.RenderedString.Parser
+
+ describe "parse/2" do
+ test "it returns the rendered string when the string is valid" do
+ assert {:ok, "bar"} = Parser.parse("{{ foo }}", %{"foo" => "bar"})
+ end
+
+ test "it works with filepath-like strings" do
+ assert {:ok, "bar/baz"} =
+ Parser.parse("{{ foo }}/{{ bar }}", %{"foo" => "bar", "bar" => "baz"})
+ end
+
+ test "it works when mixing text and variables" do
+ assert {:ok, "bar text baz"} =
+ Parser.parse("{{ foo }} text {{ bar }}", %{"foo" => "bar", "bar" => "baz"})
+ end
+
+ test "it removes the placeholder but doesn't blow up when the variable isn't provided" do
+ assert {:ok, ""} = Parser.parse("{{ foo }}", %{})
+ end
+
+ test "it accepts any number of spaces between open and closing tags" do
+ assert {:ok, "bar"} = Parser.parse("{{foo}}", %{"foo" => "bar"})
+ assert {:ok, "bar"} = Parser.parse("{{ foo}}", %{"foo" => "bar"})
+ assert {:ok, "bar"} = Parser.parse("{{foo }}", %{"foo" => "bar"})
+ assert {:ok, "bar"} = Parser.parse("{{ foo }}", %{"foo" => "bar"})
+ end
+
+ test "it doesn't interpret single braces as variables" do
+ assert {:ok, "{foo}"} = Parser.parse("{foo}", %{})
+ end
+
+ test "it returns an error when the string is invalid" do
+ assert {:error, "expected end of string"} = Parser.parse("{{ 1-1 }", %{})
+ end
+ end
+end
diff --git a/test/pinchflat/repo_test.exs b/test/pinchflat/repo_test.exs
new file mode 100644
index 0000000..0d7eea2
--- /dev/null
+++ b/test/pinchflat/repo_test.exs
@@ -0,0 +1,26 @@
+defmodule Pinchflat.RepoTest do
+ use Pinchflat.DataCase
+
+ alias Pinchflat.JobFixtures.TestJobWorker
+
+ describe "insert_unique_job/1" do
+ test "returns {:ok, job} if there is no conflict" do
+ job = TestJobWorker.new(%{})
+
+ assert {:ok, %Oban.Job{}} = Pinchflat.Repo.insert_unique_job(job)
+ end
+
+ test "returns {:duplicate, original_job} if there is a conflict" do
+ job = TestJobWorker.new(%{foo: "bar"}, unique: [period: :infinity])
+
+ {:ok, saved_job_1} = Pinchflat.Repo.insert_unique_job(job)
+
+ assert {:duplicate, saved_job_2} = Pinchflat.Repo.insert_unique_job(job)
+ assert saved_job_1.id == saved_job_2.id
+ end
+
+ test "returns the error if there is an error" do
+ assert {:error, _} = Pinchflat.Repo.insert_unique_job(%Ecto.Changeset{})
+ end
+ end
+end
diff --git a/test/pinchflat/tasks/channel_tasks_test.exs b/test/pinchflat/tasks/channel_tasks_test.exs
new file mode 100644
index 0000000..2314523
--- /dev/null
+++ b/test/pinchflat/tasks/channel_tasks_test.exs
@@ -0,0 +1,45 @@
+defmodule Pinchflat.Tasks.ChannelTasksTest do
+ use Pinchflat.DataCase
+
+ import Pinchflat.TasksFixtures
+ import Pinchflat.MediaSourceFixtures
+
+ alias Pinchflat.Tasks.Task
+ alias Pinchflat.Tasks.ChannelTasks
+ alias Pinchflat.Workers.MediaIndexingWorker
+
+ describe "kickoff_indexing_task/1" do
+ test "it does not schedule a job if the interval is <= 0" do
+ channel = channel_fixture(index_frequency_minutes: -1)
+
+ assert {:ok, :should_not_index} = ChannelTasks.kickoff_indexing_task(channel)
+
+ refute_enqueued(worker: MediaIndexingWorker, args: %{"id" => channel.id})
+ end
+
+ test "it schedules a job if the interval is > 0" do
+ channel = channel_fixture(index_frequency_minutes: 1)
+
+ assert {:ok, _} = ChannelTasks.kickoff_indexing_task(channel)
+
+ assert_enqueued(worker: MediaIndexingWorker, args: %{"id" => channel.id})
+ end
+
+ test "it creates and attaches a task if the interval is > 0" do
+ channel = channel_fixture(index_frequency_minutes: 1)
+
+ assert {:ok, %Task{} = task} = ChannelTasks.kickoff_indexing_task(channel)
+
+ assert task.channel_id == channel.id
+ end
+
+ test "it deletes any pending tasks for the channel" do
+ channel = channel_fixture()
+ task = task_fixture(channel_id: channel.id)
+
+ assert {:ok, _} = ChannelTasks.kickoff_indexing_task(channel)
+
+ assert_raise Ecto.NoResultsError, fn -> Repo.reload!(task) end
+ end
+ end
+end
diff --git a/test/pinchflat/tasks_test.exs b/test/pinchflat/tasks_test.exs
new file mode 100644
index 0000000..fbcc670
--- /dev/null
+++ b/test/pinchflat/tasks_test.exs
@@ -0,0 +1,211 @@
+defmodule Pinchflat.TasksTest do
+ use Pinchflat.DataCase
+ import Pinchflat.JobFixtures
+ import Pinchflat.TasksFixtures
+ import Pinchflat.MediaFixtures
+ import Pinchflat.MediaSourceFixtures
+
+ alias Pinchflat.Tasks
+ alias Pinchflat.Tasks.Task
+ alias Pinchflat.JobFixtures.TestJobWorker
+
+ @invalid_attrs %{job_id: nil}
+
+ describe "schema" do
+ test "it deletes a task when the job gets deleted" do
+ task = Repo.preload(task_fixture(), [:job])
+
+ {:ok, _} = Repo.delete(task.job)
+
+ assert_raise Ecto.NoResultsError, fn -> Repo.reload!(task) end
+ end
+
+ test "it does not delete the other record when a job gets deleted" do
+ task = Repo.preload(task_fixture(), [:channel, :job])
+
+ {:ok, _} = Repo.delete(task.job)
+
+ assert Repo.reload!(task.channel)
+ end
+ end
+
+ describe "list_tasks/0" do
+ test "it returns all tasks" do
+ task = task_fixture()
+ assert Tasks.list_tasks() == [task]
+ end
+ end
+
+ describe "list_tasks_for/3" do
+ test "it lets you specify which record type/ID to join on" do
+ task = task_fixture()
+
+ assert Tasks.list_tasks_for(:channel_id, task.channel_id) == [task]
+ end
+
+ test "it lets you specify which job states to include" do
+ task = task_fixture()
+
+ assert Tasks.list_tasks_for(:channel_id, task.channel_id, [:available]) == [task]
+ assert Tasks.list_tasks_for(:channel_id, task.channel_id, [:cancelled]) == []
+ end
+ end
+
+ describe "list_pending_tasks_for/2" do
+ test "it lists pending tasks" do
+ task = task_fixture()
+
+ assert Tasks.list_pending_tasks_for(:channel_id, task.channel_id) == [task]
+ end
+
+ test "it does not list non-pending tasks" do
+ task = Repo.preload(task_fixture(), :job)
+ :ok = Oban.cancel_job(task.job)
+
+ assert Tasks.list_pending_tasks_for(:channel_id, task.channel_id) == []
+ end
+ end
+
+ describe "get_task!/1" do
+ test "it returns the task with given id" do
+ task = task_fixture()
+ assert Tasks.get_task!(task.id) == task
+ end
+ end
+
+ describe "create_task/1" do
+ test "creation with valid data creates a task" do
+ valid_attrs = %{job_id: job_fixture().id}
+
+ assert {:ok, %Task{} = _task} = Tasks.create_task(valid_attrs)
+ end
+
+ test "creation with invalid data returns error changeset" do
+ assert {:error, %Ecto.Changeset{}} = Tasks.create_task(@invalid_attrs)
+ end
+
+ test "accepts a job and channel" do
+ job = job_fixture()
+ channel = channel_fixture()
+
+ assert {:ok, %Task{} = task} = Tasks.create_task(job, channel)
+
+ assert task.job_id == job.id
+ assert task.channel_id == channel.id
+ end
+
+ test "accepts a job and media item" do
+ job = job_fixture()
+ media_item = media_item_fixture()
+
+ assert {:ok, %Task{} = task} = Tasks.create_task(job, media_item)
+
+ assert task.job_id == job.id
+ assert task.media_item_id == media_item.id
+ end
+ end
+
+ describe "create_job_with_task/2" do
+ test "it enqueues the given job" do
+ media_item = media_item_fixture()
+
+ refute_enqueued(worker: TestJobWorker)
+ assert {:ok, %Task{}} = Tasks.create_job_with_task(TestJobWorker.new(%{}), media_item)
+ assert_enqueued(worker: TestJobWorker)
+ end
+
+ test "it creates a task record if successful" do
+ channel = channel_fixture()
+
+ assert {:ok, %Task{} = task} = Tasks.create_job_with_task(TestJobWorker.new(%{}), channel)
+
+ assert task.channel_id == channel.id
+ end
+
+ test "it returns an error if the job already exists" do
+ channel = channel_fixture()
+ job = TestJobWorker.new(%{foo: "bar"}, unique: [period: :infinity])
+
+ assert {:ok, %Task{}} = Tasks.create_job_with_task(job, channel)
+ assert {:error, :duplicate_job} = Tasks.create_job_with_task(job, channel)
+ end
+
+ test "it returns an error if the job fails to enqueue" do
+ channel = channel_fixture()
+
+ assert {:error, %Ecto.Changeset{}} = Tasks.create_job_with_task(%Ecto.Changeset{}, channel)
+ end
+ end
+
+ describe "delete_task/1" do
+ test "deletion deletes the task" do
+ task = task_fixture()
+ assert {:ok, %Task{}} = Tasks.delete_task(task)
+ assert_raise Ecto.NoResultsError, fn -> Tasks.get_task!(task.id) end
+ end
+
+ test "deletion also cancels the attached job" do
+ task = Repo.preload(task_fixture(), :job)
+
+ assert {:ok, %Task{}} = Tasks.delete_task(task)
+ job = Repo.reload!(task.job)
+
+ assert job.state == "cancelled"
+ end
+ end
+
+ describe "delete_tasks_for/1" do
+ test "it deletes tasks attached to a channel" do
+ channel = channel_fixture()
+ task = task_fixture(channel_id: channel.id)
+
+ assert :ok = Tasks.delete_tasks_for(channel)
+ assert_raise Ecto.NoResultsError, fn -> Tasks.get_task!(task.id) end
+ end
+
+ test "it deletes the tasks attached to a media_item" do
+ media_item = media_item_fixture()
+ task = task_fixture(media_item_id: media_item.id)
+
+ assert :ok = Tasks.delete_tasks_for(media_item)
+ assert_raise Ecto.NoResultsError, fn -> Tasks.get_task!(task.id) end
+ end
+ end
+
+ describe "delete_pending_tasks_for/1" do
+ test "it deletes pending tasks attached to a channel" do
+ channel = channel_fixture()
+ task = task_fixture(channel_id: channel.id)
+
+ assert :ok = Tasks.delete_pending_tasks_for(channel)
+ assert_raise Ecto.NoResultsError, fn -> Tasks.get_task!(task.id) end
+ end
+
+ test "it does not delete non-pending tasks" do
+ channel = channel_fixture()
+ task = Repo.preload(task_fixture(channel_id: channel.id), :job)
+ :ok = Oban.cancel_job(task.job)
+
+ assert :ok = Tasks.delete_pending_tasks_for(channel)
+ assert Tasks.get_task!(task.id)
+ end
+
+ test "it works on media_items" do
+ media_item = media_item_fixture()
+ pending_task = task_fixture(media_item_id: media_item.id)
+ cancelled_task = Repo.preload(task_fixture(media_item_id: media_item.id), :job)
+ :ok = Oban.cancel_job(cancelled_task.job)
+
+ assert :ok = Tasks.delete_pending_tasks_for(media_item)
+ assert Tasks.get_task!(cancelled_task.id)
+ assert_raise Ecto.NoResultsError, fn -> Repo.reload!(pending_task) end
+ end
+ end
+
+ describe "change_task/1" do
+ test "it returns a task changeset" do
+ task = task_fixture()
+ assert %Ecto.Changeset{} = Tasks.change_task(task)
+ end
+ end
+end
diff --git a/test/pinchflat/utils/string_utils_test.exs b/test/pinchflat/utils/string_utils_test.exs
index 59ebbfc..d77e468 100644
--- a/test/pinchflat/utils/string_utils_test.exs
+++ b/test/pinchflat/utils/string_utils_test.exs
@@ -1,7 +1,7 @@
defmodule Pinchflat.Utils.StringUtilsTest do
use ExUnit.Case, async: true
- alias Pinchflat.Utils.StringUtils, as: StringUtils
+ alias Pinchflat.Utils.StringUtils
describe "to_kebab_case/1" do
test "converts a space-delimited string to kebab-case" do
@@ -12,4 +12,19 @@ defmodule Pinchflat.Utils.StringUtilsTest do
assert StringUtils.to_kebab_case("hello_world") == "hello-world"
end
end
+
+ describe "random_string/1" do
+ test "generates a random string" do
+ assert is_binary(StringUtils.random_string())
+ assert StringUtils.random_string() != StringUtils.random_string()
+ end
+
+ test "has a defined default length" do
+ assert String.length(StringUtils.random_string()) == 32
+ end
+
+ test "can generate a string of a given length" do
+ assert String.length(StringUtils.random_string(64)) == 64
+ end
+ end
end
diff --git a/test/pinchflat/workers/media_indexing_worker_test.exs b/test/pinchflat/workers/media_indexing_worker_test.exs
new file mode 100644
index 0000000..154f9ab
--- /dev/null
+++ b/test/pinchflat/workers/media_indexing_worker_test.exs
@@ -0,0 +1,110 @@
+defmodule Pinchflat.Workers.MediaIndexingWorkerTest do
+ use Pinchflat.DataCase
+
+ import Mox
+ import Pinchflat.MediaFixtures
+ import Pinchflat.MediaSourceFixtures
+
+ alias Pinchflat.Tasks
+ alias Pinchflat.Workers.MediaIndexingWorker
+ alias Pinchflat.Workers.VideoDownloadWorker
+
+ setup :verify_on_exit!
+
+ describe "perform/1" do
+ test "it does not do any indexing if the channel shouldn't be indexed" do
+ expect(YtDlpRunnerMock, :run, 0, fn _url, _opts, _ot -> {:ok, ""} end)
+
+ channel = channel_fixture(index_frequency_minutes: -1)
+
+ perform_job(MediaIndexingWorker, %{id: channel.id})
+ end
+
+ test "it does not reschedule if the channel shouldn't be indexed" do
+ expect(YtDlpRunnerMock, :run, 0, fn _url, _opts, _ot -> {:ok, ""} end)
+
+ channel = channel_fixture(index_frequency_minutes: -1)
+ perform_job(MediaIndexingWorker, %{id: channel.id})
+
+ refute_enqueued(worker: MediaIndexingWorker, args: %{"id" => channel.id})
+ end
+
+ test "it indexes the channel if it should be indexed" do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> {:ok, ""} end)
+
+ channel = channel_fixture(index_frequency_minutes: 10)
+
+ perform_job(MediaIndexingWorker, %{id: channel.id})
+ end
+
+ test "it kicks off a download job for each pending media item" do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> {:ok, "video1"} end)
+
+ channel = channel_fixture(index_frequency_minutes: 10)
+ perform_job(MediaIndexingWorker, %{id: channel.id})
+
+ assert [_] = all_enqueued(worker: VideoDownloadWorker)
+ end
+
+ test "it starts a job for any pending media item even if it's from another run" do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> {:ok, "video1"} end)
+
+ channel = channel_fixture(index_frequency_minutes: 10)
+ media_item_fixture(%{channel_id: channel.id, video_filepath: nil})
+ perform_job(MediaIndexingWorker, %{id: channel.id})
+
+ assert [_, _] = all_enqueued(worker: VideoDownloadWorker)
+ end
+
+ test "it does not kick off a job for media items that could not be saved" do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> {:ok, "video1\nvideo1"} end)
+
+ channel = channel_fixture(index_frequency_minutes: 10)
+ perform_job(MediaIndexingWorker, %{id: channel.id})
+
+ # Only one job should be enqueued, since the second video is a duplicate
+ assert [_] = all_enqueued(worker: VideoDownloadWorker)
+ end
+
+ test "it reschedules the job based on the index frequency" do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> {:ok, ""} end)
+
+ channel = channel_fixture(index_frequency_minutes: 10)
+ perform_job(MediaIndexingWorker, %{id: channel.id})
+
+ assert_enqueued(
+ worker: MediaIndexingWorker,
+ args: %{"id" => channel.id},
+ scheduled_at: now_plus(channel.index_frequency_minutes, :minutes)
+ )
+ end
+
+ test "it creates a task for the rescheduled job" do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> {:ok, ""} end)
+
+ channel = channel_fixture(index_frequency_minutes: 10)
+ task_count_fetcher = fn -> Enum.count(Tasks.list_tasks()) end
+
+ assert_changed([from: 0, to: 1], task_count_fetcher, fn ->
+ perform_job(MediaIndexingWorker, %{id: channel.id})
+ end)
+ end
+
+ test "it creates the basic media_item records" do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> {:ok, "video1\nvideo2"} end)
+
+ channel = channel_fixture(index_frequency_minutes: 10)
+
+ media_item_fetcher = fn ->
+ channel
+ |> Repo.preload(:media_items)
+ |> Map.get(:media_items)
+ |> Enum.map(fn media_item -> media_item.media_id end)
+ end
+
+ assert_changed([from: [], to: ["video1", "video2"]], media_item_fetcher, fn ->
+ perform_job(MediaIndexingWorker, %{id: channel.id})
+ end)
+ end
+ end
+end
diff --git a/test/pinchflat/workers/video_download_worker_test.exs b/test/pinchflat/workers/video_download_worker_test.exs
new file mode 100644
index 0000000..d4f0995
--- /dev/null
+++ b/test/pinchflat/workers/video_download_worker_test.exs
@@ -0,0 +1,59 @@
+defmodule Pinchflat.Workers.VideoDownloadWorkerTest do
+ use Pinchflat.DataCase
+
+ import Mox
+ import Pinchflat.MediaFixtures
+
+ alias Pinchflat.Workers.VideoDownloadWorker
+
+ setup :verify_on_exit!
+
+ setup do
+ media_item =
+ Repo.preload(
+ media_item_fixture(%{video_filepath: nil}),
+ [:metadata, channel: :media_profile]
+ )
+
+ {:ok, %{media_item: media_item}}
+ end
+
+ describe "perform/1" do
+ test "it saves attributes to the media_item", %{media_item: media_item} do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot ->
+ {:ok, render_metadata(:media_metadata)}
+ end)
+
+ assert media_item.video_filepath == nil
+ perform_job(VideoDownloadWorker, %{id: media_item.id})
+ assert Repo.reload(media_item).video_filepath != nil
+ end
+
+ test "it saves the metadata to the media_item", %{media_item: media_item} do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot ->
+ {:ok, render_metadata(:media_metadata)}
+ end)
+
+ assert media_item.metadata == nil
+ perform_job(VideoDownloadWorker, %{id: media_item.id})
+ assert Repo.reload(media_item).metadata != nil
+ end
+
+ test "it won't double-schedule downloading jobs", %{media_item: media_item} do
+ Oban.insert(VideoDownloadWorker.new(%{id: media_item.id}))
+ Oban.insert(VideoDownloadWorker.new(%{id: media_item.id}))
+
+ assert [_] = all_enqueued(worker: VideoDownloadWorker)
+ end
+
+ test "it sets the job to retryable if the download fails", %{media_item: media_item} do
+ expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot -> {:error, "error"} end)
+
+ Oban.Testing.with_testing_mode(:inline, fn ->
+ {:ok, job} = Oban.insert(VideoDownloadWorker.new(%{id: media_item.id}))
+
+ assert job.state == "retryable"
+ end)
+ end
+ end
+end
diff --git a/test/pinchflat_web/controllers/channel_controller_test.exs b/test/pinchflat_web/controllers/channel_controller_test.exs
new file mode 100644
index 0000000..5e71f11
--- /dev/null
+++ b/test/pinchflat_web/controllers/channel_controller_test.exs
@@ -0,0 +1,119 @@
+defmodule PinchflatWeb.ChannelControllerTest do
+ use PinchflatWeb.ConnCase
+ import Mox
+
+ import Pinchflat.ProfilesFixtures
+ import Pinchflat.MediaSourceFixtures
+
+ setup do
+ media_profile = media_profile_fixture()
+
+ {
+ :ok,
+ %{
+ create_attrs: %{
+ media_profile_id: media_profile.id,
+ original_url: "https://www.youtube.com/channel/abc123"
+ },
+ update_attrs: %{
+ original_url: "https://www.youtube.com/channel/321xyz"
+ },
+ invalid_attrs: %{original_url: nil, media_profile_id: nil}
+ }
+ }
+ end
+
+ setup :verify_on_exit!
+
+ describe "index" do
+ test "lists all channels", %{conn: conn} do
+ conn = get(conn, ~p"/media_sources/channels")
+ assert html_response(conn, 200) =~ "Listing Channels"
+ end
+ end
+
+ describe "new channel" do
+ test "renders form", %{conn: conn} do
+ conn = get(conn, ~p"/media_sources/channels/new")
+ assert html_response(conn, 200) =~ "New Channel"
+ end
+ end
+
+ describe "create channel" do
+ test "redirects to show when data is valid", %{conn: conn, create_attrs: create_attrs} do
+ expect(YtDlpRunnerMock, :run, 1, &runner_function_mock/3)
+ conn = post(conn, ~p"/media_sources/channels", channel: create_attrs)
+
+ assert %{id: id} = redirected_params(conn)
+ assert redirected_to(conn) == ~p"/media_sources/channels/#{id}"
+
+ conn = get(conn, ~p"/media_sources/channels/#{id}")
+ assert html_response(conn, 200) =~ "Channel #{id}"
+ end
+
+ test "renders errors when data is invalid", %{conn: conn, invalid_attrs: invalid_attrs} do
+ conn = post(conn, ~p"/media_sources/channels", channel: invalid_attrs)
+ assert html_response(conn, 200) =~ "New Channel"
+ end
+ end
+
+ describe "edit channel" do
+ setup [:create_channel]
+
+ test "renders form for editing chosen channel", %{conn: conn, channel: channel} do
+ conn = get(conn, ~p"/media_sources/channels/#{channel}/edit")
+ assert html_response(conn, 200) =~ "Edit Channel"
+ end
+ end
+
+ describe "update channel" do
+ setup [:create_channel]
+
+ test "redirects when data is valid", %{conn: conn, channel: channel, update_attrs: update_attrs} do
+ expect(YtDlpRunnerMock, :run, 1, &runner_function_mock/3)
+
+ conn = put(conn, ~p"/media_sources/channels/#{channel}", channel: update_attrs)
+ assert redirected_to(conn) == ~p"/media_sources/channels/#{channel}"
+
+ conn = get(conn, ~p"/media_sources/channels/#{channel}")
+ assert html_response(conn, 200) =~ "https://www.youtube.com/channel/321xyz"
+ end
+
+ test "renders errors when data is invalid", %{
+ conn: conn,
+ channel: channel,
+ invalid_attrs: invalid_attrs
+ } do
+ conn = put(conn, ~p"/media_sources/channels/#{channel}", channel: invalid_attrs)
+ assert html_response(conn, 200) =~ "Edit Channel"
+ end
+ end
+
+ describe "delete channel" do
+ setup [:create_channel]
+
+ test "deletes chosen channel", %{conn: conn, channel: channel} do
+ conn = delete(conn, ~p"/media_sources/channels/#{channel}")
+ assert redirected_to(conn) == ~p"/media_sources/channels"
+
+ assert_error_sent 404, fn ->
+ get(conn, ~p"/media_sources/channels/#{channel}")
+ end
+ end
+ end
+
+ defp create_channel(_) do
+ channel = channel_fixture()
+ %{channel: channel}
+ end
+
+ defp runner_function_mock(_url, _opts, _ot) do
+ {
+ :ok,
+ Phoenix.json_library().encode!(%{
+ channel: "some name",
+ channel_id: "some_channel_id_#{:rand.uniform(1_000_000)}"
+ })
+ }
+ end
+end
diff --git a/test/pinchflat_web/controllers/media_profile_controller_test.exs b/test/pinchflat_web/controllers/media_profile_controller_test.exs
new file mode 100644
index 0000000..b5bac1e
--- /dev/null
+++ b/test/pinchflat_web/controllers/media_profile_controller_test.exs
@@ -0,0 +1,90 @@
+defmodule PinchflatWeb.MediaProfileControllerTest do
+ use PinchflatWeb.ConnCase
+
+ import Pinchflat.ProfilesFixtures
+
+ @create_attrs %{name: "some name", output_path_template: "some output_path_template"}
+ @update_attrs %{
+ name: "some updated name",
+ output_path_template: "some updated output_path_template"
+ }
+ @invalid_attrs %{name: nil, output_path_template: nil}
+
+ describe "index" do
+ test "lists all media_profiles", %{conn: conn} do
+ conn = get(conn, ~p"/media_profiles")
+ assert html_response(conn, 200) =~ "Listing Media profiles"
+ end
+ end
+
+ describe "new media_profile" do
+ test "renders form", %{conn: conn} do
+ conn = get(conn, ~p"/media_profiles/new")
+ assert html_response(conn, 200) =~ "New Media profile"
+ end
+ end
+
+ describe "create media_profile" do
+ test "redirects to show when data is valid", %{conn: conn} do
+ conn = post(conn, ~p"/media_profiles", media_profile: @create_attrs)
+
+ assert %{id: id} = redirected_params(conn)
+ assert redirected_to(conn) == ~p"/media_profiles/#{id}"
+
+ conn = get(conn, ~p"/media_profiles/#{id}")
+ assert html_response(conn, 200) =~ "Media profile #{id}"
+ end
+
+ test "renders errors when data is invalid", %{conn: conn} do
+ conn = post(conn, ~p"/media_profiles", media_profile: @invalid_attrs)
+ assert html_response(conn, 200) =~ "New Media profile"
+ end
+ end
+
+ describe "edit media_profile" do
+ setup [:create_media_profile]
+
+ test "renders form for editing chosen media_profile", %{
+ conn: conn,
+ media_profile: media_profile
+ } do
+ conn = get(conn, ~p"/media_profiles/#{media_profile}/edit")
+ assert html_response(conn, 200) =~ "Edit Media profile"
+ end
+ end
+
+ describe "update media_profile" do
+ setup [:create_media_profile]
+
+ test "redirects when data is valid", %{conn: conn, media_profile: media_profile} do
+ conn = put(conn, ~p"/media_profiles/#{media_profile}", media_profile: @update_attrs)
+ assert redirected_to(conn) == ~p"/media_profiles/#{media_profile}"
+
+ conn = get(conn, ~p"/media_profiles/#{media_profile}")
+ assert html_response(conn, 200) =~ "some updated name"
+ end
+
+ test "renders errors when data is invalid", %{conn: conn, media_profile: media_profile} do
+ conn = put(conn, ~p"/media_profiles/#{media_profile}", media_profile: @invalid_attrs)
+ assert html_response(conn, 200) =~ "Edit Media profile"
+ end
+ end
+
+ describe "delete media_profile" do
+ setup [:create_media_profile]
+
+ test "deletes chosen media_profile", %{conn: conn, media_profile: media_profile} do
+ conn = delete(conn, ~p"/media_profiles/#{media_profile}")
+ assert redirected_to(conn) == ~p"/media_profiles"
+
+ assert_error_sent 404, fn ->
+ get(conn, ~p"/media_profiles/#{media_profile}")
+ end
+ end
+ end
+
+ defp create_media_profile(_) do
+ media_profile = media_profile_fixture()
+ %{media_profile: media_profile}
+ end
+end
diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex
index 012ef2f..ff478a0 100644
--- a/test/support/conn_case.ex
+++ b/test/support/conn_case.ex
@@ -28,6 +28,7 @@ defmodule PinchflatWeb.ConnCase do
import Plug.Conn
import Phoenix.ConnTest
import PinchflatWeb.ConnCase
+ import Pinchflat.TestingHelperMethods
end
end
diff --git a/test/support/data_case.ex b/test/support/data_case.ex
index df05c53..d217749 100644
--- a/test/support/data_case.ex
+++ b/test/support/data_case.ex
@@ -20,10 +20,13 @@ defmodule Pinchflat.DataCase do
quote do
alias Pinchflat.Repo
+ use Oban.Testing, repo: Repo
+
import Ecto
import Ecto.Changeset
import Ecto.Query
import Pinchflat.DataCase
+ import Pinchflat.TestingHelperMethods
end
end
diff --git a/test/support/files/media_metadata.json b/test/support/files/media_metadata.json
new file mode 100644
index 0000000..6c4f3ec
--- /dev/null
+++ b/test/support/files/media_metadata.json
@@ -0,0 +1,5772 @@
+{
+ "id": "bwRHIkYqYJo",
+ "title": "Trying to Wheelie Without the Rear Brake",
+ "formats": [
+ {
+ "format_id": "sb2",
+ "format_note": "storyboard",
+ "ext": "mhtml",
+ "protocol": "mhtml",
+ "acodec": "none",
+ "vcodec": "none",
+ "url": "https://i.ytimg.com/sb/bwRHIkYqYJo/storyboard3_L0/default.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgii-ZutBg==&sigh=rs$AOn4CLC-WTfZiOcDKw9i37-6XwkDXvNewg",
+ "width": 48,
+ "height": 27,
+ "fps": 0.1718213058419244,
+ "rows": 10,
+ "columns": 10,
+ "fragments": [
+ {
+ "url": "https://i.ytimg.com/sb/bwRHIkYqYJo/storyboard3_L0/default.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgii-ZutBg==&sigh=rs$AOn4CLC-WTfZiOcDKw9i37-6XwkDXvNewg",
+ "duration": 582.0
+ }
+ ],
+ "resolution": "48x27",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "audio_ext": "none",
+ "video_ext": "none",
+ "vbr": 0,
+ "abr": 0,
+ "tbr": null,
+ "format": "sb2 - 48x27 (storyboard)"
+ },
+ {
+ "format_id": "sb1",
+ "format_note": "storyboard",
+ "ext": "mhtml",
+ "protocol": "mhtml",
+ "acodec": "none",
+ "vcodec": "none",
+ "url": "https://i.ytimg.com/sb/bwRHIkYqYJo/storyboard3_L1/M$M.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgii-ZutBg==&sigh=rs$AOn4CLD1JarTwbQfCQTsU00-DbrN5S0TRw",
+ "width": 79,
+ "height": 45,
+ "fps": 0.2027491408934708,
+ "rows": 10,
+ "columns": 10,
+ "fragments": [
+ {
+ "url": "https://i.ytimg.com/sb/bwRHIkYqYJo/storyboard3_L1/M0.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgii-ZutBg==&sigh=rs$AOn4CLD1JarTwbQfCQTsU00-DbrN5S0TRw",
+ "duration": 493.22033898305085
+ },
+ {
+ "url": "https://i.ytimg.com/sb/bwRHIkYqYJo/storyboard3_L1/M1.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgii-ZutBg==&sigh=rs$AOn4CLD1JarTwbQfCQTsU00-DbrN5S0TRw",
+ "duration": 88.77966101694915
+ }
+ ],
+ "resolution": "79x45",
+ "aspect_ratio": 1.76,
+ "http_headers": {},
+ "audio_ext": "none",
+ "video_ext": "none",
+ "vbr": 0,
+ "abr": 0,
+ "tbr": null,
+ "format": "sb1 - 79x45 (storyboard)"
+ },
+ {
+ "format_id": "sb0",
+ "format_note": "storyboard",
+ "ext": "mhtml",
+ "protocol": "mhtml",
+ "acodec": "none",
+ "vcodec": "none",
+ "url": "https://i.ytimg.com/sb/bwRHIkYqYJo/storyboard3_L2/M$M.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgii-ZutBg==&sigh=rs$AOn4CLBC5n1OzoB3jwZTrzvCQWFGwSZX1w",
+ "width": 159,
+ "height": 90,
+ "fps": 0.2027491408934708,
+ "rows": 5,
+ "columns": 5,
+ "fragments": [
+ {
+ "url": "https://i.ytimg.com/sb/bwRHIkYqYJo/storyboard3_L2/M0.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgii-ZutBg==&sigh=rs$AOn4CLBC5n1OzoB3jwZTrzvCQWFGwSZX1w",
+ "duration": 123.30508474576271
+ },
+ {
+ "url": "https://i.ytimg.com/sb/bwRHIkYqYJo/storyboard3_L2/M1.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgii-ZutBg==&sigh=rs$AOn4CLBC5n1OzoB3jwZTrzvCQWFGwSZX1w",
+ "duration": 123.30508474576271
+ },
+ {
+ "url": "https://i.ytimg.com/sb/bwRHIkYqYJo/storyboard3_L2/M2.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgii-ZutBg==&sigh=rs$AOn4CLBC5n1OzoB3jwZTrzvCQWFGwSZX1w",
+ "duration": 123.30508474576271
+ },
+ {
+ "url": "https://i.ytimg.com/sb/bwRHIkYqYJo/storyboard3_L2/M3.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgii-ZutBg==&sigh=rs$AOn4CLBC5n1OzoB3jwZTrzvCQWFGwSZX1w",
+ "duration": 123.30508474576271
+ },
+ {
+ "url": "https://i.ytimg.com/sb/bwRHIkYqYJo/storyboard3_L2/M4.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgii-ZutBg==&sigh=rs$AOn4CLBC5n1OzoB3jwZTrzvCQWFGwSZX1w",
+ "duration": 88.77966101694915
+ }
+ ],
+ "resolution": "159x90",
+ "aspect_ratio": 1.77,
+ "http_headers": {},
+ "audio_ext": "none",
+ "video_ext": "none",
+ "vbr": 0,
+ "abr": 0,
+ "tbr": null,
+ "format": "sb0 - 159x90 (storyboard)"
+ },
+ {
+ "format_id": "233",
+ "format_note": "Default",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/233/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/goi/133/sgoap/clen%3D3552258%3Bdur%3D582.402%3Bgir%3Dyes%3Bitag%3D139%3Blmt%3D1705441259000142/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/6318224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,goi,sgoap,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRQIgbCaCGS0nhRSFgZg8OsT10tDuIe8XPCZ_zAjccY4_Fc0CIQDp56A2F57OqrJ_eidw70fAlmO-7gug6DdJ4o51VE9LOg%3D%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRQIhAPLxk_HQV_ZFBRaw8LoqR40VEIPazvN72t0Jp3WOt5H-AiABF-sb2dSvkGTwHn67ozX99m46kmOF6G7g50lqpYBAbA%3D%3D/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "language": "en",
+ "ext": "mp4",
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": -1,
+ "has_drm": false,
+ "vcodec": "none",
+ "source_preference": -1,
+ "resolution": "audio only",
+ "aspect_ratio": null,
+ "http_headers": {},
+ "audio_ext": "mp4",
+ "video_ext": "none",
+ "vbr": 0,
+ "abr": null,
+ "tbr": null,
+ "format": "233 - audio only (Default)"
+ },
+ {
+ "format_id": "234",
+ "format_note": "Default",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/234/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/goi/133/sgoap/clen%3D9425155%3Bdur%3D582.333%3Bgir%3Dyes%3Bitag%3D140%3Blmt%3D1705441258942374/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/6318224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,goi,sgoap,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRQIgXivzAy8pyeLSQRo2Xo5vtwHERLIQsZDunepkJJHXKRECIQCxJjC-2b85V7aKyKWkZGkO6vAGML1TEO2ezmhEfVRj9w%3D%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRQIgQ44w_X6TfA_ERAP4Vzy4C9em8983DeFJrcOJgyS5oe8CIQC1uzL1RI_lsx32LJy5ZiJ1e6Mr8w6j-RGLYSE2s7Ay1w%3D%3D/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "language": "en",
+ "ext": "mp4",
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": -1,
+ "has_drm": false,
+ "vcodec": "none",
+ "source_preference": -1,
+ "resolution": "audio only",
+ "aspect_ratio": null,
+ "http_headers": {},
+ "audio_ext": "mp4",
+ "video_ext": "none",
+ "vbr": 0,
+ "abr": null,
+ "tbr": null,
+ "format": "234 - audio only (Default)"
+ },
+ {
+ "asr": 22050,
+ "filesize": 2242064,
+ "format_id": "599",
+ "format_note": "ultralow",
+ "source_preference": -1,
+ "fps": null,
+ "audio_channels": 2,
+ "height": null,
+ "quality": 1.0,
+ "has_drm": false,
+ "tbr": 30.797,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23ZZznK7ucsfIP0rW_wAk&ip=184.65.71.108&id=o-AF5FdjYiL4g-CkbZ54_ilBCjxrEgT73c7TlGEfvr2meT&itag=599&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=audio%2Fmp4&gir=yes&clen=2242064&dur=582.402&lmt=1705441248506215&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=ANDROID&txp=6318224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIgPzjWp5WhLuzU1BF9Zss3z1ypbGp65aPxDP433xEbtMYCIQDYnBdGBwokwLzPYeos1XwA_sJ6wMpfWRmv_MmSzzVZcA%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRgIhAIdNHwY7qZ_DjsmvAH3GfDsZvkQygk757LbYqhfbhihYAiEA2K4C8d_ghWmB6fQatxNumDoyqVqHmhA0LcO8X0Dkp2I%3D",
+ "width": null,
+ "language": "en",
+ "language_preference": -1,
+ "preference": null,
+ "ext": "m4a",
+ "vcodec": "none",
+ "acodec": "mp4a.40.5",
+ "dynamic_range": null,
+ "container": "m4a_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "audio only",
+ "aspect_ratio": null,
+ "http_headers": {},
+ "audio_ext": "m4a",
+ "video_ext": "none",
+ "vbr": 0,
+ "abr": 30.797,
+ "format": "599 - audio only (ultralow)"
+ },
+ {
+ "asr": 48000,
+ "filesize": 2350616,
+ "format_id": "600",
+ "format_note": "ultralow",
+ "source_preference": -1,
+ "fps": null,
+ "audio_channels": 2,
+ "height": null,
+ "quality": 1.0,
+ "has_drm": false,
+ "tbr": 32.294,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23ZZznK7ucsfIP0rW_wAk&ip=184.65.71.108&id=o-AF5FdjYiL4g-CkbZ54_ilBCjxrEgT73c7TlGEfvr2meT&itag=600&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=audio%2Fwebm&gir=yes&clen=2350616&dur=582.301&lmt=1705441327063661&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=ANDROID&txp=6318224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRgIhAPsYQ5yQbaPM7oDI9YUaZ6CnXw_QXPdGM25yFjZr134KAiEAzzU-qQD-9lX-WHmEk7l-1zbXJakGLKTfNGc1rKShkpE%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRgIhAIdNHwY7qZ_DjsmvAH3GfDsZvkQygk757LbYqhfbhihYAiEA2K4C8d_ghWmB6fQatxNumDoyqVqHmhA0LcO8X0Dkp2I%3D",
+ "width": null,
+ "language": "en",
+ "language_preference": -1,
+ "preference": null,
+ "ext": "webm",
+ "vcodec": "none",
+ "acodec": "opus",
+ "dynamic_range": null,
+ "container": "webm_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "audio only",
+ "aspect_ratio": null,
+ "http_headers": {},
+ "audio_ext": "webm",
+ "video_ext": "none",
+ "vbr": 0,
+ "abr": 32.294,
+ "format": "600 - audio only (ultralow)"
+ },
+ {
+ "asr": 22050,
+ "filesize": 3552258,
+ "format_id": "139",
+ "format_note": "low",
+ "source_preference": -1,
+ "fps": null,
+ "audio_channels": 2,
+ "height": null,
+ "quality": 2.0,
+ "has_drm": false,
+ "tbr": 48.794,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=139&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=audio%2Fmp4&gir=yes&clen=3552258&dur=582.402&lmt=1705441259000142&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=6318224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIgMbJoNILf7hPQlKjaYGtlD6nZkfD-K3KFvdjreHL95MMCIQCB7LXN_jApFpmBk98htmW5MaFv-I9MPbHwp8BfWAADqw%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": null,
+ "language": "en",
+ "language_preference": -1,
+ "preference": null,
+ "ext": "m4a",
+ "vcodec": "none",
+ "acodec": "mp4a.40.5",
+ "dynamic_range": null,
+ "container": "m4a_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "audio only",
+ "aspect_ratio": null,
+ "http_headers": {},
+ "audio_ext": "m4a",
+ "video_ext": "none",
+ "vbr": 0,
+ "abr": 48.794,
+ "format": "139 - audio only (low)"
+ },
+ {
+ "asr": 48000,
+ "filesize": 3488131,
+ "format_id": "249",
+ "format_note": "low",
+ "source_preference": -1,
+ "fps": null,
+ "audio_channels": 2,
+ "height": null,
+ "quality": 2.0,
+ "has_drm": false,
+ "tbr": 47.922,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23ZZznK7ucsfIP0rW_wAk&ip=184.65.71.108&id=o-AF5FdjYiL4g-CkbZ54_ilBCjxrEgT73c7TlGEfvr2meT&itag=249&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=audio%2Fwebm&gir=yes&clen=3488131&dur=582.301&lmt=1705441327177140&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=ANDROID&txp=6318224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIhAO0x_TsrdvaWwrEMNK_23yJiXmJIiQGl1qbSHoLsPzZPAiBA2LtboX-IKmwH1KOmCdnC1FLGuTdekjoAfOjEDW52UA%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRgIhAIdNHwY7qZ_DjsmvAH3GfDsZvkQygk757LbYqhfbhihYAiEA2K4C8d_ghWmB6fQatxNumDoyqVqHmhA0LcO8X0Dkp2I%3D",
+ "width": null,
+ "language": "en",
+ "language_preference": -1,
+ "preference": null,
+ "ext": "webm",
+ "vcodec": "none",
+ "acodec": "opus",
+ "dynamic_range": null,
+ "container": "webm_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "audio only",
+ "aspect_ratio": null,
+ "http_headers": {},
+ "audio_ext": "webm",
+ "video_ext": "none",
+ "vbr": 0,
+ "abr": 47.922,
+ "format": "249 - audio only (low)"
+ },
+ {
+ "asr": 48000,
+ "filesize": 4272694,
+ "format_id": "250",
+ "format_note": "low",
+ "source_preference": -1,
+ "fps": null,
+ "audio_channels": 2,
+ "height": null,
+ "quality": 2.0,
+ "has_drm": false,
+ "tbr": 58.7,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23ZZznK7ucsfIP0rW_wAk&ip=184.65.71.108&id=o-AF5FdjYiL4g-CkbZ54_ilBCjxrEgT73c7TlGEfvr2meT&itag=250&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=audio%2Fwebm&gir=yes&clen=4272694&dur=582.301&lmt=1705441327109569&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=ANDROID&txp=6318224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRAIgFzpZfKGibXfdRrK1xr5m98A4NCWoDg2ZHFAjURdhaFQCIE8gxwn8ZWkqxPLCoJJTK9OhZr7i6fRRcR9Z3KhCdVHC&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRgIhAIdNHwY7qZ_DjsmvAH3GfDsZvkQygk757LbYqhfbhihYAiEA2K4C8d_ghWmB6fQatxNumDoyqVqHmhA0LcO8X0Dkp2I%3D",
+ "width": null,
+ "language": "en",
+ "language_preference": -1,
+ "preference": null,
+ "ext": "webm",
+ "vcodec": "none",
+ "acodec": "opus",
+ "dynamic_range": null,
+ "container": "webm_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "audio only",
+ "aspect_ratio": null,
+ "http_headers": {},
+ "audio_ext": "webm",
+ "video_ext": "none",
+ "vbr": 0,
+ "abr": 58.7,
+ "format": "250 - audio only (low)"
+ },
+ {
+ "asr": 44100,
+ "filesize": 9425155,
+ "format_id": "140",
+ "format_note": "medium",
+ "source_preference": -1,
+ "fps": null,
+ "audio_channels": 2,
+ "height": null,
+ "quality": 3.0,
+ "has_drm": false,
+ "tbr": 129.481,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=140&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=audio%2Fmp4&gir=yes&clen=9425155&dur=582.333&lmt=1705441258942374&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=6318224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIgQJMe3IBXC_MDoxK1HE4_hOneKFrU4WuDpqrJLk3OjW0CIQCQ8PM5dQjyZgSARTggysTr69FrS5IcF2fZOtdqABduzw%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": null,
+ "language": "en",
+ "language_preference": -1,
+ "preference": null,
+ "ext": "m4a",
+ "vcodec": "none",
+ "acodec": "mp4a.40.2",
+ "dynamic_range": null,
+ "container": "m4a_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "audio only",
+ "aspect_ratio": null,
+ "http_headers": {},
+ "audio_ext": "m4a",
+ "video_ext": "none",
+ "vbr": 0,
+ "abr": 129.481,
+ "format": "140 - audio only (medium)"
+ },
+ {
+ "asr": 48000,
+ "filesize": 8264649,
+ "format_id": "251",
+ "format_note": "medium",
+ "source_preference": -1,
+ "fps": null,
+ "audio_channels": 2,
+ "height": null,
+ "quality": 3.0,
+ "has_drm": false,
+ "tbr": 113.544,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23ZZznK7ucsfIP0rW_wAk&ip=184.65.71.108&id=o-AF5FdjYiL4g-CkbZ54_ilBCjxrEgT73c7TlGEfvr2meT&itag=251&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=audio%2Fwebm&gir=yes&clen=8264649&dur=582.301&lmt=1705441327139531&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=ANDROID&txp=6318224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRgIhAKheHfJYdKMVCKmhCmKHRc_Dx9THKe1AxARvtPWpEXHaAiEAmyg7s-nuvB0Qlq67_OWk6UdaptzYtVujTE0tTAvD2F4%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRgIhAIdNHwY7qZ_DjsmvAH3GfDsZvkQygk757LbYqhfbhihYAiEA2K4C8d_ghWmB6fQatxNumDoyqVqHmhA0LcO8X0Dkp2I%3D",
+ "width": null,
+ "language": "en",
+ "language_preference": -1,
+ "preference": null,
+ "ext": "webm",
+ "vcodec": "none",
+ "acodec": "opus",
+ "dynamic_range": null,
+ "container": "webm_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "audio only",
+ "aspect_ratio": null,
+ "http_headers": {},
+ "audio_ext": "webm",
+ "video_ext": "none",
+ "vbr": 0,
+ "abr": 113.544,
+ "format": "251 - audio only (medium)"
+ },
+ {
+ "asr": null,
+ "filesize": 2407895,
+ "format_id": "597",
+ "format_note": "144p",
+ "source_preference": -1,
+ "fps": 12,
+ "audio_channels": null,
+ "height": 144,
+ "quality": 0.0,
+ "has_drm": false,
+ "tbr": 33.084,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23ZZznK7ucsfIP0rW_wAk&ip=184.65.71.108&id=o-AF5FdjYiL4g-CkbZ54_ilBCjxrEgT73c7TlGEfvr2meT&itag=597&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fmp4&gir=yes&clen=2407895&dur=582.248&lmt=1705442098175374&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=ANDROID&txp=6319224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIhAK_ZvxSCyhy0g8ReQZsqbs0EMRt7XS89BarIcD3WDRvtAiB3suU29Sd1Iomkf_wF0TqzXPq4dEsNG4lvJ4JXcj18sA%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRgIhAIdNHwY7qZ_DjsmvAH3GfDsZvkQygk757LbYqhfbhihYAiEA2K4C8d_ghWmB6fQatxNumDoyqVqHmhA0LcO8X0Dkp2I%3D",
+ "width": 256,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "mp4",
+ "vcodec": "avc1.4d400b",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "mp4_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "256x144",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 33.084,
+ "format": "597 - 256x144 (144p)"
+ },
+ {
+ "format_id": "602",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/602/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/wft/1/sgovp/clen%3D2070301%3Bdur%3D582.249%3Bgir%3Dyes%3Bitag%3D598%3Blmt%3D1705442118702877/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/631F224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,wft,sgovp,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRQIgIy3w8Sr5PYKGemSScmdCie_OalRKZxFjiB7JHHhN3roCIQDRHRUgVSprFZygIH1txAVeHe0RNlD8qOpUldRBJRqclQ%3D%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRgIhAIUigAsP21VeXHGJyFS9o4jQLqC7IexKQTcVLk-IAzD0AiEAsINmuLR_fxOqWNtjunyjbKsbgY3vdkR1Csoynia1Uns%3D/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "tbr": 94.431,
+ "ext": "mp4",
+ "fps": 12.0,
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": 0,
+ "has_drm": false,
+ "width": 256,
+ "height": 144,
+ "vcodec": "vp09.00.10.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "source_preference": -1,
+ "resolution": "256x144",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 94.431,
+ "format": "602 - 256x144"
+ },
+ {
+ "asr": null,
+ "filesize": 2070301,
+ "format_id": "598",
+ "format_note": "144p",
+ "source_preference": -1,
+ "fps": 12,
+ "audio_channels": null,
+ "height": 144,
+ "quality": 0.0,
+ "has_drm": false,
+ "tbr": 28.445,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23ZZznK7ucsfIP0rW_wAk&ip=184.65.71.108&id=o-AF5FdjYiL4g-CkbZ54_ilBCjxrEgT73c7TlGEfvr2meT&itag=598&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fwebm&gir=yes&clen=2070301&dur=582.249&lmt=1705442118702877&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=ANDROID&txp=631F224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIgQEfkfqB19QGDfPeDiuD1LOdmG5mfjsr1YFc4gQqJqOcCIQChK-xs80ymX62-yMW1dqPlS86kVIDJnE1O8ZAENZug6Q%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRgIhAIdNHwY7qZ_DjsmvAH3GfDsZvkQygk757LbYqhfbhihYAiEA2K4C8d_ghWmB6fQatxNumDoyqVqHmhA0LcO8X0Dkp2I%3D",
+ "width": 256,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "webm",
+ "vcodec": "vp9",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "webm_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "256x144",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "webm",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 28.445,
+ "format": "598 - 256x144 (144p)"
+ },
+ {
+ "format_id": "269",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/269/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/sgovp/clen%3D6537008%3Bdur%3D582.289%3Bgir%3Dyes%3Bitag%3D160%3Blmt%3D1705442097174021/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/6319224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,sgovp,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRQIgORsp3UfGesdndN1aXs7AmxWVW1tvW0Q1QFkc_3xdUtsCIQD8LLr9wiEY9Cka883z0oDQEnUWBL-EmE-LEUn4RXfWYQ%3D%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRgIhANdXUbkh2M_PpL4Ijgqjq6bRH64-I9opv1p5qRSPazncAiEA1TKYM3WaybEd8gdiJUk1YtmbCoPfFVm9X0lLFGROQWQ%3D/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "tbr": 201.919,
+ "ext": "mp4",
+ "fps": 24.0,
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": 0,
+ "has_drm": false,
+ "width": 256,
+ "height": 144,
+ "vcodec": "avc1.4D400C",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "source_preference": -1,
+ "resolution": "256x144",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 201.919,
+ "format": "269 - 256x144"
+ },
+ {
+ "asr": null,
+ "filesize": 6537008,
+ "format_id": "160",
+ "format_note": "144p",
+ "source_preference": -1,
+ "fps": 24,
+ "audio_channels": null,
+ "height": 144,
+ "quality": 0.0,
+ "has_drm": false,
+ "tbr": 89.811,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=160&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fmp4&gir=yes&clen=6537008&dur=582.289&lmt=1705442097174021&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=6319224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRAIgN5xpT-BBnkxVvedxNs9sRdI4JuXVj6ztGZl9n2IynYoCIEvJuPwl4fLp-eaTAzWeaf63rj7n1fOvdVT-GfWjxeH4&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": 256,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "mp4",
+ "vcodec": "avc1.4D400C",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "mp4_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "256x144",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 89.811,
+ "format": "160 - 256x144 (144p)"
+ },
+ {
+ "format_id": "603",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/603/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/wft/1/sgovp/clen%3D6584603%3Bdur%3D582.290%3Bgir%3Dyes%3Bitag%3D278%3Blmt%3D1705442116315246/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/631F224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,wft,sgovp,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRgIhAO9C3APNxStsV4W8-dvJ0HpRpeLxOJW2jC7r2MTFF8WPAiEAsfN3HqfVHblotNU2vxB8BKKZ5w9Ku_1WM-vLk5IniEQ%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRgIhAIq-cM7RFgju53motvi5WuZQ6mliOq4baFVb0StR7KayAiEAnP32_n-EEZBzWvgFJbERWxBRHhRVfMkUV_cqGQzFAtE%3D/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "tbr": 179.819,
+ "ext": "mp4",
+ "fps": 24.0,
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": 0,
+ "has_drm": false,
+ "width": 256,
+ "height": 144,
+ "vcodec": "vp09.00.11.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "source_preference": -1,
+ "resolution": "256x144",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 179.819,
+ "format": "603 - 256x144"
+ },
+ {
+ "asr": null,
+ "filesize": 6584603,
+ "format_id": "278",
+ "format_note": "144p",
+ "source_preference": -1,
+ "fps": 24,
+ "audio_channels": null,
+ "height": 144,
+ "quality": 0.0,
+ "has_drm": false,
+ "tbr": 90.464,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=278&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fwebm&gir=yes&clen=6584603&dur=582.290&lmt=1705442116315246&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=631F224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIgAijFrojddeA1uI2ym7gQIGwnGD7dm-V7scLgOPTlEQcCIQDvhQa2hVZNIPBUeFpdR_V3_C4Lm_fE-DNmMCTXf1N_ag%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": 256,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "webm",
+ "vcodec": "vp09.00.11.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "webm_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "256x144",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "webm",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 90.464,
+ "format": "278 - 256x144 (144p)"
+ },
+ {
+ "format_id": "229",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/229/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/sgovp/clen%3D14938064%3Bdur%3D582.289%3Bgir%3Dyes%3Bitag%3D133%3Blmt%3D1705442097770962/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/6319224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,sgovp,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRQIhAIVNLkJ1nWePnf0genOGXGAA1opeCcbHdo3xKeOoVDStAiAniI58mRUcJXae-vBWndbe7nhwXrcar-GMKIcGsZcYOg%3D%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRAIhAPqes6IUf0F5q4ItAnSBMQ4P_FjkJOFdn4hE01QhQjZrAh8UA5R5u2aZTi_dfWjarDXxNbdBwbYUnd2k7pH2hHll/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "tbr": 328.263,
+ "ext": "mp4",
+ "fps": 24.0,
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": 5,
+ "has_drm": false,
+ "width": 426,
+ "height": 240,
+ "vcodec": "avc1.4D4015",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "source_preference": -1,
+ "resolution": "426x240",
+ "aspect_ratio": 1.77,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 328.263,
+ "format": "229 - 426x240"
+ },
+ {
+ "asr": null,
+ "filesize": 14938064,
+ "format_id": "133",
+ "format_note": "240p",
+ "source_preference": -1,
+ "fps": 24,
+ "audio_channels": null,
+ "height": 240,
+ "quality": 5.0,
+ "has_drm": false,
+ "tbr": 205.232,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=133&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fmp4&gir=yes&clen=14938064&dur=582.289&lmt=1705442097770962&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=6319224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRgIhANH9WKQowvFEFnvoGCz_Vn1anCa9YqZRCBHz84xex_G6AiEA-P6VSAjRT0RccCbFcqN_0hOWTXI9MvelKOFUulTicyc%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": 426,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "mp4",
+ "vcodec": "avc1.4D4015",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "mp4_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "426x240",
+ "aspect_ratio": 1.77,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 205.232,
+ "format": "133 - 426x240 (240p)"
+ },
+ {
+ "format_id": "604",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/604/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/wft/1/sgovp/clen%3D12758651%3Bdur%3D582.290%3Bgir%3Dyes%3Bitag%3D242%3Blmt%3D1705442116412531/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/631F224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,wft,sgovp,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRAIgdsQUgIA4kQX7OzJ4VtsY6e3Z6CTIfHCxV8UbM4jfItMCIF0bTTDbt4I13uzaI00mjDCai6qr_sr6UV7E8f1sIhim/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRAIgZRU-HyLJa9GUlC2dtoiNXowPHMLCPw7dBhftztN5JF4CICaTHBIc300wMqA_o2zjmTYIeWOiEuBGBKxQIgDLlZj0/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "tbr": 322.938,
+ "ext": "mp4",
+ "fps": 24.0,
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": 5,
+ "has_drm": false,
+ "width": 426,
+ "height": 240,
+ "vcodec": "vp09.00.20.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "source_preference": -1,
+ "resolution": "426x240",
+ "aspect_ratio": 1.77,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 322.938,
+ "format": "604 - 426x240"
+ },
+ {
+ "asr": null,
+ "filesize": 12758651,
+ "format_id": "242",
+ "format_note": "240p",
+ "source_preference": -1,
+ "fps": 24,
+ "audio_channels": null,
+ "height": 240,
+ "quality": 5.0,
+ "has_drm": false,
+ "tbr": 175.289,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=242&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fwebm&gir=yes&clen=12758651&dur=582.290&lmt=1705442116412531&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=631F224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRAIgfccDqbll4oecYPIYeokgj9NDGFFzy5wUcVUcUPnkL-8CIB6wKACWbMy_UTS7ng7sZ-yFKkLmjuBsyqBlX6fmfmGW&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": 426,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "webm",
+ "vcodec": "vp09.00.20.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "webm_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "426x240",
+ "aspect_ratio": 1.77,
+ "http_headers": {},
+ "video_ext": "webm",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 175.289,
+ "format": "242 - 426x240 (240p)"
+ },
+ {
+ "format_id": "230",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/230/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/sgovp/clen%3D32652201%3Bdur%3D582.289%3Bgir%3Dyes%3Bitag%3D134%3Blmt%3D1705442102480890/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/6319224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,sgovp,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRQIhANQ8uAftzj-0ttP53zjrqKmZKD_joOeZlOAExMBPRaruAiA6X9MOEJSrkEOzBL7VNyHn0WBlYk1dw8q7S_GT3nMgnw%3D%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRQIgVXuspj2giIusrC2B8jwWl6ybKYtPzdS3Wea39ZyLO-YCIQC9WfxskjXDX4703p-Jb6roh92IMYKv7kohRpn7pIGSBA%3D%3D/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "tbr": 757.292,
+ "ext": "mp4",
+ "fps": 24.0,
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": 6,
+ "has_drm": false,
+ "width": 640,
+ "height": 360,
+ "vcodec": "avc1.4D401E",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "source_preference": -1,
+ "resolution": "640x360",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 757.292,
+ "format": "230 - 640x360"
+ },
+ {
+ "asr": null,
+ "filesize": 32652201,
+ "format_id": "134",
+ "format_note": "360p",
+ "source_preference": -1,
+ "fps": 24,
+ "audio_channels": null,
+ "height": 360,
+ "quality": 6.0,
+ "has_drm": false,
+ "tbr": 448.604,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=134&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fmp4&gir=yes&clen=32652201&dur=582.289&lmt=1705442102480890&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=6319224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIhAP7ECj5E6BibfqWMDYIsqeuJjM5_c8PDCyNpTkifYGMMAiACou7VKLCedJTkxLFrkPz_C_fpe7xxxLZD5E-NrLoyyw%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": 640,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "mp4",
+ "vcodec": "avc1.4D401E",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "mp4_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "640x360",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 448.604,
+ "format": "134 - 640x360 (360p)"
+ },
+ {
+ "asr": 44100,
+ "filesize": null,
+ "format_id": "18",
+ "format_note": "360p",
+ "source_preference": -1,
+ "fps": 24,
+ "audio_channels": 2,
+ "height": 360,
+ "quality": 6.0,
+ "has_drm": false,
+ "tbr": 577.449,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23ZZznK7ucsfIP0rW_wAk&ip=184.65.71.108&id=o-AF5FdjYiL4g-CkbZ54_ilBCjxrEgT73c7TlGEfvr2meT&itag=18&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fmp4&cnr=14&ratebypass=yes&dur=582.333&lmt=1705442106949238&mt=1706495125&fvip=3&fexp=24007246&c=ANDROID&txp=6319224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=AJfQdSswRAIgH-Tvs4w8hlYbWd9tbsD8nCWjCVKqf-O8Bp_rYIpLMKUCIGxF4A53V8Zaa2i96Vfp4YT0HJN7selhU_yrDGFMjZVA&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRgIhAIdNHwY7qZ_DjsmvAH3GfDsZvkQygk757LbYqhfbhihYAiEA2K4C8d_ghWmB6fQatxNumDoyqVqHmhA0LcO8X0Dkp2I%3D",
+ "width": 640,
+ "language": "en",
+ "language_preference": -1,
+ "preference": null,
+ "ext": "mp4",
+ "vcodec": "avc1.42001E",
+ "acodec": "mp4a.40.2",
+ "dynamic_range": "SDR",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "640x360",
+ "aspect_ratio": 1.78,
+ "filesize_approx": 43017640,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "vbr": null,
+ "abr": null,
+ "format": "18 - 640x360 (360p)"
+ },
+ {
+ "format_id": "605",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/605/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/wft/1/sgovp/clen%3D22260935%3Bdur%3D582.290%3Bgir%3Dyes%3Bitag%3D243%3Blmt%3D1705442115397901/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/631F224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,wft,sgovp,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRAIgBhnUYNq4uR76lwwkRa9thLaF8EVclG8YsDzoQpHUfy0CIBdyb-RVgXlOSo9QPF36CEK7wkqirlvlV2OL0BLTk8Ae/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRQIhAMqt7KXDGpMN5bnzvxlX0m5EM8nyBdHKYxTdbyTouILRAiAawvTHQaMQRjX45qz3EHhHmksrG3UqFVtRLjzBb6mEtA%3D%3D/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "tbr": 628.879,
+ "ext": "mp4",
+ "fps": 24.0,
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": 6,
+ "has_drm": false,
+ "width": 640,
+ "height": 360,
+ "vcodec": "vp09.00.21.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "source_preference": -1,
+ "resolution": "640x360",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 628.879,
+ "format": "605 - 640x360"
+ },
+ {
+ "asr": null,
+ "filesize": 22260935,
+ "format_id": "243",
+ "format_note": "360p",
+ "source_preference": -1,
+ "fps": 24,
+ "audio_channels": null,
+ "height": 360,
+ "quality": 6.0,
+ "has_drm": false,
+ "tbr": 305.839,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=243&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fwebm&gir=yes&clen=22260935&dur=582.290&lmt=1705442115397901&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=631F224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRAIgdzLPkertxxeDWhgYAxhAFZ0JLRHB1frabc5dXgUznYMCIBNxGHLHjpFlggEzizF8fOgJSnt4TTvNK49XZQG4P9jT&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": 640,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "webm",
+ "vcodec": "vp09.00.21.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "webm_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "640x360",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "webm",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 305.839,
+ "format": "243 - 640x360 (360p)"
+ },
+ {
+ "format_id": "231",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/231/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/sgovp/clen%3D66171838%3Bdur%3D582.289%3Bgir%3Dyes%3Bitag%3D135%3Blmt%3D1705442099222466/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/6319224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,sgovp,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRgIhAJn4KGXiDtuCol8WCho8gWscCGzEMFuh6s6Zi6MAUqYWAiEApfn9QkOsRw1qqIU6wjrxjjlddZy-TT9IYAW_CZpVZAE%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRQIhANe43rw3hW1W9LFUUquhS3FVPXyUD9gzZOm-wkeFjQazAiANXLU7holjBwsubTRtx-5L4nW3nJ-Sy_A96p3zGw5yJw%3D%3D/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "tbr": 1332.057,
+ "ext": "mp4",
+ "fps": 24.0,
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": 7,
+ "has_drm": false,
+ "width": 854,
+ "height": 480,
+ "vcodec": "avc1.4D401E",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "source_preference": -1,
+ "resolution": "854x480",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 1332.057,
+ "format": "231 - 854x480"
+ },
+ {
+ "asr": null,
+ "filesize": 66171838,
+ "format_id": "135",
+ "format_note": "480p",
+ "source_preference": -1,
+ "fps": 24,
+ "audio_channels": null,
+ "height": 480,
+ "quality": 7.0,
+ "has_drm": false,
+ "tbr": 909.127,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=135&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fmp4&gir=yes&clen=66171838&dur=582.289&lmt=1705442099222466&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=6319224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRAIgCeVjGUlbnvHtwqztq4D_J-zqEllWxeD7Omv7avAmNfoCIDX1-T2hP_kMCdCglICoFsyyA5OAlcx03wSzJJIA3-Ek&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": 854,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "mp4",
+ "vcodec": "avc1.4D401E",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "mp4_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "854x480",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 909.127,
+ "format": "135 - 854x480 (480p)"
+ },
+ {
+ "format_id": "606",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/606/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/wft/1/sgovp/clen%3D39530767%3Bdur%3D582.290%3Bgir%3Dyes%3Bitag%3D244%3Blmt%3D1705442120064036/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/631F224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,wft,sgovp,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRQIhAPfP1dUeil-qKWsVhhjRNjvNaSiLaif_Jo3d51op_NiXAiAXK2VNqMFsrCBLPAKH-gufp1dEFiyRomp014iY0lS91w%3D%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRAIgOSzKV3vVNbT4mu9khYkleROV3DtrHRQK5thqRAlu9QcCIEJX-GR8tNH4I5pYHENPM8AufZt-bBc7p0w4XqJuZWZK/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "tbr": 1143.402,
+ "ext": "mp4",
+ "fps": 24.0,
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": 7,
+ "has_drm": false,
+ "width": 854,
+ "height": 480,
+ "vcodec": "vp09.00.30.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "source_preference": -1,
+ "resolution": "854x480",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 1143.402,
+ "format": "606 - 854x480"
+ },
+ {
+ "asr": null,
+ "filesize": 39530767,
+ "format_id": "244",
+ "format_note": "480p",
+ "source_preference": -1,
+ "fps": 24,
+ "audio_channels": null,
+ "height": 480,
+ "quality": 7.0,
+ "has_drm": false,
+ "tbr": 543.107,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=244&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fwebm&gir=yes&clen=39530767&dur=582.290&lmt=1705442120064036&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=631F224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRgIhAOc3t7KNMcMXwWC19tIIsUm_QrRuhdzDoDQ9a7PrqmI2AiEA-p0sqQva3Lc7d0ULtq3dHGf2nDSOd__n0FhDJ2XIpyY%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": 854,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "webm",
+ "vcodec": "vp09.00.30.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "webm_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "854x480",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "webm",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 543.107,
+ "format": "244 - 854x480 (480p)"
+ },
+ {
+ "asr": 44100,
+ "filesize": null,
+ "format_id": "22",
+ "format_note": "720p",
+ "source_preference": -5,
+ "fps": 24,
+ "audio_channels": 2,
+ "height": 720,
+ "quality": 8.0,
+ "has_drm": false,
+ "tbr": 1944.429,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23ZZznK7ucsfIP0rW_wAk&ip=184.65.71.108&id=o-AF5FdjYiL4g-CkbZ54_ilBCjxrEgT73c7TlGEfvr2meT&itag=22&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fmp4&cnr=14&ratebypass=yes&dur=582.333&lmt=1705442115314438&mt=1706495125&fvip=3&fexp=24007246&c=ANDROID&txp=6318224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=AJfQdSswRQIhAKmufadG8cYU3Obyq3SjQ8oYQrgFKltcroNffADWJY5HAiBA7wVxejLbvN0OHAcANxZU2O_FVqxPA7ck50Iz6tELFA%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRgIhAIdNHwY7qZ_DjsmvAH3GfDsZvkQygk757LbYqhfbhihYAiEA2K4C8d_ghWmB6fQatxNumDoyqVqHmhA0LcO8X0Dkp2I%3D",
+ "width": 1280,
+ "language": "en",
+ "language_preference": -1,
+ "preference": null,
+ "ext": "mp4",
+ "vcodec": "avc1.64001F",
+ "acodec": "mp4a.40.2",
+ "dynamic_range": "SDR",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "1280x720",
+ "aspect_ratio": 1.78,
+ "filesize_approx": 144852182,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "vbr": null,
+ "abr": null,
+ "format": "22 - 1280x720 (720p)"
+ },
+ {
+ "format_id": "232",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/232/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/sgovp/clen%3D132182825%3Bdur%3D582.289%3Bgir%3Dyes%3Bitag%3D136%3Blmt%3D1705442100378662/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/6319224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,sgovp,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRgIhALdZDgVrxuaXJrlN9CNvBj56jfqsOqUqLdbN8V-I0FYxAiEAvs1tulEdcTtj9npUjcPppCtblJzqhYIQf5twxwyF6qY%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRAIgH2TvAAJj4lfHKcgIk9OWPVDjxr2aMSqLo5cACd6E3YQCIGOvYOwOioPYysnhg_PKBRveLQlq9AxqTIRoByuYFJme/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "tbr": 2498.751,
+ "ext": "mp4",
+ "fps": 24.0,
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": 8,
+ "has_drm": false,
+ "width": 1280,
+ "height": 720,
+ "vcodec": "avc1.64001F",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "source_preference": -1,
+ "resolution": "1280x720",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 2498.751,
+ "format": "232 - 1280x720"
+ },
+ {
+ "asr": null,
+ "filesize": 132182825,
+ "format_id": "136",
+ "format_note": "720p",
+ "source_preference": -1,
+ "fps": 24,
+ "audio_channels": null,
+ "height": 720,
+ "quality": 8.0,
+ "has_drm": false,
+ "tbr": 1816.044,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=136&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fmp4&gir=yes&clen=132182825&dur=582.289&lmt=1705442100378662&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=6319224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRgIhAL06jAwcH16mubeKAAVykG0d-CsOR_AWIl-BJOqW0ycrAiEAyV9XRg1JrQl8bFrrMVirncT4AFdjf_ox6J4hivxxWws%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": 1280,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "mp4",
+ "vcodec": "avc1.64001F",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "mp4_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "1280x720",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 1816.044,
+ "format": "136 - 1280x720 (720p)"
+ },
+ {
+ "format_id": "609",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/609/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/wft/1/sgovp/clen%3D71768264%3Bdur%3D582.290%3Bgir%3Dyes%3Bitag%3D247%3Blmt%3D1705442115293982/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/631F224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,wft,sgovp,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRQIgJlhSWSy6NcacUVNK_GhJtx9JeQXGc5SWlTscZegolPMCIQClaDFGPKb5ddH_XVK-YJqMgQDGtiA1a0G5KejPLk5Ndw%3D%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRAIgDkn4_sr8-mD3AfsZn0DdNulEOdNhprGRi9LZnBz4BnICIHGJuSqgmsHt9wIUlDmX99KF6Y635sTIzpnzovQo0v1J/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "tbr": 2147.06,
+ "ext": "mp4",
+ "fps": 24.0,
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": 8,
+ "has_drm": false,
+ "width": 1280,
+ "height": 720,
+ "vcodec": "vp09.00.31.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "source_preference": -1,
+ "resolution": "1280x720",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 2147.06,
+ "format": "609 - 1280x720"
+ },
+ {
+ "asr": null,
+ "filesize": 71768264,
+ "format_id": "247",
+ "format_note": "720p",
+ "source_preference": -1,
+ "fps": 24,
+ "audio_channels": null,
+ "height": 720,
+ "quality": 8.0,
+ "has_drm": false,
+ "tbr": 986.014,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=247&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fwebm&gir=yes&clen=71768264&dur=582.290&lmt=1705442115293982&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=631F224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRAIgOAAlf5LQm0XlnDpccyj0OP4M5ybPf7B-qAQBWgZ834gCIDyNLUJvwR3l0G5n1meeZo7mwcWaodzIthZoJIfvncA_&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": 1280,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "webm",
+ "vcodec": "vp09.00.31.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "webm_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "1280x720",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "webm",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 986.014,
+ "format": "247 - 1280x720 (720p)"
+ },
+ {
+ "format_id": "270",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/270/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/sgovp/clen%3D279799316%3Bdur%3D582.289%3Bgir%3Dyes%3Bitag%3D137%3Blmt%3D1705442109297038/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/6319224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,sgovp,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRQIgGadphIHanE95t2MGfIf5QgN9SpZ2BJKpf-XT_jfinpACIQDJR2heL3mtLswoDHrO5Inhp-lzznoaIsKg0qs1UapYAA%3D%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRQIhAM7KZIiMIAIN0ryBot1-ClVWT1JzPWFNyJZZxppqbESFAiBe6mArxaHQh9FqqEk5SathTM1bv9LmVoEdTdGkFwwRJQ%3D%3D/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "tbr": 5171.578,
+ "ext": "mp4",
+ "fps": 24.0,
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": 9,
+ "has_drm": false,
+ "width": 1920,
+ "height": 1080,
+ "vcodec": "avc1.640028",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "source_preference": -1,
+ "resolution": "1920x1080",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 5171.578,
+ "format": "270 - 1920x1080"
+ },
+ {
+ "asr": null,
+ "filesize": 279799316,
+ "format_id": "137",
+ "format_note": "1080p",
+ "source_preference": -1,
+ "fps": 24,
+ "audio_channels": null,
+ "height": 1080,
+ "quality": 9.0,
+ "has_drm": false,
+ "tbr": 3844.129,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=137&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fmp4&gir=yes&clen=279799316&dur=582.289&lmt=1705442109297038&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=6319224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRAIgdfvqRfI4uOqsSzxwy6oeA6rpjqW1fF1aGRLtmkhycxcCICl5OSwnFCQJJqXlYn2HVFUg-A1Z38NGSNieEoNAJX7R&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": 1920,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "mp4",
+ "vcodec": "avc1.640028",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "mp4_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "1920x1080",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 3844.129,
+ "format": "137 - 1920x1080 (1080p)"
+ },
+ {
+ "format_id": "614",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/614/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/wft/1/sgovp/clen%3D126606213%3Bdur%3D582.290%3Bgir%3Dyes%3Bitag%3D248%3Blmt%3D1705442116086720/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/631F224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,wft,sgovp,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRAIgOtZttQAdbK687Ebvzf4V5d1mOwe5qLj5mKjWqIlVa34CICO1GBH6CjsUZdKTN6wf9cGXNLzyVqrtS4aasZBWvkWc/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRgIhAOudk5-76OEQjVacqys4_f2SS4qSR4AMtDzPLLPmn3agAiEAi8RwQLQa5R4kq1wiBsJVQRgDzB9MDRBofH5Jz3oxoyI%3D/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "tbr": 3214.656,
+ "ext": "mp4",
+ "fps": 24.0,
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": 9,
+ "has_drm": false,
+ "width": 1920,
+ "height": 1080,
+ "vcodec": "vp09.00.40.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "source_preference": -1,
+ "resolution": "1920x1080",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 3214.656,
+ "format": "614 - 1920x1080"
+ },
+ {
+ "asr": null,
+ "filesize": 126606213,
+ "format_id": "248",
+ "format_note": "1080p",
+ "source_preference": -1,
+ "fps": 24,
+ "audio_channels": null,
+ "height": 1080,
+ "quality": 9.0,
+ "has_drm": false,
+ "tbr": 1739.424,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=248&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fwebm&gir=yes&clen=126606213&dur=582.290&lmt=1705442116086720&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=631F224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRgIhAKs_UJRJ-JOodWnGkmdqHIv1Rjpa_OEh_1a1ZYZTiwaNAiEA9h31IBRRaEeTbaGiKEkCO3sIdYMfpKMc8NxweuEmLKQ%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": 1920,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "webm",
+ "vcodec": "vp09.00.40.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "webm_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "1920x1080",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "webm",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 1739.424,
+ "format": "248 - 1920x1080 (1080p)"
+ },
+ {
+ "format_id": "620",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/620/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/wft/1/sgovp/clen%3D473726761%3Bdur%3D582.290%3Bgir%3Dyes%3Bitag%3D271%3Blmt%3D1705442124346309/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/631F224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,wft,sgovp,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRQIgAYgySlJMJx619APO9rr0T4PDyaM2qTrU9c1WtUm2UiICIQDeR34COR3eDnY2mwOjvTSEKDTtF_64VS6kmisq6yzlxQ%3D%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRQIhALOBajfqCNStXkvi21BEcludGhvD6KuHCGIzURLoJSHFAiAsXGLNURKOWivUdx_mSHhLQLR3reR1nUJomlvJ6pKXlg%3D%3D/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "tbr": 8891.797,
+ "ext": "mp4",
+ "fps": 24.0,
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": 10,
+ "has_drm": false,
+ "width": 2560,
+ "height": 1440,
+ "vcodec": "vp09.00.50.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "source_preference": -1,
+ "resolution": "2560x1440",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 8891.797,
+ "format": "620 - 2560x1440"
+ },
+ {
+ "asr": null,
+ "filesize": 473726761,
+ "format_id": "271",
+ "format_note": "1440p",
+ "source_preference": -1,
+ "fps": 24,
+ "audio_channels": null,
+ "height": 1440,
+ "quality": 10.0,
+ "has_drm": false,
+ "tbr": 6508.465,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=271&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fwebm&gir=yes&clen=473726761&dur=582.290&lmt=1705442124346309&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=631F224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIgF78UCudbpjsqJWvAzbEuhIDxBgdUsTA2tItViF0JuVUCIQCkR9nACCgd7nYe-7ujSwHq1l2EcPVj-rTj75FFi1rZ2g%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": 2560,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "webm",
+ "vcodec": "vp09.00.50.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "webm_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "2560x1440",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "webm",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 6508.465,
+ "format": "271 - 2560x1440 (1440p)"
+ },
+ {
+ "format_id": "625",
+ "format_index": null,
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/itag/625/source/youtube/requiressl/yes/ratebypass/yes/pfa/1/wft/1/sgovp/clen%3D897486343%3Bdur%3D582.290%3Bgir%3Dyes%3Bitag%3D313%3Blmt%3D1705442131826507/rqh/1/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/dover/13/txp/631F224/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,pfa,wft,sgovp,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRQIhAKCvk4yb0OjGri1sJxbu8D9u6XfLZkwd137v0BKvB6h7AiBcFakOXPzVdmsZY6JkMaOckElhj9_aP4wVjAW9rE8-vg%3D%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRQIgHRrC6BZ-G37CeySKt6jdthbED5dXuiv_uITsuqL_GbACIQDF6Lc1jZ5q9bkXN4OPZmPrYl7lkPCSrnrnuIm7MJ4XQA%3D%3D/playlist/index.m3u8",
+ "manifest_url": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/xpc/EgVo2aDSNQ%3D%3D/playback_host/rr2---sn-ni5f-t8g6.googlevideo.com/mh/Pz/mm/31%2C26/mn/sn-ni5f-t8g6%2Csn-vgqskn6s/ms/au%2Conr/mv/m/mvi/2/pl/22/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1712500/vprv/1/go/1/mt/1706495125/fvip/3/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AJfQdSswRQIhAJxx9gvD4fp863z3-0A8QfmmNPA_HtAofRNzExQtvSOTAiBVxu9ODg_Lio2zwG7AO3Efx7NOGQRWWBfKD8j_gG9hsA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AAO5W4owRgIhAJgFS-NygOqVmlS-JjNRCxRp6g6p5nQvd31q-Il43qBBAiEAzMV-kH4PCy2QrgkPXDLHAcMrCLl3MrSYl2S9MqADpx4%3D/file/index.m3u8",
+ "tbr": 17120.78,
+ "ext": "mp4",
+ "fps": 24.0,
+ "protocol": "m3u8_native",
+ "preference": null,
+ "quality": 11,
+ "has_drm": false,
+ "width": 3840,
+ "height": 2160,
+ "vcodec": "vp09.00.50.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "source_preference": -1,
+ "resolution": "3840x2160",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "mp4",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 17120.78,
+ "format": "625 - 3840x2160"
+ },
+ {
+ "asr": null,
+ "filesize": 897486343,
+ "format_id": "313",
+ "format_note": "2160p",
+ "source_preference": -1,
+ "fps": 24,
+ "audio_channels": null,
+ "height": 2160,
+ "quality": 11.0,
+ "has_drm": false,
+ "tbr": 12330.438,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=313&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fwebm&gir=yes&clen=897486343&dur=582.290&lmt=1705442131826507&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=631F224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIge4wXEaYaDt1t9iDHaO0TcxNf9RJiUKcHBwUclcvKFw0CIQD70la1_R0wLekw4Zo0hXK-EyxT3DftYLR7pDkk_Sz2lA%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": 3840,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "webm",
+ "vcodec": "vp09.00.50.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "webm_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "3840x2160",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "webm",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 12330.438,
+ "format": "313 - 3840x2160 (2160p)"
+ }
+ ],
+ "thumbnails": [
+ { "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/3.jpg", "preference": -37, "id": "0" },
+ { "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/3.webp", "preference": -36, "id": "1" },
+ { "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/2.jpg", "preference": -35, "id": "2" },
+ { "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/2.webp", "preference": -34, "id": "3" },
+ { "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/1.jpg", "preference": -33, "id": "4" },
+ { "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/1.webp", "preference": -32, "id": "5" },
+ { "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/mq3.jpg", "preference": -31, "id": "6" },
+ { "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/mq3.webp", "preference": -30, "id": "7" },
+ { "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/mq2.jpg", "preference": -29, "id": "8" },
+ { "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/mq2.webp", "preference": -28, "id": "9" },
+ { "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/mq1.jpg", "preference": -27, "id": "10" },
+ { "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/mq1.webp", "preference": -26, "id": "11" },
+ { "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/hq3.jpg", "preference": -25, "id": "12" },
+ { "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/hq3.webp", "preference": -24, "id": "13" },
+ { "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/hq2.jpg", "preference": -23, "id": "14" },
+ { "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/hq2.webp", "preference": -22, "id": "15" },
+ { "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/hq1.jpg", "preference": -21, "id": "16" },
+ { "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/hq1.webp", "preference": -20, "id": "17" },
+ { "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/sd3.jpg", "preference": -19, "id": "18" },
+ { "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/sd3.webp", "preference": -18, "id": "19" },
+ { "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/sd2.jpg", "preference": -17, "id": "20" },
+ { "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/sd2.webp", "preference": -16, "id": "21" },
+ { "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/sd1.jpg", "preference": -15, "id": "22" },
+ { "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/sd1.webp", "preference": -14, "id": "23" },
+ {
+ "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/default.jpg",
+ "height": 90,
+ "width": 120,
+ "preference": -13,
+ "id": "24",
+ "resolution": "120x90"
+ },
+ {
+ "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/default.webp",
+ "preference": -12,
+ "id": "25"
+ },
+ {
+ "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/mqdefault.jpg",
+ "height": 180,
+ "width": 320,
+ "preference": -11,
+ "id": "26",
+ "resolution": "320x180"
+ },
+ {
+ "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/mqdefault.webp",
+ "preference": -10,
+ "id": "27"
+ },
+ { "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/0.jpg", "preference": -9, "id": "28" },
+ { "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/0.webp", "preference": -8, "id": "29" },
+ {
+ "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCfnqZqzf3SpMWSBlr5eEkYrRbeOw",
+ "height": 94,
+ "width": 168,
+ "preference": -7,
+ "id": "30",
+ "resolution": "168x94"
+ },
+ {
+ "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAnj5wtnbYGzZX9gerMKQ-FS5sSeA",
+ "height": 110,
+ "width": 196,
+ "preference": -7,
+ "id": "31",
+ "resolution": "196x110"
+ },
+ {
+ "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC5fmbFoduOVcifLAMu006pXlcicQ",
+ "height": 138,
+ "width": 246,
+ "preference": -7,
+ "id": "32",
+ "resolution": "246x138"
+ },
+ {
+ "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDISoJqnSXFGgqsSCMRd9NCiV5Dyg",
+ "height": 188,
+ "width": 336,
+ "preference": -7,
+ "id": "33",
+ "resolution": "336x188"
+ },
+ {
+ "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/hqdefault.jpg",
+ "height": 360,
+ "width": 480,
+ "preference": -7,
+ "id": "34",
+ "resolution": "480x360"
+ },
+ {
+ "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/hqdefault.webp",
+ "preference": -6,
+ "id": "35"
+ },
+ {
+ "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/sddefault.jpg",
+ "height": 480,
+ "width": 640,
+ "preference": -5,
+ "id": "36",
+ "resolution": "640x480"
+ },
+ {
+ "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/sddefault.webp",
+ "preference": -4,
+ "id": "37"
+ },
+ { "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/hq720.jpg", "preference": -3, "id": "38" },
+ { "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/hq720.webp", "preference": -2, "id": "39" },
+ {
+ "url": "https://i.ytimg.com/vi/bwRHIkYqYJo/maxresdefault.jpg",
+ "height": 1080,
+ "width": 1920,
+ "preference": -1,
+ "id": "40",
+ "resolution": "1920x1080"
+ },
+ {
+ "url": "https://i.ytimg.com/vi_webp/bwRHIkYqYJo/maxresdefault.webp",
+ "preference": 0,
+ "id": "41",
+ "filepath": "/app/tmp/videos/bwRHIkYqYJo/Trying to Wheelie Without the Rear Brake-bwRHIkYqYJo.webp"
+ }
+ ],
+ "thumbnail": "https://i.ytimg.com/vi/bwRHIkYqYJo/maxresdefault.jpg",
+ "description": "Because I use my rear brake too much when doing wheelies, I came up with this challenge - wheelie a long distance completely without using it.\n\nYou can join my Patreon to support the channel: https://www.patreon.com/UselessTrials\n\n00:00 Introduction\n00:31 Rules\n00:46 Challenge #1\n07:07 Challenge #2\n08:03 Conclusion\n08:46 Skillshare\n09:30 Longest No Brake Wheelie\n_________________________________________________________________\nInstagram: @max_fiergolla\n\nbusiness inquiries: uselesstrials@gmail.com\n_________________________________________________________________\n\nStreet Trial is a mixture of two sports - Bike Trials and Street BMX. It gained popularity on Youtube in recent years through riders like Martyn Ashton, Danny MacAskill, Ali Clarkson, Duncan Shaw, Sean Watson, Fabio Wibmer and John Langlois.\nTrials riding is all about riding/hopping over and balancing on obstacles. BMX Street is all about tricks and style. Street Trials combines the two and does tricks over, off and onto obstacles.\nVideos like Danny MacAskill 's 'Way Back Home', 'Imaginate', 'Inspired Bicycles 2009\" or Fabio Wibmer 's 'Fabiolous Escape' showcase lots of what Street Trials is about.\n\n\n#wheeliechallenge",
+ "channel_id": "UCEi9yL4vhQlLafWRsAgAr3w",
+ "channel_url": "https://www.youtube.com/channel/UCEi9yL4vhQlLafWRsAgAr3w",
+ "duration": 582,
+ "view_count": 9948,
+ "average_rating": null,
+ "age_limit": 0,
+ "webpage_url": "https://www.youtube.com/watch?v=bwRHIkYqYJo",
+ "categories": ["Sports"],
+ "tags": [
+ "mtb wheelie challenge",
+ "brakeless wheelie challenge",
+ "no brake wheelie challenge",
+ "riding challenge",
+ "berm peak",
+ "pinkbike",
+ "sick series",
+ "sam pilgrim",
+ "gmbn",
+ "fun bike challenge",
+ "Urban Freeride",
+ "Freeriding",
+ "free ride",
+ "downhill freeride",
+ "wheelie freeride",
+ "stunts",
+ "bike stunt"
+ ],
+ "playable_in_embed": true,
+ "live_status": "not_live",
+ "release_timestamp": null,
+ "_format_sort_fields": [
+ "quality",
+ "res",
+ "fps",
+ "hdr:12",
+ "source",
+ "vcodec:vp9.2",
+ "channels",
+ "acodec",
+ "lang",
+ "proto"
+ ],
+ "automatic_captions": {
+ "de": [
+ {
+ "url": "https://manifest.googlevideo.com/api/manifest/hls_timedtext_playlist/expire/1706517002/ei/qg23Ze2uGcefsfIPo8eGqA0/ip/184.65.71.108/id/6f044722462a609a/source/youtube/requiressl/yes/dur/582.289/tts_params/caps%3Dasr%26v%3DbwRHIkYqYJo%26lang%3Dde%26ip%3D184.65.71.108%26ipbits%3D0%26expire%3D1706517002%26sparams%3Dip,ipbits,expire,caps,v%26signature%3D35009B07A412610EC270F8E37B72782D3A81A645.1321F1D202435FF4D21FD653FE845008A4D7346A%26key%3Ddg_yt0/rqh/4/hls_chunk_host/rr2---sn-ni5f-t8g6.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/mh/Pz/mm/31,26/mn/sn-ni5f-t8g6,sn-vgqskn6s/ms/au,onr/mv/m/mvi/2/pl/22/initcwndbps/1712500/vprv/1/playlist_type/DVR/mt/1706495125/fvip/3/short_key/1/keepalive/yes/fexp/24007246/sparams/expire,ei,ip,id,source,requiressl,dur,tts_params,rqh,xpc,vprv,playlist_type/sig/AJfQdSswRQIhAJkguP00DNxeOeyg68QLOoKN4CYyB28cLHWkklkDr5ZrAiBu4p-ckTsFZDOurShNblpGyyHd4mffuHK6JscywulvpA%3D%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AAO5W4owRAIgKDue_oW7p0nB7Gia-MtVqS65nJleSup6NuDhI_hUuGQCIDxAU5HEKenw_qwGwqOB6AIaekVbgMv89XgXDWF_N_Oo/playlist/index.m3u8",
+ "ext": "vtt",
+ "protocol": "m3u8_native"
+ },
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=de&fmt=json3",
+ "name": "German"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=de&fmt=srv1",
+ "name": "German"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=de&fmt=srv2",
+ "name": "German"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=de&fmt=srv3",
+ "name": "German"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=de&fmt=ttml",
+ "name": "German"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=de&fmt=vtt",
+ "name": "German"
+ }
+ ],
+ "af": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=af&fmt=json3",
+ "name": "Afrikaans"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=af&fmt=srv1",
+ "name": "Afrikaans"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=af&fmt=srv2",
+ "name": "Afrikaans"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=af&fmt=srv3",
+ "name": "Afrikaans"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=af&fmt=ttml",
+ "name": "Afrikaans"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=af&fmt=vtt",
+ "name": "Afrikaans"
+ }
+ ],
+ "ak": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ak&fmt=json3",
+ "name": "Akan"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ak&fmt=srv1",
+ "name": "Akan"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ak&fmt=srv2",
+ "name": "Akan"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ak&fmt=srv3",
+ "name": "Akan"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ak&fmt=ttml",
+ "name": "Akan"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ak&fmt=vtt",
+ "name": "Akan"
+ }
+ ],
+ "sq": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sq&fmt=json3",
+ "name": "Albanian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sq&fmt=srv1",
+ "name": "Albanian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sq&fmt=srv2",
+ "name": "Albanian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sq&fmt=srv3",
+ "name": "Albanian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sq&fmt=ttml",
+ "name": "Albanian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sq&fmt=vtt",
+ "name": "Albanian"
+ }
+ ],
+ "am": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=am&fmt=json3",
+ "name": "Amharic"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=am&fmt=srv1",
+ "name": "Amharic"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=am&fmt=srv2",
+ "name": "Amharic"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=am&fmt=srv3",
+ "name": "Amharic"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=am&fmt=ttml",
+ "name": "Amharic"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=am&fmt=vtt",
+ "name": "Amharic"
+ }
+ ],
+ "ar": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ar&fmt=json3",
+ "name": "Arabic"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ar&fmt=srv1",
+ "name": "Arabic"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ar&fmt=srv2",
+ "name": "Arabic"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ar&fmt=srv3",
+ "name": "Arabic"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ar&fmt=ttml",
+ "name": "Arabic"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ar&fmt=vtt",
+ "name": "Arabic"
+ }
+ ],
+ "hy": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hy&fmt=json3",
+ "name": "Armenian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hy&fmt=srv1",
+ "name": "Armenian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hy&fmt=srv2",
+ "name": "Armenian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hy&fmt=srv3",
+ "name": "Armenian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hy&fmt=ttml",
+ "name": "Armenian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hy&fmt=vtt",
+ "name": "Armenian"
+ }
+ ],
+ "as": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=as&fmt=json3",
+ "name": "Assamese"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=as&fmt=srv1",
+ "name": "Assamese"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=as&fmt=srv2",
+ "name": "Assamese"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=as&fmt=srv3",
+ "name": "Assamese"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=as&fmt=ttml",
+ "name": "Assamese"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=as&fmt=vtt",
+ "name": "Assamese"
+ }
+ ],
+ "ay": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ay&fmt=json3",
+ "name": "Aymara"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ay&fmt=srv1",
+ "name": "Aymara"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ay&fmt=srv2",
+ "name": "Aymara"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ay&fmt=srv3",
+ "name": "Aymara"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ay&fmt=ttml",
+ "name": "Aymara"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ay&fmt=vtt",
+ "name": "Aymara"
+ }
+ ],
+ "az": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=az&fmt=json3",
+ "name": "Azerbaijani"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=az&fmt=srv1",
+ "name": "Azerbaijani"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=az&fmt=srv2",
+ "name": "Azerbaijani"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=az&fmt=srv3",
+ "name": "Azerbaijani"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=az&fmt=ttml",
+ "name": "Azerbaijani"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=az&fmt=vtt",
+ "name": "Azerbaijani"
+ }
+ ],
+ "bn": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bn&fmt=json3",
+ "name": "Bangla"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bn&fmt=srv1",
+ "name": "Bangla"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bn&fmt=srv2",
+ "name": "Bangla"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bn&fmt=srv3",
+ "name": "Bangla"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bn&fmt=ttml",
+ "name": "Bangla"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bn&fmt=vtt",
+ "name": "Bangla"
+ }
+ ],
+ "eu": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=eu&fmt=json3",
+ "name": "Basque"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=eu&fmt=srv1",
+ "name": "Basque"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=eu&fmt=srv2",
+ "name": "Basque"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=eu&fmt=srv3",
+ "name": "Basque"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=eu&fmt=ttml",
+ "name": "Basque"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=eu&fmt=vtt",
+ "name": "Basque"
+ }
+ ],
+ "be": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=be&fmt=json3",
+ "name": "Belarusian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=be&fmt=srv1",
+ "name": "Belarusian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=be&fmt=srv2",
+ "name": "Belarusian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=be&fmt=srv3",
+ "name": "Belarusian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=be&fmt=ttml",
+ "name": "Belarusian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=be&fmt=vtt",
+ "name": "Belarusian"
+ }
+ ],
+ "bho": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bho&fmt=json3",
+ "name": "Bhojpuri"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bho&fmt=srv1",
+ "name": "Bhojpuri"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bho&fmt=srv2",
+ "name": "Bhojpuri"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bho&fmt=srv3",
+ "name": "Bhojpuri"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bho&fmt=ttml",
+ "name": "Bhojpuri"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bho&fmt=vtt",
+ "name": "Bhojpuri"
+ }
+ ],
+ "bs": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bs&fmt=json3",
+ "name": "Bosnian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bs&fmt=srv1",
+ "name": "Bosnian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bs&fmt=srv2",
+ "name": "Bosnian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bs&fmt=srv3",
+ "name": "Bosnian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bs&fmt=ttml",
+ "name": "Bosnian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bs&fmt=vtt",
+ "name": "Bosnian"
+ }
+ ],
+ "bg": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bg&fmt=json3",
+ "name": "Bulgarian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bg&fmt=srv1",
+ "name": "Bulgarian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bg&fmt=srv2",
+ "name": "Bulgarian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bg&fmt=srv3",
+ "name": "Bulgarian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bg&fmt=ttml",
+ "name": "Bulgarian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=bg&fmt=vtt",
+ "name": "Bulgarian"
+ }
+ ],
+ "my": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=my&fmt=json3",
+ "name": "Burmese"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=my&fmt=srv1",
+ "name": "Burmese"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=my&fmt=srv2",
+ "name": "Burmese"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=my&fmt=srv3",
+ "name": "Burmese"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=my&fmt=ttml",
+ "name": "Burmese"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=my&fmt=vtt",
+ "name": "Burmese"
+ }
+ ],
+ "ca": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ca&fmt=json3",
+ "name": "Catalan"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ca&fmt=srv1",
+ "name": "Catalan"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ca&fmt=srv2",
+ "name": "Catalan"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ca&fmt=srv3",
+ "name": "Catalan"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ca&fmt=ttml",
+ "name": "Catalan"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ca&fmt=vtt",
+ "name": "Catalan"
+ }
+ ],
+ "ceb": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ceb&fmt=json3",
+ "name": "Cebuano"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ceb&fmt=srv1",
+ "name": "Cebuano"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ceb&fmt=srv2",
+ "name": "Cebuano"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ceb&fmt=srv3",
+ "name": "Cebuano"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ceb&fmt=ttml",
+ "name": "Cebuano"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ceb&fmt=vtt",
+ "name": "Cebuano"
+ }
+ ],
+ "zh-Hans": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zh-Hans&fmt=json3",
+ "name": "Chinese (Simplified)"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zh-Hans&fmt=srv1",
+ "name": "Chinese (Simplified)"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zh-Hans&fmt=srv2",
+ "name": "Chinese (Simplified)"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zh-Hans&fmt=srv3",
+ "name": "Chinese (Simplified)"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zh-Hans&fmt=ttml",
+ "name": "Chinese (Simplified)"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zh-Hans&fmt=vtt",
+ "name": "Chinese (Simplified)"
+ }
+ ],
+ "zh-Hant": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zh-Hant&fmt=json3",
+ "name": "Chinese (Traditional)"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zh-Hant&fmt=srv1",
+ "name": "Chinese (Traditional)"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zh-Hant&fmt=srv2",
+ "name": "Chinese (Traditional)"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zh-Hant&fmt=srv3",
+ "name": "Chinese (Traditional)"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zh-Hant&fmt=ttml",
+ "name": "Chinese (Traditional)"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zh-Hant&fmt=vtt",
+ "name": "Chinese (Traditional)"
+ }
+ ],
+ "co": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=co&fmt=json3",
+ "name": "Corsican"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=co&fmt=srv1",
+ "name": "Corsican"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=co&fmt=srv2",
+ "name": "Corsican"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=co&fmt=srv3",
+ "name": "Corsican"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=co&fmt=ttml",
+ "name": "Corsican"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=co&fmt=vtt",
+ "name": "Corsican"
+ }
+ ],
+ "hr": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hr&fmt=json3",
+ "name": "Croatian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hr&fmt=srv1",
+ "name": "Croatian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hr&fmt=srv2",
+ "name": "Croatian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hr&fmt=srv3",
+ "name": "Croatian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hr&fmt=ttml",
+ "name": "Croatian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hr&fmt=vtt",
+ "name": "Croatian"
+ }
+ ],
+ "cs": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=cs&fmt=json3",
+ "name": "Czech"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=cs&fmt=srv1",
+ "name": "Czech"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=cs&fmt=srv2",
+ "name": "Czech"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=cs&fmt=srv3",
+ "name": "Czech"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=cs&fmt=ttml",
+ "name": "Czech"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=cs&fmt=vtt",
+ "name": "Czech"
+ }
+ ],
+ "da": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=da&fmt=json3",
+ "name": "Danish"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=da&fmt=srv1",
+ "name": "Danish"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=da&fmt=srv2",
+ "name": "Danish"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=da&fmt=srv3",
+ "name": "Danish"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=da&fmt=ttml",
+ "name": "Danish"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=da&fmt=vtt",
+ "name": "Danish"
+ }
+ ],
+ "dv": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=dv&fmt=json3",
+ "name": "Divehi"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=dv&fmt=srv1",
+ "name": "Divehi"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=dv&fmt=srv2",
+ "name": "Divehi"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=dv&fmt=srv3",
+ "name": "Divehi"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=dv&fmt=ttml",
+ "name": "Divehi"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=dv&fmt=vtt",
+ "name": "Divehi"
+ }
+ ],
+ "nl": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=nl&fmt=json3",
+ "name": "Dutch"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=nl&fmt=srv1",
+ "name": "Dutch"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=nl&fmt=srv2",
+ "name": "Dutch"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=nl&fmt=srv3",
+ "name": "Dutch"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=nl&fmt=ttml",
+ "name": "Dutch"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=nl&fmt=vtt",
+ "name": "Dutch"
+ }
+ ],
+ "en-orig": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&fmt=json3",
+ "name": "English (Original)"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&fmt=srv1",
+ "name": "English (Original)"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&fmt=srv2",
+ "name": "English (Original)"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&fmt=srv3",
+ "name": "English (Original)"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&fmt=ttml",
+ "name": "English (Original)"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&fmt=vtt",
+ "name": "English (Original)"
+ }
+ ],
+ "en": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&fmt=json3",
+ "name": "English"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&fmt=srv1",
+ "name": "English"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&fmt=srv2",
+ "name": "English"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&fmt=srv3",
+ "name": "English"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&fmt=ttml",
+ "name": "English"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&fmt=vtt",
+ "name": "English"
+ }
+ ],
+ "eo": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=eo&fmt=json3",
+ "name": "Esperanto"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=eo&fmt=srv1",
+ "name": "Esperanto"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=eo&fmt=srv2",
+ "name": "Esperanto"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=eo&fmt=srv3",
+ "name": "Esperanto"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=eo&fmt=ttml",
+ "name": "Esperanto"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=eo&fmt=vtt",
+ "name": "Esperanto"
+ }
+ ],
+ "et": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=et&fmt=json3",
+ "name": "Estonian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=et&fmt=srv1",
+ "name": "Estonian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=et&fmt=srv2",
+ "name": "Estonian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=et&fmt=srv3",
+ "name": "Estonian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=et&fmt=ttml",
+ "name": "Estonian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=et&fmt=vtt",
+ "name": "Estonian"
+ }
+ ],
+ "ee": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ee&fmt=json3",
+ "name": "Ewe"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ee&fmt=srv1",
+ "name": "Ewe"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ee&fmt=srv2",
+ "name": "Ewe"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ee&fmt=srv3",
+ "name": "Ewe"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ee&fmt=ttml",
+ "name": "Ewe"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ee&fmt=vtt",
+ "name": "Ewe"
+ }
+ ],
+ "fil": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fil&fmt=json3",
+ "name": "Filipino"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fil&fmt=srv1",
+ "name": "Filipino"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fil&fmt=srv2",
+ "name": "Filipino"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fil&fmt=srv3",
+ "name": "Filipino"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fil&fmt=ttml",
+ "name": "Filipino"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fil&fmt=vtt",
+ "name": "Filipino"
+ }
+ ],
+ "fi": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fi&fmt=json3",
+ "name": "Finnish"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fi&fmt=srv1",
+ "name": "Finnish"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fi&fmt=srv2",
+ "name": "Finnish"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fi&fmt=srv3",
+ "name": "Finnish"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fi&fmt=ttml",
+ "name": "Finnish"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fi&fmt=vtt",
+ "name": "Finnish"
+ }
+ ],
+ "fr": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fr&fmt=json3",
+ "name": "French"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fr&fmt=srv1",
+ "name": "French"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fr&fmt=srv2",
+ "name": "French"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fr&fmt=srv3",
+ "name": "French"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fr&fmt=ttml",
+ "name": "French"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fr&fmt=vtt",
+ "name": "French"
+ }
+ ],
+ "gl": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gl&fmt=json3",
+ "name": "Galician"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gl&fmt=srv1",
+ "name": "Galician"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gl&fmt=srv2",
+ "name": "Galician"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gl&fmt=srv3",
+ "name": "Galician"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gl&fmt=ttml",
+ "name": "Galician"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gl&fmt=vtt",
+ "name": "Galician"
+ }
+ ],
+ "lg": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lg&fmt=json3",
+ "name": "Ganda"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lg&fmt=srv1",
+ "name": "Ganda"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lg&fmt=srv2",
+ "name": "Ganda"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lg&fmt=srv3",
+ "name": "Ganda"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lg&fmt=ttml",
+ "name": "Ganda"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lg&fmt=vtt",
+ "name": "Ganda"
+ }
+ ],
+ "ka": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ka&fmt=json3",
+ "name": "Georgian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ka&fmt=srv1",
+ "name": "Georgian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ka&fmt=srv2",
+ "name": "Georgian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ka&fmt=srv3",
+ "name": "Georgian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ka&fmt=ttml",
+ "name": "Georgian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ka&fmt=vtt",
+ "name": "Georgian"
+ }
+ ],
+ "el": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=el&fmt=json3",
+ "name": "Greek"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=el&fmt=srv1",
+ "name": "Greek"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=el&fmt=srv2",
+ "name": "Greek"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=el&fmt=srv3",
+ "name": "Greek"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=el&fmt=ttml",
+ "name": "Greek"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=el&fmt=vtt",
+ "name": "Greek"
+ }
+ ],
+ "gn": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gn&fmt=json3",
+ "name": "Guarani"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gn&fmt=srv1",
+ "name": "Guarani"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gn&fmt=srv2",
+ "name": "Guarani"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gn&fmt=srv3",
+ "name": "Guarani"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gn&fmt=ttml",
+ "name": "Guarani"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gn&fmt=vtt",
+ "name": "Guarani"
+ }
+ ],
+ "gu": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gu&fmt=json3",
+ "name": "Gujarati"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gu&fmt=srv1",
+ "name": "Gujarati"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gu&fmt=srv2",
+ "name": "Gujarati"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gu&fmt=srv3",
+ "name": "Gujarati"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gu&fmt=ttml",
+ "name": "Gujarati"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gu&fmt=vtt",
+ "name": "Gujarati"
+ }
+ ],
+ "ht": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ht&fmt=json3",
+ "name": "Haitian Creole"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ht&fmt=srv1",
+ "name": "Haitian Creole"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ht&fmt=srv2",
+ "name": "Haitian Creole"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ht&fmt=srv3",
+ "name": "Haitian Creole"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ht&fmt=ttml",
+ "name": "Haitian Creole"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ht&fmt=vtt",
+ "name": "Haitian Creole"
+ }
+ ],
+ "ha": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ha&fmt=json3",
+ "name": "Hausa"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ha&fmt=srv1",
+ "name": "Hausa"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ha&fmt=srv2",
+ "name": "Hausa"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ha&fmt=srv3",
+ "name": "Hausa"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ha&fmt=ttml",
+ "name": "Hausa"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ha&fmt=vtt",
+ "name": "Hausa"
+ }
+ ],
+ "haw": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=haw&fmt=json3",
+ "name": "Hawaiian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=haw&fmt=srv1",
+ "name": "Hawaiian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=haw&fmt=srv2",
+ "name": "Hawaiian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=haw&fmt=srv3",
+ "name": "Hawaiian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=haw&fmt=ttml",
+ "name": "Hawaiian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=haw&fmt=vtt",
+ "name": "Hawaiian"
+ }
+ ],
+ "iw": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=iw&fmt=json3",
+ "name": "Hebrew"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=iw&fmt=srv1",
+ "name": "Hebrew"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=iw&fmt=srv2",
+ "name": "Hebrew"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=iw&fmt=srv3",
+ "name": "Hebrew"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=iw&fmt=ttml",
+ "name": "Hebrew"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=iw&fmt=vtt",
+ "name": "Hebrew"
+ }
+ ],
+ "hi": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hi&fmt=json3",
+ "name": "Hindi"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hi&fmt=srv1",
+ "name": "Hindi"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hi&fmt=srv2",
+ "name": "Hindi"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hi&fmt=srv3",
+ "name": "Hindi"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hi&fmt=ttml",
+ "name": "Hindi"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hi&fmt=vtt",
+ "name": "Hindi"
+ }
+ ],
+ "hmn": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hmn&fmt=json3",
+ "name": "Hmong"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hmn&fmt=srv1",
+ "name": "Hmong"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hmn&fmt=srv2",
+ "name": "Hmong"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hmn&fmt=srv3",
+ "name": "Hmong"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hmn&fmt=ttml",
+ "name": "Hmong"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hmn&fmt=vtt",
+ "name": "Hmong"
+ }
+ ],
+ "hu": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hu&fmt=json3",
+ "name": "Hungarian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hu&fmt=srv1",
+ "name": "Hungarian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hu&fmt=srv2",
+ "name": "Hungarian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hu&fmt=srv3",
+ "name": "Hungarian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hu&fmt=ttml",
+ "name": "Hungarian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=hu&fmt=vtt",
+ "name": "Hungarian"
+ }
+ ],
+ "is": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=is&fmt=json3",
+ "name": "Icelandic"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=is&fmt=srv1",
+ "name": "Icelandic"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=is&fmt=srv2",
+ "name": "Icelandic"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=is&fmt=srv3",
+ "name": "Icelandic"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=is&fmt=ttml",
+ "name": "Icelandic"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=is&fmt=vtt",
+ "name": "Icelandic"
+ }
+ ],
+ "ig": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ig&fmt=json3",
+ "name": "Igbo"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ig&fmt=srv1",
+ "name": "Igbo"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ig&fmt=srv2",
+ "name": "Igbo"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ig&fmt=srv3",
+ "name": "Igbo"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ig&fmt=ttml",
+ "name": "Igbo"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ig&fmt=vtt",
+ "name": "Igbo"
+ }
+ ],
+ "id": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=id&fmt=json3",
+ "name": "Indonesian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=id&fmt=srv1",
+ "name": "Indonesian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=id&fmt=srv2",
+ "name": "Indonesian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=id&fmt=srv3",
+ "name": "Indonesian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=id&fmt=ttml",
+ "name": "Indonesian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=id&fmt=vtt",
+ "name": "Indonesian"
+ }
+ ],
+ "ga": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ga&fmt=json3",
+ "name": "Irish"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ga&fmt=srv1",
+ "name": "Irish"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ga&fmt=srv2",
+ "name": "Irish"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ga&fmt=srv3",
+ "name": "Irish"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ga&fmt=ttml",
+ "name": "Irish"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ga&fmt=vtt",
+ "name": "Irish"
+ }
+ ],
+ "it": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=it&fmt=json3",
+ "name": "Italian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=it&fmt=srv1",
+ "name": "Italian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=it&fmt=srv2",
+ "name": "Italian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=it&fmt=srv3",
+ "name": "Italian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=it&fmt=ttml",
+ "name": "Italian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=it&fmt=vtt",
+ "name": "Italian"
+ }
+ ],
+ "ja": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ja&fmt=json3",
+ "name": "Japanese"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ja&fmt=srv1",
+ "name": "Japanese"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ja&fmt=srv2",
+ "name": "Japanese"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ja&fmt=srv3",
+ "name": "Japanese"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ja&fmt=ttml",
+ "name": "Japanese"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ja&fmt=vtt",
+ "name": "Japanese"
+ }
+ ],
+ "jv": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=jv&fmt=json3",
+ "name": "Javanese"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=jv&fmt=srv1",
+ "name": "Javanese"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=jv&fmt=srv2",
+ "name": "Javanese"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=jv&fmt=srv3",
+ "name": "Javanese"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=jv&fmt=ttml",
+ "name": "Javanese"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=jv&fmt=vtt",
+ "name": "Javanese"
+ }
+ ],
+ "kn": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kn&fmt=json3",
+ "name": "Kannada"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kn&fmt=srv1",
+ "name": "Kannada"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kn&fmt=srv2",
+ "name": "Kannada"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kn&fmt=srv3",
+ "name": "Kannada"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kn&fmt=ttml",
+ "name": "Kannada"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kn&fmt=vtt",
+ "name": "Kannada"
+ }
+ ],
+ "kk": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kk&fmt=json3",
+ "name": "Kazakh"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kk&fmt=srv1",
+ "name": "Kazakh"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kk&fmt=srv2",
+ "name": "Kazakh"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kk&fmt=srv3",
+ "name": "Kazakh"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kk&fmt=ttml",
+ "name": "Kazakh"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kk&fmt=vtt",
+ "name": "Kazakh"
+ }
+ ],
+ "km": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=km&fmt=json3",
+ "name": "Khmer"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=km&fmt=srv1",
+ "name": "Khmer"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=km&fmt=srv2",
+ "name": "Khmer"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=km&fmt=srv3",
+ "name": "Khmer"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=km&fmt=ttml",
+ "name": "Khmer"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=km&fmt=vtt",
+ "name": "Khmer"
+ }
+ ],
+ "rw": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=rw&fmt=json3",
+ "name": "Kinyarwanda"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=rw&fmt=srv1",
+ "name": "Kinyarwanda"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=rw&fmt=srv2",
+ "name": "Kinyarwanda"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=rw&fmt=srv3",
+ "name": "Kinyarwanda"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=rw&fmt=ttml",
+ "name": "Kinyarwanda"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=rw&fmt=vtt",
+ "name": "Kinyarwanda"
+ }
+ ],
+ "ko": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ko&fmt=json3",
+ "name": "Korean"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ko&fmt=srv1",
+ "name": "Korean"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ko&fmt=srv2",
+ "name": "Korean"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ko&fmt=srv3",
+ "name": "Korean"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ko&fmt=ttml",
+ "name": "Korean"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ko&fmt=vtt",
+ "name": "Korean"
+ }
+ ],
+ "kri": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kri&fmt=json3",
+ "name": "Krio"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kri&fmt=srv1",
+ "name": "Krio"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kri&fmt=srv2",
+ "name": "Krio"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kri&fmt=srv3",
+ "name": "Krio"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kri&fmt=ttml",
+ "name": "Krio"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=kri&fmt=vtt",
+ "name": "Krio"
+ }
+ ],
+ "ku": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ku&fmt=json3",
+ "name": "Kurdish"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ku&fmt=srv1",
+ "name": "Kurdish"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ku&fmt=srv2",
+ "name": "Kurdish"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ku&fmt=srv3",
+ "name": "Kurdish"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ku&fmt=ttml",
+ "name": "Kurdish"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ku&fmt=vtt",
+ "name": "Kurdish"
+ }
+ ],
+ "ky": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ky&fmt=json3",
+ "name": "Kyrgyz"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ky&fmt=srv1",
+ "name": "Kyrgyz"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ky&fmt=srv2",
+ "name": "Kyrgyz"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ky&fmt=srv3",
+ "name": "Kyrgyz"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ky&fmt=ttml",
+ "name": "Kyrgyz"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ky&fmt=vtt",
+ "name": "Kyrgyz"
+ }
+ ],
+ "lo": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lo&fmt=json3",
+ "name": "Lao"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lo&fmt=srv1",
+ "name": "Lao"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lo&fmt=srv2",
+ "name": "Lao"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lo&fmt=srv3",
+ "name": "Lao"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lo&fmt=ttml",
+ "name": "Lao"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lo&fmt=vtt",
+ "name": "Lao"
+ }
+ ],
+ "la": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=la&fmt=json3",
+ "name": "Latin"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=la&fmt=srv1",
+ "name": "Latin"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=la&fmt=srv2",
+ "name": "Latin"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=la&fmt=srv3",
+ "name": "Latin"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=la&fmt=ttml",
+ "name": "Latin"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=la&fmt=vtt",
+ "name": "Latin"
+ }
+ ],
+ "lv": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lv&fmt=json3",
+ "name": "Latvian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lv&fmt=srv1",
+ "name": "Latvian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lv&fmt=srv2",
+ "name": "Latvian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lv&fmt=srv3",
+ "name": "Latvian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lv&fmt=ttml",
+ "name": "Latvian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lv&fmt=vtt",
+ "name": "Latvian"
+ }
+ ],
+ "ln": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ln&fmt=json3",
+ "name": "Lingala"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ln&fmt=srv1",
+ "name": "Lingala"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ln&fmt=srv2",
+ "name": "Lingala"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ln&fmt=srv3",
+ "name": "Lingala"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ln&fmt=ttml",
+ "name": "Lingala"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ln&fmt=vtt",
+ "name": "Lingala"
+ }
+ ],
+ "lt": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lt&fmt=json3",
+ "name": "Lithuanian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lt&fmt=srv1",
+ "name": "Lithuanian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lt&fmt=srv2",
+ "name": "Lithuanian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lt&fmt=srv3",
+ "name": "Lithuanian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lt&fmt=ttml",
+ "name": "Lithuanian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lt&fmt=vtt",
+ "name": "Lithuanian"
+ }
+ ],
+ "lb": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lb&fmt=json3",
+ "name": "Luxembourgish"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lb&fmt=srv1",
+ "name": "Luxembourgish"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lb&fmt=srv2",
+ "name": "Luxembourgish"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lb&fmt=srv3",
+ "name": "Luxembourgish"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lb&fmt=ttml",
+ "name": "Luxembourgish"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=lb&fmt=vtt",
+ "name": "Luxembourgish"
+ }
+ ],
+ "mk": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mk&fmt=json3",
+ "name": "Macedonian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mk&fmt=srv1",
+ "name": "Macedonian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mk&fmt=srv2",
+ "name": "Macedonian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mk&fmt=srv3",
+ "name": "Macedonian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mk&fmt=ttml",
+ "name": "Macedonian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mk&fmt=vtt",
+ "name": "Macedonian"
+ }
+ ],
+ "mg": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mg&fmt=json3",
+ "name": "Malagasy"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mg&fmt=srv1",
+ "name": "Malagasy"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mg&fmt=srv2",
+ "name": "Malagasy"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mg&fmt=srv3",
+ "name": "Malagasy"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mg&fmt=ttml",
+ "name": "Malagasy"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mg&fmt=vtt",
+ "name": "Malagasy"
+ }
+ ],
+ "ms": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ms&fmt=json3",
+ "name": "Malay"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ms&fmt=srv1",
+ "name": "Malay"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ms&fmt=srv2",
+ "name": "Malay"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ms&fmt=srv3",
+ "name": "Malay"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ms&fmt=ttml",
+ "name": "Malay"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ms&fmt=vtt",
+ "name": "Malay"
+ }
+ ],
+ "ml": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ml&fmt=json3",
+ "name": "Malayalam"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ml&fmt=srv1",
+ "name": "Malayalam"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ml&fmt=srv2",
+ "name": "Malayalam"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ml&fmt=srv3",
+ "name": "Malayalam"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ml&fmt=ttml",
+ "name": "Malayalam"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ml&fmt=vtt",
+ "name": "Malayalam"
+ }
+ ],
+ "mt": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mt&fmt=json3",
+ "name": "Maltese"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mt&fmt=srv1",
+ "name": "Maltese"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mt&fmt=srv2",
+ "name": "Maltese"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mt&fmt=srv3",
+ "name": "Maltese"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mt&fmt=ttml",
+ "name": "Maltese"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mt&fmt=vtt",
+ "name": "Maltese"
+ }
+ ],
+ "mi": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mi&fmt=json3",
+ "name": "M\u0101ori"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mi&fmt=srv1",
+ "name": "M\u0101ori"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mi&fmt=srv2",
+ "name": "M\u0101ori"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mi&fmt=srv3",
+ "name": "M\u0101ori"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mi&fmt=ttml",
+ "name": "M\u0101ori"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mi&fmt=vtt",
+ "name": "M\u0101ori"
+ }
+ ],
+ "mr": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mr&fmt=json3",
+ "name": "Marathi"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mr&fmt=srv1",
+ "name": "Marathi"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mr&fmt=srv2",
+ "name": "Marathi"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mr&fmt=srv3",
+ "name": "Marathi"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mr&fmt=ttml",
+ "name": "Marathi"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mr&fmt=vtt",
+ "name": "Marathi"
+ }
+ ],
+ "mn": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mn&fmt=json3",
+ "name": "Mongolian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mn&fmt=srv1",
+ "name": "Mongolian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mn&fmt=srv2",
+ "name": "Mongolian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mn&fmt=srv3",
+ "name": "Mongolian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mn&fmt=ttml",
+ "name": "Mongolian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=mn&fmt=vtt",
+ "name": "Mongolian"
+ }
+ ],
+ "ne": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ne&fmt=json3",
+ "name": "Nepali"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ne&fmt=srv1",
+ "name": "Nepali"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ne&fmt=srv2",
+ "name": "Nepali"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ne&fmt=srv3",
+ "name": "Nepali"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ne&fmt=ttml",
+ "name": "Nepali"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ne&fmt=vtt",
+ "name": "Nepali"
+ }
+ ],
+ "nso": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=nso&fmt=json3",
+ "name": "Northern Sotho"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=nso&fmt=srv1",
+ "name": "Northern Sotho"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=nso&fmt=srv2",
+ "name": "Northern Sotho"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=nso&fmt=srv3",
+ "name": "Northern Sotho"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=nso&fmt=ttml",
+ "name": "Northern Sotho"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=nso&fmt=vtt",
+ "name": "Northern Sotho"
+ }
+ ],
+ "no": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=no&fmt=json3",
+ "name": "Norwegian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=no&fmt=srv1",
+ "name": "Norwegian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=no&fmt=srv2",
+ "name": "Norwegian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=no&fmt=srv3",
+ "name": "Norwegian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=no&fmt=ttml",
+ "name": "Norwegian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=no&fmt=vtt",
+ "name": "Norwegian"
+ }
+ ],
+ "ny": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ny&fmt=json3",
+ "name": "Nyanja"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ny&fmt=srv1",
+ "name": "Nyanja"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ny&fmt=srv2",
+ "name": "Nyanja"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ny&fmt=srv3",
+ "name": "Nyanja"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ny&fmt=ttml",
+ "name": "Nyanja"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ny&fmt=vtt",
+ "name": "Nyanja"
+ }
+ ],
+ "or": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=or&fmt=json3",
+ "name": "Odia"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=or&fmt=srv1",
+ "name": "Odia"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=or&fmt=srv2",
+ "name": "Odia"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=or&fmt=srv3",
+ "name": "Odia"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=or&fmt=ttml",
+ "name": "Odia"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=or&fmt=vtt",
+ "name": "Odia"
+ }
+ ],
+ "om": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=om&fmt=json3",
+ "name": "Oromo"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=om&fmt=srv1",
+ "name": "Oromo"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=om&fmt=srv2",
+ "name": "Oromo"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=om&fmt=srv3",
+ "name": "Oromo"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=om&fmt=ttml",
+ "name": "Oromo"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=om&fmt=vtt",
+ "name": "Oromo"
+ }
+ ],
+ "ps": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ps&fmt=json3",
+ "name": "Pashto"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ps&fmt=srv1",
+ "name": "Pashto"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ps&fmt=srv2",
+ "name": "Pashto"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ps&fmt=srv3",
+ "name": "Pashto"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ps&fmt=ttml",
+ "name": "Pashto"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ps&fmt=vtt",
+ "name": "Pashto"
+ }
+ ],
+ "fa": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fa&fmt=json3",
+ "name": "Persian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fa&fmt=srv1",
+ "name": "Persian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fa&fmt=srv2",
+ "name": "Persian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fa&fmt=srv3",
+ "name": "Persian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fa&fmt=ttml",
+ "name": "Persian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fa&fmt=vtt",
+ "name": "Persian"
+ }
+ ],
+ "pl": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pl&fmt=json3",
+ "name": "Polish"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pl&fmt=srv1",
+ "name": "Polish"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pl&fmt=srv2",
+ "name": "Polish"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pl&fmt=srv3",
+ "name": "Polish"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pl&fmt=ttml",
+ "name": "Polish"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pl&fmt=vtt",
+ "name": "Polish"
+ }
+ ],
+ "pt": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pt&fmt=json3",
+ "name": "Portuguese"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pt&fmt=srv1",
+ "name": "Portuguese"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pt&fmt=srv2",
+ "name": "Portuguese"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pt&fmt=srv3",
+ "name": "Portuguese"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pt&fmt=ttml",
+ "name": "Portuguese"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pt&fmt=vtt",
+ "name": "Portuguese"
+ }
+ ],
+ "pa": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pa&fmt=json3",
+ "name": "Punjabi"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pa&fmt=srv1",
+ "name": "Punjabi"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pa&fmt=srv2",
+ "name": "Punjabi"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pa&fmt=srv3",
+ "name": "Punjabi"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pa&fmt=ttml",
+ "name": "Punjabi"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=pa&fmt=vtt",
+ "name": "Punjabi"
+ }
+ ],
+ "qu": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=qu&fmt=json3",
+ "name": "Quechua"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=qu&fmt=srv1",
+ "name": "Quechua"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=qu&fmt=srv2",
+ "name": "Quechua"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=qu&fmt=srv3",
+ "name": "Quechua"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=qu&fmt=ttml",
+ "name": "Quechua"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=qu&fmt=vtt",
+ "name": "Quechua"
+ }
+ ],
+ "ro": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ro&fmt=json3",
+ "name": "Romanian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ro&fmt=srv1",
+ "name": "Romanian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ro&fmt=srv2",
+ "name": "Romanian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ro&fmt=srv3",
+ "name": "Romanian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ro&fmt=ttml",
+ "name": "Romanian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ro&fmt=vtt",
+ "name": "Romanian"
+ }
+ ],
+ "ru": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ru&fmt=json3",
+ "name": "Russian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ru&fmt=srv1",
+ "name": "Russian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ru&fmt=srv2",
+ "name": "Russian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ru&fmt=srv3",
+ "name": "Russian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ru&fmt=ttml",
+ "name": "Russian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ru&fmt=vtt",
+ "name": "Russian"
+ }
+ ],
+ "sm": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sm&fmt=json3",
+ "name": "Samoan"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sm&fmt=srv1",
+ "name": "Samoan"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sm&fmt=srv2",
+ "name": "Samoan"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sm&fmt=srv3",
+ "name": "Samoan"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sm&fmt=ttml",
+ "name": "Samoan"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sm&fmt=vtt",
+ "name": "Samoan"
+ }
+ ],
+ "sa": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sa&fmt=json3",
+ "name": "Sanskrit"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sa&fmt=srv1",
+ "name": "Sanskrit"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sa&fmt=srv2",
+ "name": "Sanskrit"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sa&fmt=srv3",
+ "name": "Sanskrit"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sa&fmt=ttml",
+ "name": "Sanskrit"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sa&fmt=vtt",
+ "name": "Sanskrit"
+ }
+ ],
+ "gd": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gd&fmt=json3",
+ "name": "Scottish Gaelic"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gd&fmt=srv1",
+ "name": "Scottish Gaelic"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gd&fmt=srv2",
+ "name": "Scottish Gaelic"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gd&fmt=srv3",
+ "name": "Scottish Gaelic"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gd&fmt=ttml",
+ "name": "Scottish Gaelic"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=gd&fmt=vtt",
+ "name": "Scottish Gaelic"
+ }
+ ],
+ "sr": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sr&fmt=json3",
+ "name": "Serbian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sr&fmt=srv1",
+ "name": "Serbian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sr&fmt=srv2",
+ "name": "Serbian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sr&fmt=srv3",
+ "name": "Serbian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sr&fmt=ttml",
+ "name": "Serbian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sr&fmt=vtt",
+ "name": "Serbian"
+ }
+ ],
+ "sn": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sn&fmt=json3",
+ "name": "Shona"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sn&fmt=srv1",
+ "name": "Shona"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sn&fmt=srv2",
+ "name": "Shona"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sn&fmt=srv3",
+ "name": "Shona"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sn&fmt=ttml",
+ "name": "Shona"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sn&fmt=vtt",
+ "name": "Shona"
+ }
+ ],
+ "sd": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sd&fmt=json3",
+ "name": "Sindhi"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sd&fmt=srv1",
+ "name": "Sindhi"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sd&fmt=srv2",
+ "name": "Sindhi"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sd&fmt=srv3",
+ "name": "Sindhi"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sd&fmt=ttml",
+ "name": "Sindhi"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sd&fmt=vtt",
+ "name": "Sindhi"
+ }
+ ],
+ "si": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=si&fmt=json3",
+ "name": "Sinhala"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=si&fmt=srv1",
+ "name": "Sinhala"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=si&fmt=srv2",
+ "name": "Sinhala"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=si&fmt=srv3",
+ "name": "Sinhala"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=si&fmt=ttml",
+ "name": "Sinhala"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=si&fmt=vtt",
+ "name": "Sinhala"
+ }
+ ],
+ "sk": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sk&fmt=json3",
+ "name": "Slovak"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sk&fmt=srv1",
+ "name": "Slovak"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sk&fmt=srv2",
+ "name": "Slovak"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sk&fmt=srv3",
+ "name": "Slovak"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sk&fmt=ttml",
+ "name": "Slovak"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sk&fmt=vtt",
+ "name": "Slovak"
+ }
+ ],
+ "sl": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sl&fmt=json3",
+ "name": "Slovenian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sl&fmt=srv1",
+ "name": "Slovenian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sl&fmt=srv2",
+ "name": "Slovenian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sl&fmt=srv3",
+ "name": "Slovenian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sl&fmt=ttml",
+ "name": "Slovenian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sl&fmt=vtt",
+ "name": "Slovenian"
+ }
+ ],
+ "so": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=so&fmt=json3",
+ "name": "Somali"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=so&fmt=srv1",
+ "name": "Somali"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=so&fmt=srv2",
+ "name": "Somali"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=so&fmt=srv3",
+ "name": "Somali"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=so&fmt=ttml",
+ "name": "Somali"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=so&fmt=vtt",
+ "name": "Somali"
+ }
+ ],
+ "st": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=st&fmt=json3",
+ "name": "Southern Sotho"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=st&fmt=srv1",
+ "name": "Southern Sotho"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=st&fmt=srv2",
+ "name": "Southern Sotho"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=st&fmt=srv3",
+ "name": "Southern Sotho"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=st&fmt=ttml",
+ "name": "Southern Sotho"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=st&fmt=vtt",
+ "name": "Southern Sotho"
+ }
+ ],
+ "es": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=es&fmt=json3",
+ "name": "Spanish"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=es&fmt=srv1",
+ "name": "Spanish"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=es&fmt=srv2",
+ "name": "Spanish"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=es&fmt=srv3",
+ "name": "Spanish"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=es&fmt=ttml",
+ "name": "Spanish"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=es&fmt=vtt",
+ "name": "Spanish"
+ }
+ ],
+ "su": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=su&fmt=json3",
+ "name": "Sundanese"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=su&fmt=srv1",
+ "name": "Sundanese"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=su&fmt=srv2",
+ "name": "Sundanese"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=su&fmt=srv3",
+ "name": "Sundanese"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=su&fmt=ttml",
+ "name": "Sundanese"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=su&fmt=vtt",
+ "name": "Sundanese"
+ }
+ ],
+ "sw": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sw&fmt=json3",
+ "name": "Swahili"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sw&fmt=srv1",
+ "name": "Swahili"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sw&fmt=srv2",
+ "name": "Swahili"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sw&fmt=srv3",
+ "name": "Swahili"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sw&fmt=ttml",
+ "name": "Swahili"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sw&fmt=vtt",
+ "name": "Swahili"
+ }
+ ],
+ "sv": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sv&fmt=json3",
+ "name": "Swedish"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sv&fmt=srv1",
+ "name": "Swedish"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sv&fmt=srv2",
+ "name": "Swedish"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sv&fmt=srv3",
+ "name": "Swedish"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sv&fmt=ttml",
+ "name": "Swedish"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=sv&fmt=vtt",
+ "name": "Swedish"
+ }
+ ],
+ "tg": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tg&fmt=json3",
+ "name": "Tajik"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tg&fmt=srv1",
+ "name": "Tajik"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tg&fmt=srv2",
+ "name": "Tajik"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tg&fmt=srv3",
+ "name": "Tajik"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tg&fmt=ttml",
+ "name": "Tajik"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tg&fmt=vtt",
+ "name": "Tajik"
+ }
+ ],
+ "ta": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ta&fmt=json3",
+ "name": "Tamil"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ta&fmt=srv1",
+ "name": "Tamil"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ta&fmt=srv2",
+ "name": "Tamil"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ta&fmt=srv3",
+ "name": "Tamil"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ta&fmt=ttml",
+ "name": "Tamil"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ta&fmt=vtt",
+ "name": "Tamil"
+ }
+ ],
+ "tt": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tt&fmt=json3",
+ "name": "Tatar"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tt&fmt=srv1",
+ "name": "Tatar"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tt&fmt=srv2",
+ "name": "Tatar"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tt&fmt=srv3",
+ "name": "Tatar"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tt&fmt=ttml",
+ "name": "Tatar"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tt&fmt=vtt",
+ "name": "Tatar"
+ }
+ ],
+ "te": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=te&fmt=json3",
+ "name": "Telugu"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=te&fmt=srv1",
+ "name": "Telugu"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=te&fmt=srv2",
+ "name": "Telugu"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=te&fmt=srv3",
+ "name": "Telugu"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=te&fmt=ttml",
+ "name": "Telugu"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=te&fmt=vtt",
+ "name": "Telugu"
+ }
+ ],
+ "th": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=th&fmt=json3",
+ "name": "Thai"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=th&fmt=srv1",
+ "name": "Thai"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=th&fmt=srv2",
+ "name": "Thai"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=th&fmt=srv3",
+ "name": "Thai"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=th&fmt=ttml",
+ "name": "Thai"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=th&fmt=vtt",
+ "name": "Thai"
+ }
+ ],
+ "ti": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ti&fmt=json3",
+ "name": "Tigrinya"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ti&fmt=srv1",
+ "name": "Tigrinya"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ti&fmt=srv2",
+ "name": "Tigrinya"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ti&fmt=srv3",
+ "name": "Tigrinya"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ti&fmt=ttml",
+ "name": "Tigrinya"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ti&fmt=vtt",
+ "name": "Tigrinya"
+ }
+ ],
+ "ts": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ts&fmt=json3",
+ "name": "Tsonga"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ts&fmt=srv1",
+ "name": "Tsonga"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ts&fmt=srv2",
+ "name": "Tsonga"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ts&fmt=srv3",
+ "name": "Tsonga"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ts&fmt=ttml",
+ "name": "Tsonga"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ts&fmt=vtt",
+ "name": "Tsonga"
+ }
+ ],
+ "tr": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tr&fmt=json3",
+ "name": "Turkish"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tr&fmt=srv1",
+ "name": "Turkish"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tr&fmt=srv2",
+ "name": "Turkish"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tr&fmt=srv3",
+ "name": "Turkish"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tr&fmt=ttml",
+ "name": "Turkish"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tr&fmt=vtt",
+ "name": "Turkish"
+ }
+ ],
+ "tk": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tk&fmt=json3",
+ "name": "Turkmen"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tk&fmt=srv1",
+ "name": "Turkmen"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tk&fmt=srv2",
+ "name": "Turkmen"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tk&fmt=srv3",
+ "name": "Turkmen"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tk&fmt=ttml",
+ "name": "Turkmen"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=tk&fmt=vtt",
+ "name": "Turkmen"
+ }
+ ],
+ "uk": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=uk&fmt=json3",
+ "name": "Ukrainian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=uk&fmt=srv1",
+ "name": "Ukrainian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=uk&fmt=srv2",
+ "name": "Ukrainian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=uk&fmt=srv3",
+ "name": "Ukrainian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=uk&fmt=ttml",
+ "name": "Ukrainian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=uk&fmt=vtt",
+ "name": "Ukrainian"
+ }
+ ],
+ "ur": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ur&fmt=json3",
+ "name": "Urdu"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ur&fmt=srv1",
+ "name": "Urdu"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ur&fmt=srv2",
+ "name": "Urdu"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ur&fmt=srv3",
+ "name": "Urdu"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ur&fmt=ttml",
+ "name": "Urdu"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ur&fmt=vtt",
+ "name": "Urdu"
+ }
+ ],
+ "ug": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ug&fmt=json3",
+ "name": "Uyghur"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ug&fmt=srv1",
+ "name": "Uyghur"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ug&fmt=srv2",
+ "name": "Uyghur"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ug&fmt=srv3",
+ "name": "Uyghur"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ug&fmt=ttml",
+ "name": "Uyghur"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=ug&fmt=vtt",
+ "name": "Uyghur"
+ }
+ ],
+ "uz": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=uz&fmt=json3",
+ "name": "Uzbek"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=uz&fmt=srv1",
+ "name": "Uzbek"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=uz&fmt=srv2",
+ "name": "Uzbek"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=uz&fmt=srv3",
+ "name": "Uzbek"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=uz&fmt=ttml",
+ "name": "Uzbek"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=uz&fmt=vtt",
+ "name": "Uzbek"
+ }
+ ],
+ "vi": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=vi&fmt=json3",
+ "name": "Vietnamese"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=vi&fmt=srv1",
+ "name": "Vietnamese"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=vi&fmt=srv2",
+ "name": "Vietnamese"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=vi&fmt=srv3",
+ "name": "Vietnamese"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=vi&fmt=ttml",
+ "name": "Vietnamese"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=vi&fmt=vtt",
+ "name": "Vietnamese"
+ }
+ ],
+ "cy": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=cy&fmt=json3",
+ "name": "Welsh"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=cy&fmt=srv1",
+ "name": "Welsh"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=cy&fmt=srv2",
+ "name": "Welsh"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=cy&fmt=srv3",
+ "name": "Welsh"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=cy&fmt=ttml",
+ "name": "Welsh"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=cy&fmt=vtt",
+ "name": "Welsh"
+ }
+ ],
+ "fy": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fy&fmt=json3",
+ "name": "Western Frisian"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fy&fmt=srv1",
+ "name": "Western Frisian"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fy&fmt=srv2",
+ "name": "Western Frisian"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fy&fmt=srv3",
+ "name": "Western Frisian"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fy&fmt=ttml",
+ "name": "Western Frisian"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=fy&fmt=vtt",
+ "name": "Western Frisian"
+ }
+ ],
+ "xh": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=xh&fmt=json3",
+ "name": "Xhosa"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=xh&fmt=srv1",
+ "name": "Xhosa"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=xh&fmt=srv2",
+ "name": "Xhosa"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=xh&fmt=srv3",
+ "name": "Xhosa"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=xh&fmt=ttml",
+ "name": "Xhosa"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=xh&fmt=vtt",
+ "name": "Xhosa"
+ }
+ ],
+ "yi": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=yi&fmt=json3",
+ "name": "Yiddish"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=yi&fmt=srv1",
+ "name": "Yiddish"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=yi&fmt=srv2",
+ "name": "Yiddish"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=yi&fmt=srv3",
+ "name": "Yiddish"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=yi&fmt=ttml",
+ "name": "Yiddish"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=yi&fmt=vtt",
+ "name": "Yiddish"
+ }
+ ],
+ "yo": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=yo&fmt=json3",
+ "name": "Yoruba"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=yo&fmt=srv1",
+ "name": "Yoruba"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=yo&fmt=srv2",
+ "name": "Yoruba"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=yo&fmt=srv3",
+ "name": "Yoruba"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=yo&fmt=ttml",
+ "name": "Yoruba"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=yo&fmt=vtt",
+ "name": "Yoruba"
+ }
+ ],
+ "zu": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zu&fmt=json3",
+ "name": "Zulu"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zu&fmt=srv1",
+ "name": "Zulu"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zu&fmt=srv2",
+ "name": "Zulu"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zu&fmt=srv3",
+ "name": "Zulu"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zu&fmt=ttml",
+ "name": "Zulu"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&kind=asr&lang=en&tlang=zu&fmt=vtt",
+ "name": "Zulu"
+ }
+ ]
+ },
+ "subtitles": {
+ "de": [
+ {
+ "ext": "json3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&lang=de&fmt=json3",
+ "name": "German"
+ },
+ {
+ "ext": "srv1",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&lang=de&fmt=srv1",
+ "name": "German"
+ },
+ {
+ "ext": "srv2",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&lang=de&fmt=srv2",
+ "name": "German"
+ },
+ {
+ "ext": "srv3",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&lang=de&fmt=srv3",
+ "name": "German"
+ },
+ {
+ "ext": "ttml",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&lang=de&fmt=ttml",
+ "name": "German"
+ },
+ {
+ "ext": "vtt",
+ "url": "https://www.youtube.com/api/timedtext?v=bwRHIkYqYJo&ei=qQ23Zbv4OcjhsfIPt-C1iAk&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1706520601&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=5A41669CF69DF1733DEA84A46C1571C6F95361DF.2C70AE6B35952DDDA183BAB32A0C964F00F512BF&key=yt8&lang=de&fmt=vtt",
+ "name": "German"
+ }
+ ]
+ },
+ "comment_count": 44,
+ "chapters": [
+ { "start_time": 0.0, "title": "Introduction", "end_time": 31.0 },
+ { "start_time": 31.0, "title": "Rules", "end_time": 46.0 },
+ { "start_time": 46.0, "title": "Challenge #1", "end_time": 427.0 },
+ { "start_time": 427.0, "title": "Challenge #2", "end_time": 483.0 },
+ { "start_time": 483.0, "title": "Conclusion", "end_time": 526.0 },
+ { "start_time": 526.0, "title": "Skillshare", "end_time": 570.0 },
+ { "start_time": 570.0, "title": "Longest No Brake Wheelie", "end_time": 582 }
+ ],
+ "heatmap": null,
+ "like_count": 333,
+ "channel": "TheUselessTrials",
+ "channel_follower_count": 35000,
+ "uploader": "TheUselessTrials",
+ "uploader_id": "@TheUselessTrials",
+ "uploader_url": "https://www.youtube.com/@TheUselessTrials",
+ "upload_date": "20210720",
+ "availability": "public",
+ "original_url": "bwRHIkYqYJo",
+ "webpage_url_basename": "watch",
+ "webpage_url_domain": "youtube.com",
+ "extractor": "youtube",
+ "extractor_key": "Youtube",
+ "playlist": null,
+ "playlist_index": null,
+ "display_id": "bwRHIkYqYJo",
+ "fulltitle": "Trying to Wheelie Without the Rear Brake",
+ "duration_string": "9:42",
+ "release_year": null,
+ "is_live": false,
+ "was_live": false,
+ "requested_subtitles": {},
+ "_has_drm": null,
+ "epoch": 1706495402,
+ "requested_formats": [
+ {
+ "asr": null,
+ "filesize": 897486343,
+ "format_id": "313",
+ "format_note": "2160p",
+ "source_preference": -1,
+ "fps": 24,
+ "audio_channels": null,
+ "height": 2160,
+ "quality": 11.0,
+ "has_drm": false,
+ "tbr": 12330.438,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=313&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fwebm&gir=yes&clen=897486343&dur=582.290&lmt=1705442131826507&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=631F224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIge4wXEaYaDt1t9iDHaO0TcxNf9RJiUKcHBwUclcvKFw0CIQD70la1_R0wLekw4Zo0hXK-EyxT3DftYLR7pDkk_Sz2lA%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D",
+ "width": 3840,
+ "language": null,
+ "language_preference": -1,
+ "preference": null,
+ "ext": "webm",
+ "vcodec": "vp09.00.50.08",
+ "acodec": "none",
+ "dynamic_range": "SDR",
+ "container": "webm_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "3840x2160",
+ "aspect_ratio": 1.78,
+ "http_headers": {},
+ "video_ext": "webm",
+ "audio_ext": "none",
+ "abr": 0,
+ "vbr": 12330.438,
+ "format": "313 - 3840x2160 (2160p)"
+ },
+ {
+ "asr": 48000,
+ "filesize": 8264649,
+ "format_id": "251",
+ "format_note": "medium",
+ "source_preference": -1,
+ "fps": null,
+ "audio_channels": 2,
+ "height": null,
+ "quality": 3.0,
+ "has_drm": false,
+ "tbr": 113.544,
+ "url": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23ZZznK7ucsfIP0rW_wAk&ip=184.65.71.108&id=o-AF5FdjYiL4g-CkbZ54_ilBCjxrEgT73c7TlGEfvr2meT&itag=251&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=audio%2Fwebm&gir=yes&clen=8264649&dur=582.301&lmt=1705441327139531&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=ANDROID&txp=6318224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRgIhAKheHfJYdKMVCKmhCmKHRc_Dx9THKe1AxARvtPWpEXHaAiEAmyg7s-nuvB0Qlq67_OWk6UdaptzYtVujTE0tTAvD2F4%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRgIhAIdNHwY7qZ_DjsmvAH3GfDsZvkQygk757LbYqhfbhihYAiEA2K4C8d_ghWmB6fQatxNumDoyqVqHmhA0LcO8X0Dkp2I%3D",
+ "width": null,
+ "language": "en",
+ "language_preference": -1,
+ "preference": null,
+ "ext": "webm",
+ "vcodec": "none",
+ "acodec": "opus",
+ "dynamic_range": null,
+ "container": "webm_dash",
+ "downloader_options": { "http_chunk_size": 10485760 },
+ "protocol": "https",
+ "resolution": "audio only",
+ "aspect_ratio": null,
+ "http_headers": {},
+ "audio_ext": "webm",
+ "video_ext": "none",
+ "vbr": 0,
+ "abr": 113.544,
+ "format": "251 - audio only (medium)"
+ }
+ ],
+ "format": "313 - 3840x2160 (2160p)+251 - audio only (medium)",
+ "format_id": "313+251",
+ "ext": "mkv",
+ "protocol": "https+https",
+ "language": "en",
+ "format_note": "2160p+medium",
+ "filesize_approx": 905750992,
+ "tbr": 12443.982,
+ "width": 3840,
+ "height": 2160,
+ "resolution": "3840x2160",
+ "fps": 24,
+ "dynamic_range": "SDR",
+ "vcodec": "vp09.00.50.08",
+ "vbr": 12330.438,
+ "stretched_ratio": null,
+ "aspect_ratio": 1.78,
+ "acodec": "opus",
+ "abr": 113.544,
+ "asr": 48000,
+ "audio_channels": 2,
+ "_filename": "/app/tmp/videos/bwRHIkYqYJo/Trying to Wheelie Without the Rear Brake-bwRHIkYqYJo.webm",
+ "filename": "/app/tmp/videos/bwRHIkYqYJo/Trying to Wheelie Without the Rear Brake-bwRHIkYqYJo.webm",
+ "__real_download": false,
+ "__finaldir": "/app/tmp/videos/bwRHIkYqYJo",
+ "filepath": "/app/tmp/videos/bwRHIkYqYJo/Trying to Wheelie Without the Rear Brake-bwRHIkYqYJo.mkv",
+ "urls": "https://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23Ze2uGcefsfIPo8eGqA0&ip=184.65.71.108&id=o-AHhRvYwPEO0UnD7KxDiUfokDAmY-UEtICR497GfnL8Fp&itag=313&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=video%2Fwebm&gir=yes&clen=897486343&dur=582.290&lmt=1705442131826507&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=IOS&txp=631F224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIge4wXEaYaDt1t9iDHaO0TcxNf9RJiUKcHBwUclcvKFw0CIQD70la1_R0wLekw4Zo0hXK-EyxT3DftYLR7pDkk_Sz2lA%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRQIgHiAwpirT_yn-IrlySUhQ6bdnYf911YV5D2HQMG_ClEcCIQDo1sUhDJjqQ6LQqkS83bm6LFFaZlHdCG8f_H12azzAKg%3D%3D\nhttps://rr2---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1706517002&ei=qg23ZZznK7ucsfIP0rW_wAk&ip=184.65.71.108&id=o-AF5FdjYiL4g-CkbZ54_ilBCjxrEgT73c7TlGEfvr2meT&itag=251&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=Pz&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqskn6s&ms=au%2Conr&mv=m&mvi=2&pl=22&initcwndbps=1712500&vprv=1&svpuc=1&mime=audio%2Fwebm&gir=yes&clen=8264649&dur=582.301&lmt=1705441327139531&mt=1706495125&fvip=3&keepalive=yes&fexp=24007246&c=ANDROID&txp=6318224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRgIhAKheHfJYdKMVCKmhCmKHRc_Dx9THKe1AxARvtPWpEXHaAiEAmyg7s-nuvB0Qlq67_OWk6UdaptzYtVujTE0tTAvD2F4%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AAO5W4owRgIhAIdNHwY7qZ_DjsmvAH3GfDsZvkQygk757LbYqhfbhihYAiEA2K4C8d_ghWmB6fQatxNumDoyqVqHmhA0LcO8X0Dkp2I%3D",
+ "formats_table": "ID EXT RESOLUTION FPS CH | FILESIZE TBR PROTO | VCODEC VBR ACODEC ABR ASR MORE INFO\n-------------------------------------------------------------------------------------------------------------------------\nsb2 mhtml 48x27 0 | mhtml | images storyboard\nsb1 mhtml 79x45 0 | mhtml | images storyboard\nsb0 mhtml 159x90 0 | mhtml | images storyboard\n233 mp4 audio only | m3u8 | audio only unknown [en] Default\n234 mp4 audio only | m3u8 | audio only unknown [en] Default\n599 m4a audio only 2 | 2.14MiB 31k https | audio only mp4a.40.5 31k 22k [en] ultralow, m4a_dash\n600 webm audio only 2 | 2.24MiB 32k https | audio only opus 32k 48k [en] ultralow, webm_dash\n139 m4a audio only 2 | 3.39MiB 49k https | audio only mp4a.40.5 49k 22k [en] low, m4a_dash\n249 webm audio only 2 | 3.33MiB 48k https | audio only opus 48k 48k [en] low, webm_dash\n250 webm audio only 2 | 4.07MiB 59k https | audio only opus 59k 48k [en] low, webm_dash\n140 m4a audio only 2 | 8.99MiB 129k https | audio only mp4a.40.2 129k 44k [en] medium, m4a_dash\n251 webm audio only 2 | 7.88MiB 114k https | audio only opus 114k 48k [en] medium, webm_dash\n597 mp4 256x144 12 | 2.30MiB 33k https | avc1.4d400b 33k video only 144p, mp4_dash\n602 mp4 256x144 12 | ~ 6.71MiB 94k m3u8 | vp09.00.10.08 94k video only\n598 webm 256x144 12 | 1.97MiB 28k https | vp9 28k video only 144p, webm_dash\n269 mp4 256x144 24 | ~ 14.35MiB 202k m3u8 | avc1.4D400C 202k video only\n160 mp4 256x144 24 | 6.23MiB 90k https | avc1.4D400C 90k video only 144p, mp4_dash\n603 mp4 256x144 24 | ~ 12.78MiB 180k m3u8 | vp09.00.11.08 180k video only\n278 webm 256x144 24 | 6.28MiB 90k https | vp09.00.11.08 90k video only 144p, webm_dash\n229 mp4 426x240 24 | ~ 23.32MiB 328k m3u8 | avc1.4D4015 328k video only\n133 mp4 426x240 24 | 14.25MiB 205k https | avc1.4D4015 205k video only 240p, mp4_dash\n604 mp4 426x240 24 | ~ 22.94MiB 323k m3u8 | vp09.00.20.08 323k video only\n242 webm 426x240 24 | 12.17MiB 175k https | vp09.00.20.08 175k video only 240p, webm_dash\n230 mp4 640x360 24 | ~ 53.80MiB 757k m3u8 | avc1.4D401E 757k video only\n134 mp4 640x360 24 | 31.14MiB 449k https | avc1.4D401E 449k video only 360p, mp4_dash\n18 mp4 640x360 24 2 | \u2248 41.02MiB 577k https | avc1.42001E mp4a.40.2 44k [en] 360p\n605 mp4 640x360 24 | ~ 44.68MiB 629k m3u8 | vp09.00.21.08 629k video only\n243 webm 640x360 24 | 21.23MiB 306k https | vp09.00.21.08 306k video only 360p, webm_dash\n231 mp4 854x480 24 | ~ 94.64MiB 1332k m3u8 | avc1.4D401E 1332k video only\n135 mp4 854x480 24 | 63.11MiB 909k https | avc1.4D401E 909k video only 480p, mp4_dash\n606 mp4 854x480 24 | ~ 81.23MiB 1143k m3u8 | vp09.00.30.08 1143k video only\n244 webm 854x480 24 | 37.70MiB 543k https | vp09.00.30.08 543k video only 480p, webm_dash\n22 mp4 1280x720 24 2 | \u2248138.14MiB 1944k https | avc1.64001F mp4a.40.2 44k [en] 720p\n232 mp4 1280x720 24 | ~177.52MiB 2499k m3u8 | avc1.64001F 2499k video only\n136 mp4 1280x720 24 | 126.06MiB 1816k https | avc1.64001F 1816k video only 720p, mp4_dash\n609 mp4 1280x720 24 | ~152.54MiB 2147k m3u8 | vp09.00.31.08 2147k video only\n247 webm 1280x720 24 | 68.44MiB 986k https | vp09.00.31.08 986k video only 720p, webm_dash\n270 mp4 1920x1080 24 | ~367.41MiB 5172k m3u8 | avc1.640028 5172k video only\n137 mp4 1920x1080 24 | 266.84MiB 3844k https | avc1.640028 3844k video only 1080p, mp4_dash\n614 mp4 1920x1080 24 | ~228.38MiB 3215k m3u8 | vp09.00.40.08 3215k video only\n248 webm 1920x1080 24 | 120.74MiB 1739k https | vp09.00.40.08 1739k video only 1080p, webm_dash\n620 mp4 2560x1440 24 | ~631.72MiB 8892k m3u8 | vp09.00.50.08 8892k video only\n271 webm 2560x1440 24 | 451.78MiB 6508k https | vp09.00.50.08 6508k video only 1440p, webm_dash\n625 mp4 3840x2160 24 | ~ 1.19GiB 17121k m3u8 | vp09.00.50.08 17121k video only\n313 webm 3840x2160 24 | 855.91MiB 12330k https | vp09.00.50.08 12330k video only 2160p, webm_dash",
+ "thumbnails_table": "ID Width Height URL\n0 unknown unknown https://i.ytimg.com/vi/bwRHIkYqYJo/3.jpg\n1 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/3.webp\n2 unknown unknown https://i.ytimg.com/vi/bwRHIkYqYJo/2.jpg\n3 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/2.webp\n4 unknown unknown https://i.ytimg.com/vi/bwRHIkYqYJo/1.jpg\n5 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/1.webp\n6 unknown unknown https://i.ytimg.com/vi/bwRHIkYqYJo/mq3.jpg\n7 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/mq3.webp\n8 unknown unknown https://i.ytimg.com/vi/bwRHIkYqYJo/mq2.jpg\n9 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/mq2.webp\n10 unknown unknown https://i.ytimg.com/vi/bwRHIkYqYJo/mq1.jpg\n11 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/mq1.webp\n12 unknown unknown https://i.ytimg.com/vi/bwRHIkYqYJo/hq3.jpg\n13 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/hq3.webp\n14 unknown unknown https://i.ytimg.com/vi/bwRHIkYqYJo/hq2.jpg\n15 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/hq2.webp\n16 unknown unknown https://i.ytimg.com/vi/bwRHIkYqYJo/hq1.jpg\n17 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/hq1.webp\n18 unknown unknown https://i.ytimg.com/vi/bwRHIkYqYJo/sd3.jpg\n19 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/sd3.webp\n20 unknown unknown https://i.ytimg.com/vi/bwRHIkYqYJo/sd2.jpg\n21 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/sd2.webp\n22 unknown unknown https://i.ytimg.com/vi/bwRHIkYqYJo/sd1.jpg\n23 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/sd1.webp\n24 120 90 https://i.ytimg.com/vi/bwRHIkYqYJo/default.jpg\n25 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/default.webp\n26 320 180 https://i.ytimg.com/vi/bwRHIkYqYJo/mqdefault.jpg\n27 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/mqdefault.webp\n28 unknown unknown https://i.ytimg.com/vi/bwRHIkYqYJo/0.jpg\n29 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/0.webp\n30 168 94 https://i.ytimg.com/vi/bwRHIkYqYJo/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCfnqZqzf3SpMWSBlr5eEkYrRbeOw\n31 196 110 https://i.ytimg.com/vi/bwRHIkYqYJo/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAnj5wtnbYGzZX9gerMKQ-FS5sSeA\n32 246 138 https://i.ytimg.com/vi/bwRHIkYqYJo/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC5fmbFoduOVcifLAMu006pXlcicQ\n33 336 188 https://i.ytimg.com/vi/bwRHIkYqYJo/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDISoJqnSXFGgqsSCMRd9NCiV5Dyg\n34 480 360 https://i.ytimg.com/vi/bwRHIkYqYJo/hqdefault.jpg\n35 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/hqdefault.webp\n36 640 480 https://i.ytimg.com/vi/bwRHIkYqYJo/sddefault.jpg\n37 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/sddefault.webp\n38 unknown unknown https://i.ytimg.com/vi/bwRHIkYqYJo/hq720.jpg\n39 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/hq720.webp\n40 1920 1080 https://i.ytimg.com/vi/bwRHIkYqYJo/maxresdefault.jpg\n41 unknown unknown https://i.ytimg.com/vi_webp/bwRHIkYqYJo/maxresdefault.webp",
+ "subtitles_table": "Language Name Formats\nde German vtt, ttml, srv3, srv2, srv1, json3",
+ "automatic_captions_table": "Language Name Formats\nde German, German, German, German, German, German, unknown vtt, ttml, srv3, srv2, srv1, json3, vtt\naf Afrikaans vtt, ttml, srv3, srv2, srv1, json3\nak Akan vtt, ttml, srv3, srv2, srv1, json3\nsq Albanian vtt, ttml, srv3, srv2, srv1, json3\nam Amharic vtt, ttml, srv3, srv2, srv1, json3\nar Arabic vtt, ttml, srv3, srv2, srv1, json3\nhy Armenian vtt, ttml, srv3, srv2, srv1, json3\nas Assamese vtt, ttml, srv3, srv2, srv1, json3\nay Aymara vtt, ttml, srv3, srv2, srv1, json3\naz Azerbaijani vtt, ttml, srv3, srv2, srv1, json3\nbn Bangla vtt, ttml, srv3, srv2, srv1, json3\neu Basque vtt, ttml, srv3, srv2, srv1, json3\nbe Belarusian vtt, ttml, srv3, srv2, srv1, json3\nbho Bhojpuri vtt, ttml, srv3, srv2, srv1, json3\nbs Bosnian vtt, ttml, srv3, srv2, srv1, json3\nbg Bulgarian vtt, ttml, srv3, srv2, srv1, json3\nmy Burmese vtt, ttml, srv3, srv2, srv1, json3\nca Catalan vtt, ttml, srv3, srv2, srv1, json3\nceb Cebuano vtt, ttml, srv3, srv2, srv1, json3\nzh-Hans Chinese (Simplified) vtt, ttml, srv3, srv2, srv1, json3\nzh-Hant Chinese (Traditional) vtt, ttml, srv3, srv2, srv1, json3\nco Corsican vtt, ttml, srv3, srv2, srv1, json3\nhr Croatian vtt, ttml, srv3, srv2, srv1, json3\ncs Czech vtt, ttml, srv3, srv2, srv1, json3\nda Danish vtt, ttml, srv3, srv2, srv1, json3\ndv Divehi vtt, ttml, srv3, srv2, srv1, json3\nnl Dutch vtt, ttml, srv3, srv2, srv1, json3\nen-orig English (Original) vtt, ttml, srv3, srv2, srv1, json3\nen English vtt, ttml, srv3, srv2, srv1, json3\neo Esperanto vtt, ttml, srv3, srv2, srv1, json3\net Estonian vtt, ttml, srv3, srv2, srv1, json3\nee Ewe vtt, ttml, srv3, srv2, srv1, json3\nfil Filipino vtt, ttml, srv3, srv2, srv1, json3\nfi Finnish vtt, ttml, srv3, srv2, srv1, json3\nfr French vtt, ttml, srv3, srv2, srv1, json3\ngl Galician vtt, ttml, srv3, srv2, srv1, json3\nlg Ganda vtt, ttml, srv3, srv2, srv1, json3\nka Georgian vtt, ttml, srv3, srv2, srv1, json3\nel Greek vtt, ttml, srv3, srv2, srv1, json3\ngn Guarani vtt, ttml, srv3, srv2, srv1, json3\ngu Gujarati vtt, ttml, srv3, srv2, srv1, json3\nht Haitian Creole vtt, ttml, srv3, srv2, srv1, json3\nha Hausa vtt, ttml, srv3, srv2, srv1, json3\nhaw Hawaiian vtt, ttml, srv3, srv2, srv1, json3\niw Hebrew vtt, ttml, srv3, srv2, srv1, json3\nhi Hindi vtt, ttml, srv3, srv2, srv1, json3\nhmn Hmong vtt, ttml, srv3, srv2, srv1, json3\nhu Hungarian vtt, ttml, srv3, srv2, srv1, json3\nis Icelandic vtt, ttml, srv3, srv2, srv1, json3\nig Igbo vtt, ttml, srv3, srv2, srv1, json3\nid Indonesian vtt, ttml, srv3, srv2, srv1, json3\nga Irish vtt, ttml, srv3, srv2, srv1, json3\nit Italian vtt, ttml, srv3, srv2, srv1, json3\nja Japanese vtt, ttml, srv3, srv2, srv1, json3\njv Javanese vtt, ttml, srv3, srv2, srv1, json3\nkn Kannada vtt, ttml, srv3, srv2, srv1, json3\nkk Kazakh vtt, ttml, srv3, srv2, srv1, json3\nkm Khmer vtt, ttml, srv3, srv2, srv1, json3\nrw Kinyarwanda vtt, ttml, srv3, srv2, srv1, json3\nko Korean vtt, ttml, srv3, srv2, srv1, json3\nkri Krio vtt, ttml, srv3, srv2, srv1, json3\nku Kurdish vtt, ttml, srv3, srv2, srv1, json3\nky Kyrgyz vtt, ttml, srv3, srv2, srv1, json3\nlo Lao vtt, ttml, srv3, srv2, srv1, json3\nla Latin vtt, ttml, srv3, srv2, srv1, json3\nlv Latvian vtt, ttml, srv3, srv2, srv1, json3\nln Lingala vtt, ttml, srv3, srv2, srv1, json3\nlt Lithuanian vtt, ttml, srv3, srv2, srv1, json3\nlb Luxembourgish vtt, ttml, srv3, srv2, srv1, json3\nmk Macedonian vtt, ttml, srv3, srv2, srv1, json3\nmg Malagasy vtt, ttml, srv3, srv2, srv1, json3\nms Malay vtt, ttml, srv3, srv2, srv1, json3\nml Malayalam vtt, ttml, srv3, srv2, srv1, json3\nmt Maltese vtt, ttml, srv3, srv2, srv1, json3\nmi M\u0101ori vtt, ttml, srv3, srv2, srv1, json3\nmr Marathi vtt, ttml, srv3, srv2, srv1, json3\nmn Mongolian vtt, ttml, srv3, srv2, srv1, json3\nne Nepali vtt, ttml, srv3, srv2, srv1, json3\nnso Northern Sotho vtt, ttml, srv3, srv2, srv1, json3\nno Norwegian vtt, ttml, srv3, srv2, srv1, json3\nny Nyanja vtt, ttml, srv3, srv2, srv1, json3\nor Odia vtt, ttml, srv3, srv2, srv1, json3\nom Oromo vtt, ttml, srv3, srv2, srv1, json3\nps Pashto vtt, ttml, srv3, srv2, srv1, json3\nfa Persian vtt, ttml, srv3, srv2, srv1, json3\npl Polish vtt, ttml, srv3, srv2, srv1, json3\npt Portuguese vtt, ttml, srv3, srv2, srv1, json3\npa Punjabi vtt, ttml, srv3, srv2, srv1, json3\nqu Quechua vtt, ttml, srv3, srv2, srv1, json3\nro Romanian vtt, ttml, srv3, srv2, srv1, json3\nru Russian vtt, ttml, srv3, srv2, srv1, json3\nsm Samoan vtt, ttml, srv3, srv2, srv1, json3\nsa Sanskrit vtt, ttml, srv3, srv2, srv1, json3\ngd Scottish Gaelic vtt, ttml, srv3, srv2, srv1, json3\nsr Serbian vtt, ttml, srv3, srv2, srv1, json3\nsn Shona vtt, ttml, srv3, srv2, srv1, json3\nsd Sindhi vtt, ttml, srv3, srv2, srv1, json3\nsi Sinhala vtt, ttml, srv3, srv2, srv1, json3\nsk Slovak vtt, ttml, srv3, srv2, srv1, json3\nsl Slovenian vtt, ttml, srv3, srv2, srv1, json3\nso Somali vtt, ttml, srv3, srv2, srv1, json3\nst Southern Sotho vtt, ttml, srv3, srv2, srv1, json3\nes Spanish vtt, ttml, srv3, srv2, srv1, json3\nsu Sundanese vtt, ttml, srv3, srv2, srv1, json3\nsw Swahili vtt, ttml, srv3, srv2, srv1, json3\nsv Swedish vtt, ttml, srv3, srv2, srv1, json3\ntg Tajik vtt, ttml, srv3, srv2, srv1, json3\nta Tamil vtt, ttml, srv3, srv2, srv1, json3\ntt Tatar vtt, ttml, srv3, srv2, srv1, json3\nte Telugu vtt, ttml, srv3, srv2, srv1, json3\nth Thai vtt, ttml, srv3, srv2, srv1, json3\nti Tigrinya vtt, ttml, srv3, srv2, srv1, json3\nts Tsonga vtt, ttml, srv3, srv2, srv1, json3\ntr Turkish vtt, ttml, srv3, srv2, srv1, json3\ntk Turkmen vtt, ttml, srv3, srv2, srv1, json3\nuk Ukrainian vtt, ttml, srv3, srv2, srv1, json3\nur Urdu vtt, ttml, srv3, srv2, srv1, json3\nug Uyghur vtt, ttml, srv3, srv2, srv1, json3\nuz Uzbek vtt, ttml, srv3, srv2, srv1, json3\nvi Vietnamese vtt, ttml, srv3, srv2, srv1, json3\ncy Welsh vtt, ttml, srv3, srv2, srv1, json3\nfy Western Frisian vtt, ttml, srv3, srv2, srv1, json3\nxh Xhosa vtt, ttml, srv3, srv2, srv1, json3\nyi Yiddish vtt, ttml, srv3, srv2, srv1, json3\nyo Yoruba vtt, ttml, srv3, srv2, srv1, json3\nzu Zulu vtt, ttml, srv3, srv2, srv1, json3",
+ "autonumber": 1,
+ "video_autonumber": 1
+}
diff --git a/test/support/fixtures/job_fixtures.ex b/test/support/fixtures/job_fixtures.ex
new file mode 100644
index 0000000..4aab0dd
--- /dev/null
+++ b/test/support/fixtures/job_fixtures.ex
@@ -0,0 +1,19 @@
+defmodule Pinchflat.JobFixtures do
+ @moduledoc false
+
+ defmodule TestJobWorker do
+ @moduledoc false
+ use Oban.Worker, queue: :default
+
+ @impl Oban.Worker
+ def perform(%Oban.Job{}) do
+ :ok
+ end
+ end
+
+ def job_fixture() do
+ {:ok, job} = Oban.insert(TestJobWorker.new(%{}))
+
+ job
+ end
+end
diff --git a/test/support/fixtures/media_fixtures.ex b/test/support/fixtures/media_fixtures.ex
new file mode 100644
index 0000000..7fe9e73
--- /dev/null
+++ b/test/support/fixtures/media_fixtures.ex
@@ -0,0 +1,45 @@
+defmodule Pinchflat.MediaFixtures do
+ @moduledoc """
+ This module defines test helpers for creating
+ entities via the `Pinchflat.Media` context.
+ """
+
+ alias Pinchflat.MediaSourceFixtures
+
+ @doc """
+ Generate a media_item.
+ """
+ def media_item_fixture(attrs \\ %{}) do
+ {:ok, media_item} =
+ attrs
+ |> Enum.into(%{
+ media_id: Faker.String.base64(12),
+ title: Faker.Commerce.product_name(),
+ video_filepath: "/video/#{Faker.File.file_name(:video)}",
+ channel_id: MediaSourceFixtures.channel_fixture().id
+ })
+ |> Pinchflat.Media.create_media_item()
+
+ media_item
+ end
+
+ @doc """
+ Generate a media_item with metadata.
+ """
+ def media_item_with_metadata(attrs \\ %{}) do
+ json_filepath =
+ Path.join([
+ Path.dirname(__ENV__.file),
+ "support",
+ "fixtures",
+ "files",
+ "media_metadata.json"
+ ])
+
+ {:ok, file_body} = File.read(json_filepath)
+ {:ok, parsed_json} = Phoenix.json_library().decode(file_body)
+ merged_attrs = Map.merge(attrs, %{metadata: %{client_respinse: parsed_json}})
+
+ media_item_fixture(merged_attrs)
+ end
+end
diff --git a/test/support/fixtures/media_source_fixtures.ex b/test/support/fixtures/media_source_fixtures.ex
new file mode 100644
index 0000000..007c9d4
--- /dev/null
+++ b/test/support/fixtures/media_source_fixtures.ex
@@ -0,0 +1,30 @@
+defmodule Pinchflat.MediaSourceFixtures do
+ @moduledoc """
+ This module defines test helpers for creating
+ entities via the `Pinchflat.MediaSource` context.
+ """
+
+ alias Pinchflat.Repo
+ alias Pinchflat.ProfilesFixtures
+ alias Pinchflat.MediaSource.Channel
+
+ @doc """
+ Generate a channel.
+ """
+ def channel_fixture(attrs \\ %{}) do
+ {:ok, channel} =
+ %Channel{}
+ |> Channel.changeset(
+ Enum.into(attrs, %{
+ name: "Channel ##{:rand.uniform(1_000_000)}",
+ channel_id: Base.encode16(:crypto.hash(:md5, "#{:rand.uniform(1_000_000)}")),
+ original_url: "https://www.youtube.com/channel/#{Faker.String.base64(12)}",
+ media_profile_id: ProfilesFixtures.media_profile_fixture().id,
+ index_frequency_minutes: 60
+ })
+ )
+ |> Repo.insert()
+
+ channel
+ end
+end
diff --git a/test/support/fixtures/profiles_fixtures.ex b/test/support/fixtures/profiles_fixtures.ex
new file mode 100644
index 0000000..4697fa2
--- /dev/null
+++ b/test/support/fixtures/profiles_fixtures.ex
@@ -0,0 +1,21 @@
+defmodule Pinchflat.ProfilesFixtures do
+ @moduledoc """
+ This module defines test helpers for creating
+ entities via the `Pinchflat.Profiles` context.
+ """
+
+ @doc """
+ Generate a media_profile.
+ """
+ def media_profile_fixture(attrs \\ %{}) do
+ {:ok, media_profile} =
+ attrs
+ |> Enum.into(%{
+ name: "Media Profile ##{:rand.uniform(1_000_000)}",
+ output_path_template: "{{title}}.{{ext}}"
+ })
+ |> Pinchflat.Profiles.create_media_profile()
+
+ media_profile
+ end
+end
diff --git a/test/support/fixtures/tasks_fixtures.ex b/test/support/fixtures/tasks_fixtures.ex
new file mode 100644
index 0000000..c310ea6
--- /dev/null
+++ b/test/support/fixtures/tasks_fixtures.ex
@@ -0,0 +1,24 @@
+defmodule Pinchflat.TasksFixtures do
+ @moduledoc """
+ This module defines test helpers for creating
+ entities via the `Pinchflat.Tasks` context.
+ """
+
+ alias Pinchflat.JobFixtures
+ alias Pinchflat.MediaSourceFixtures
+
+ @doc """
+ Generate a task.
+ """
+ def task_fixture(attrs \\ %{}) do
+ {:ok, task} =
+ attrs
+ |> Enum.into(%{
+ channel_id: MediaSourceFixtures.channel_fixture().id,
+ job_id: JobFixtures.job_fixture().id
+ })
+ |> Pinchflat.Tasks.create_task()
+
+ task
+ end
+end
diff --git a/test/support/scripts/yt-dlp-mocks/repeater.sh b/test/support/scripts/yt-dlp-mocks/repeater.sh
index 169303d..da53a84 100755
--- a/test/support/scripts/yt-dlp-mocks/repeater.sh
+++ b/test/support/scripts/yt-dlp-mocks/repeater.sh
@@ -1,7 +1,16 @@
#!/bin/bash
-if [[ "$@" == *"--dump-json"* ]]; then
- echo '{ "args": "'$@'"}'
-else
- echo $@
-fi
+# Args come in the format of " --print-to-file