diff --git a/lib/philomena/processors/webm.ex b/lib/philomena/processors/webm.ex index 93232e99..0b8b2dd4 100644 --- a/lib/philomena/processors/webm.ex +++ b/lib/philomena/processors/webm.ex @@ -10,7 +10,7 @@ defmodule Philomena.Processors.Webm do {:ok, intensities} = Intensities.file(preview) - scaled = Enum.flat_map(versions, &scale_if_smaller(file, palette, dimensions, &1)) + scaled = Enum.flat_map(versions, &scale_if_smaller(file, palette, duration, dimensions, &1)) %{ intensities: intensities, @@ -35,7 +35,7 @@ defmodule Philomena.Processors.Webm do preview end - defp scale_if_smaller(file, palette, dimensions, {:full, _target_dim}) do + defp scale_if_smaller(file, palette, _duration, dimensions, {:full, _target_dim}) do {_webm, mp4} = scale_videos(file, palette, dimensions, dimensions) [ @@ -44,12 +44,12 @@ defmodule Philomena.Processors.Webm do ] end - defp scale_if_smaller(file, palette, dimensions, {thumb_name, {target_width, target_height}}) do + defp scale_if_smaller(file, palette, duration, dimensions, {thumb_name, {target_width, target_height}}) do {webm, mp4} = scale_videos(file, palette, dimensions, {target_width, target_height}) cond do thumb_name in [:thumb, :thumb_small, :thumb_tiny] -> - gif = scale_gif(file, palette, {target_width, target_height}) + gif = scale_gif(file, palette, duration, {target_width, target_height}) [ {:copy, webm, "#{thumb_name}.webm"}, @@ -79,14 +79,15 @@ defmodule Philomena.Processors.Webm do {webm, mp4} end - defp scale_gif(file, palette, {width, height}) do + defp scale_gif(file, palette, duration, {width, height}) do gif = Briefly.create!(extname: ".gif") - scale_filter = "scale=w=#{width}:h=#{height}:force_original_aspect_ratio=decrease" + scale_filter = "scale=w=#{width}:h=#{height}:force_original_aspect_ratio=decrease" palette_filter = "paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle" - filter_graph = "[0:v] #{scale_filter} [x]; [x][1:v] #{palette_filter}" + rate_filter = "fps=1/#{duration},settb=1/2,setpts=N" + filter_graph = "[0:v] #{scale_filter},#{rate_filter} [x]; [x][1:v] #{palette_filter}" {_output, 0} = - System.cmd("ffmpeg", ["-loglevel", "0", "-y", "-i", file, "-i", palette, "-lavfi", filter_graph, gif]) + System.cmd("ffmpeg", ["-loglevel", "0", "-y", "-i", file, "-i", palette, "-lavfi", filter_graph, "-r", "2", gif]) gif end diff --git a/lib/philomena_web/controllers/setting_controller.ex b/lib/philomena_web/controllers/setting_controller.ex index 3627b0e8..22998985 100644 --- a/lib/philomena_web/controllers/setting_controller.ex +++ b/lib/philomena_web/controllers/setting_controller.ex @@ -38,6 +38,7 @@ defmodule PhilomenaWeb.SettingController do conn |> set_cookie(user_params, "hidpi", "hidpi") |> set_cookie(user_params, "webm", "webm") + |> set_cookie(user_params, "serve_webm", "serve_webm") |> set_cookie(user_params, "chan_nsfw", "chan_nsfw") |> set_cookie(user_params, "hide_staff_tools", "hide_staff_tools") end diff --git a/lib/philomena_web/templates/image/_image_container.html.slime b/lib/philomena_web/templates/image/_image_container.html.slime index b7b78d2f..1a89d613 100644 --- a/lib/philomena_web/templates/image/_image_container.html.slime +++ b/lib/philomena_web/templates/image/_image_container.html.slime @@ -17,20 +17,24 @@ - true -> - .media-box__overlay.js-spoiler-info-overlay - = case render_intent(@conn, @image, @size) do - {:hidpi, small_url, medium_url, hover_text} -> + .media-box__overlay.js-spoiler-info-overlay a href=link title=hover_text picture img src=small_url srcset="#{small_url} 1x, #{medium_url} 2x" alt=hover_text - {:image, small_url, hover_text} -> + .media-box__overlay.js-spoiler-info-overlay + = if @image.image_mime_type == "video/webm" do + | WebM + a href=link title=hover_text picture img src=small_url alt=hover_text - {:video, webm, mp4, hover_text} -> + .media-box__overlay.js-spoiler-info-overlay a href=link title=hover_text video alt=hover_text autoplay="autoplay" muted="muted" loop="loop" playsinline="playsinline" source src=webm type="video/webm" @@ -38,15 +42,18 @@ img alt=hover_text - {:filtered_image, hover_text} -> + .media-box__overlay.js-spoiler-info-overlay a href=link title=hover_text picture img alt=hover_text - {:filtered_video, hover_text} -> + .media-box__overlay.js-spoiler-info-overlay a href=link title=hover_text video autoplay="autoplay" muted="muted" loop="loop" playsinline="playsinline" img alt=hover_text - :not_rendered -> + .media-box__overlay.js-spoiler-info-overlay a href=link - ' Thumbnails not yet generated \ No newline at end of file + ' Thumbnails not yet generated