diff --git a/lib/pinchflat/profiles/media_profile.ex b/lib/pinchflat/profiles/media_profile.ex
index e92d1fb..b765055 100644
--- a/lib/pinchflat/profiles/media_profile.ex
+++ b/lib/pinchflat/profiles/media_profile.ex
@@ -21,6 +21,7 @@ defmodule Pinchflat.Profiles.MediaProfile do
embed_metadata
shorts_behaviour
livestream_behaviour
+ preferred_resolution
)a
@required_fields ~w(name output_path_template)a
@@ -48,8 +49,10 @@ defmodule Pinchflat.Profiles.MediaProfile do
# livestreams _only_ and ignore regular videos. The redundant case
# is when one is set to :only and the other is set to :exclude.
# See `build_format_clauses` in the Media context for more.
- field :shorts_behaviour, Ecto.Enum, values: [:include, :exclude, :only], default: :include
- field :livestream_behaviour, Ecto.Enum, values: [:include, :exclude, :only], 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 :preferred_resolution, Ecto.Enum, values: ~w(2160p 1080p 720p 480p 360p)a, default: :"1080p"
has_many :sources, Source
diff --git a/lib/pinchflat/profiles/options/yt_dlp/download_option_builder.ex b/lib/pinchflat/profiles/options/yt_dlp/download_option_builder.ex
index 58a0325..52825c6 100644
--- a/lib/pinchflat/profiles/options/yt_dlp/download_option_builder.ex
+++ b/lib/pinchflat/profiles/options/yt_dlp/download_option_builder.ex
@@ -26,6 +26,7 @@ defmodule Pinchflat.Profiles.Options.YtDlp.DownloadOptionBuilder do
subtitle_options(media_profile) ++
thumbnail_options(media_profile) ++
metadata_options(media_profile) ++
+ quality_options(media_profile) ++
output_options(media_profile)
{:ok, built_options}
@@ -87,6 +88,19 @@ defmodule Pinchflat.Profiles.Options.YtDlp.DownloadOptionBuilder do
end)
end
+ defp quality_options(media_profile) do
+ codec_options = "+codec:avc:m4a"
+
+ case media_profile.preferred_resolution do
+ :"360p" -> [format_sort: "res:360,#{codec_options}"]
+ :"480p" -> [format_sort: "res:480,#{codec_options}"]
+ :"720p" -> [format_sort: "res:720,#{codec_options}"]
+ :"1080p" -> [format_sort: "res:1080,#{codec_options}"]
+ :"1440p" -> [format_sort: "res:1440,#{codec_options}"]
+ :"2160p" -> [format_sort: "res:2160,#{codec_options}"]
+ end
+ end
+
defp output_options(media_profile) do
{:ok, output_path} = OutputPathBuilder.build(media_profile.output_path_template)
diff --git a/lib/pinchflat_web/controllers/media_profiles/media_profile_html.ex b/lib/pinchflat_web/controllers/media_profiles/media_profile_html.ex
index 564a4cc..31133c1 100644
--- a/lib/pinchflat_web/controllers/media_profiles/media_profile_html.ex
+++ b/lib/pinchflat_web/controllers/media_profiles/media_profile_html.ex
@@ -18,4 +18,14 @@ defmodule PinchflatWeb.MediaProfiles.MediaProfileHTML do
{"Only", :only}
]
end
+
+ def friendly_resolution_options do
+ [
+ {"2160p", "4k"},
+ {"1080p", "1080p"},
+ {"720p", "720p"},
+ {"480p", "480p"},
+ {"360p", "360p"}
+ ]
+ end
end
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
index a009702..e1d90dd 100644
--- 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
@@ -19,6 +19,9 @@
<:col :let={media_profile} label="Output Template">
<%= media_profile.output_path_template %>
+ <:col :let={media_profile} label="Preferred Resolution">
+ <%= media_profile.preferred_resolution %>
+
<:col :let={media_profile} label="" class="flex place-content-evenly">
<.link
navigate={~p"/media_profiles/#{media_profile.id}"}
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
index 1c653fc..cf82606 100644
--- 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
@@ -66,6 +66,18 @@
label="Include Livestreams?"
/>
+