Adds option to only download audio
This commit is contained in:
parent
8cc36928f1
commit
b9983815cd
4 changed files with 58 additions and 12 deletions
|
|
@ -53,7 +53,7 @@ defmodule Pinchflat.Profiles.MediaProfile do
|
||||||
field :shorts_behaviour, Ecto.Enum, values: ~w(include exclude only)a, default: :include
|
field :shorts_behaviour, Ecto.Enum, values: ~w(include exclude only)a, default: :include
|
||||||
field :livestream_behaviour, Ecto.Enum, values: ~w(include exclude only)a, default: :include
|
field :livestream_behaviour, Ecto.Enum, values: ~w(include exclude only)a, default: :include
|
||||||
|
|
||||||
field :preferred_resolution, Ecto.Enum, values: ~w(2160p 1080p 720p 480p 360p)a, default: :"1080p"
|
field :preferred_resolution, Ecto.Enum, values: ~w(2160p 1080p 720p 480p 360p audio)a, default: :"1080p"
|
||||||
|
|
||||||
has_many :sources, Source
|
has_many :sources, Source
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ defmodule Pinchflat.Profiles.Options.YtDlp.DownloadOptionBuilder do
|
||||||
{{:download_auto_subs, true}, %{download_subs: true}} ->
|
{{:download_auto_subs, true}, %{download_subs: true}} ->
|
||||||
acc ++ [:write_auto_subs]
|
acc ++ [:write_auto_subs]
|
||||||
|
|
||||||
{{:embed_subs, true}, _} ->
|
{{:embed_subs, true}, %{preferred_resolution: pr}} when pr != :audio ->
|
||||||
acc ++ [:embed_subs]
|
acc ++ [:embed_subs]
|
||||||
|
|
||||||
{{:sub_langs, sub_langs}, %{download_subs: true}} ->
|
{{:sub_langs, sub_langs}, %{download_subs: true}} ->
|
||||||
|
|
@ -63,10 +63,15 @@ defmodule Pinchflat.Profiles.Options.YtDlp.DownloadOptionBuilder do
|
||||||
mapped_struct = Map.from_struct(media_profile)
|
mapped_struct = Map.from_struct(media_profile)
|
||||||
|
|
||||||
Enum.reduce(mapped_struct, [], fn attr, acc ->
|
Enum.reduce(mapped_struct, [], fn attr, acc ->
|
||||||
case attr do
|
case {attr, media_profile} do
|
||||||
{:download_thumbnail, true} -> acc ++ [:write_thumbnail]
|
{{:download_thumbnail, true}, _} ->
|
||||||
{:embed_thumbnail, true} -> acc ++ [:embed_thumbnail]
|
acc ++ [:write_thumbnail]
|
||||||
_ -> acc
|
|
||||||
|
{{:embed_thumbnail, true}, %{preferred_resolution: pr}} when pr != :audio ->
|
||||||
|
acc ++ [:embed_thumbnail]
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
acc
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
@ -75,10 +80,15 @@ defmodule Pinchflat.Profiles.Options.YtDlp.DownloadOptionBuilder do
|
||||||
mapped_struct = Map.from_struct(media_profile)
|
mapped_struct = Map.from_struct(media_profile)
|
||||||
|
|
||||||
Enum.reduce(mapped_struct, [], fn attr, acc ->
|
Enum.reduce(mapped_struct, [], fn attr, acc ->
|
||||||
case attr do
|
case {attr, media_profile} do
|
||||||
{:download_metadata, true} -> acc ++ [:write_info_json, :clean_info_json]
|
{{:download_metadata, true}, _} ->
|
||||||
{:embed_metadata, true} -> acc ++ [:embed_metadata]
|
acc ++ [:write_info_json, :clean_info_json]
|
||||||
_ -> acc
|
|
||||||
|
{{:embed_metadata, true}, %{preferred_resolution: pr}} when pr != :audio ->
|
||||||
|
acc ++ [:embed_metadata]
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
acc
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
@ -87,6 +97,8 @@ defmodule Pinchflat.Profiles.Options.YtDlp.DownloadOptionBuilder do
|
||||||
codec_options = "+codec:avc:m4a"
|
codec_options = "+codec:avc:m4a"
|
||||||
|
|
||||||
case media_profile.preferred_resolution do
|
case media_profile.preferred_resolution do
|
||||||
|
# Also be aware that :audio disabled all embedding options for thumbnails, subtitles, and metadata
|
||||||
|
:audio -> [format_sort: "ext", format: "bestaudio"]
|
||||||
:"360p" -> [format_sort: "res:360,#{codec_options}"]
|
:"360p" -> [format_sort: "res:360,#{codec_options}"]
|
||||||
:"480p" -> [format_sort: "res:480,#{codec_options}"]
|
:"480p" -> [format_sort: "res:480,#{codec_options}"]
|
||||||
:"720p" -> [format_sort: "res:720,#{codec_options}"]
|
:"720p" -> [format_sort: "res:720,#{codec_options}"]
|
||||||
|
|
|
||||||
|
|
@ -21,11 +21,12 @@ defmodule PinchflatWeb.MediaProfiles.MediaProfileHTML do
|
||||||
|
|
||||||
def friendly_resolution_options do
|
def friendly_resolution_options do
|
||||||
[
|
[
|
||||||
{"2160p", "4k"},
|
{"4k", "2160p"},
|
||||||
{"1080p", "1080p"},
|
{"1080p", "1080p"},
|
||||||
{"720p", "720p"},
|
{"720p", "720p"},
|
||||||
{"480p", "480p"},
|
{"480p", "480p"},
|
||||||
{"360p", "360p"}
|
{"360p", "360p"},
|
||||||
|
{"Audio Only", "audio"}
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,14 @@ defmodule Pinchflat.Profiles.Options.YtDlp.DownloadOptionBuilderTest do
|
||||||
assert :embed_subs in res
|
assert :embed_subs in res
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "doesn't include :embed_subs option when preferred_resolution is :audio", %{media_item: media_item} do
|
||||||
|
media_item = update_media_profile_attribute(media_item, %{embed_subs: true, preferred_resolution: :audio})
|
||||||
|
|
||||||
|
assert {:ok, res} = DownloadOptionBuilder.build(media_item)
|
||||||
|
|
||||||
|
refute :embed_subs in res
|
||||||
|
end
|
||||||
|
|
||||||
test "includes sub_langs option when download_subs is true", %{media_item: media_item} do
|
test "includes sub_langs option when download_subs is true", %{media_item: media_item} do
|
||||||
media_item = update_media_profile_attribute(media_item, %{download_subs: true, sub_langs: "en"})
|
media_item = update_media_profile_attribute(media_item, %{download_subs: true, sub_langs: "en"})
|
||||||
|
|
||||||
|
|
@ -125,6 +133,14 @@ defmodule Pinchflat.Profiles.Options.YtDlp.DownloadOptionBuilderTest do
|
||||||
assert :embed_thumbnail in res
|
assert :embed_thumbnail in res
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "doesn't include :embed_thumbnail option when preferred_resolution is :audio", %{media_item: media_item} do
|
||||||
|
media_item = update_media_profile_attribute(media_item, %{embed_thumbnail: true, preferred_resolution: :audio})
|
||||||
|
|
||||||
|
assert {:ok, res} = DownloadOptionBuilder.build(media_item)
|
||||||
|
|
||||||
|
refute :embed_thumbnail in res
|
||||||
|
end
|
||||||
|
|
||||||
test "doesn't include these options when not specified", %{media_item: media_item} do
|
test "doesn't include these options when not specified", %{media_item: media_item} do
|
||||||
media_item = update_media_profile_attribute(media_item, %{embed_thumbnail: false, download_thumbnail: false})
|
media_item = update_media_profile_attribute(media_item, %{embed_thumbnail: false, download_thumbnail: false})
|
||||||
|
|
||||||
|
|
@ -153,6 +169,14 @@ defmodule Pinchflat.Profiles.Options.YtDlp.DownloadOptionBuilderTest do
|
||||||
assert :embed_metadata in res
|
assert :embed_metadata in res
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "doesn't include :embed_metadata option when preferred_resolution is :audio", %{media_item: media_item} do
|
||||||
|
media_item = update_media_profile_attribute(media_item, %{embed_metadata: true, preferred_resolution: :audio})
|
||||||
|
|
||||||
|
assert {:ok, res} = DownloadOptionBuilder.build(media_item)
|
||||||
|
|
||||||
|
refute :embed_metadata in res
|
||||||
|
end
|
||||||
|
|
||||||
test "doesn't include these options when not specified", %{media_item: media_item} do
|
test "doesn't include these options when not specified", %{media_item: media_item} do
|
||||||
media_item = update_media_profile_attribute(media_item, %{embed_metadata: false, download_metadata: false})
|
media_item = update_media_profile_attribute(media_item, %{embed_metadata: false, download_metadata: false})
|
||||||
|
|
||||||
|
|
@ -172,6 +196,15 @@ defmodule Pinchflat.Profiles.Options.YtDlp.DownloadOptionBuilderTest do
|
||||||
|
|
||||||
assert {:format_sort, "res:1080,+codec:avc:m4a"} in res
|
assert {:format_sort, "res:1080,+codec:avc:m4a"} in res
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "it includes quality options for audio only", %{media_item: media_item} do
|
||||||
|
media_item = update_media_profile_attribute(media_item, %{preferred_resolution: :audio})
|
||||||
|
|
||||||
|
assert {:ok, res} = DownloadOptionBuilder.build(media_item)
|
||||||
|
|
||||||
|
assert {:format, "bestaudio"} in res
|
||||||
|
assert {:format_sort, "ext"} in res
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp update_media_profile_attribute(media_item_with_preloads, attrs) do
|
defp update_media_profile_attribute(media_item_with_preloads, attrs) do
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue