diff options
author | feld <feld@feld.me> | 2021-06-08 20:30:55 +0000 |
---|---|---|
committer | feld <feld@feld.me> | 2021-06-08 20:30:55 +0000 |
commit | 1175023687aa7ce33f6b1ee90acb932cfbd58025 (patch) | |
tree | 495efb6f5f5f268c5735f8dc5a20227d9946cbcf /lib | |
parent | 939b3bfe43b8985c93d2dfa15ef600facd8db730 (diff) | |
parent | 3121ed1325cceb8ec3f8d153d3c6fa18b2951714 (diff) | |
download | pleroma-1175023687aa7ce33f6b1ee90acb932cfbd58025.tar.gz pleroma-1175023687aa7ce33f6b1ee90acb932cfbd58025.zip |
Merge branch 'metadata-for-all' into 'develop'
Support metadata for video files too
See merge request pleroma/pleroma!3441
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/application_requirements.ex | 3 | ||||
-rw-r--r-- | lib/pleroma/upload/filter/analyze_metadata.ex | 38 |
2 files changed, 40 insertions, 1 deletions
diff --git a/lib/pleroma/application_requirements.ex b/lib/pleroma/application_requirements.ex index ee6ee9516..a56311a65 100644 --- a/lib/pleroma/application_requirements.ex +++ b/lib/pleroma/application_requirements.ex @@ -168,7 +168,8 @@ defmodule Pleroma.ApplicationRequirements do check_filter(Pleroma.Upload.Filter.Mogrify, "mogrify"), check_filter(Pleroma.Upload.Filter.Mogrifun, "mogrify"), check_filter(Pleroma.Upload.Filter.AnalyzeMetadata, "mogrify"), - check_filter(Pleroma.Upload.Filter.AnalyzeMetadata, "convert") + check_filter(Pleroma.Upload.Filter.AnalyzeMetadata, "convert"), + check_filter(Pleroma.Upload.Filter.AnalyzeMetadata, "ffprobe") ] preview_proxy_commands_status = diff --git a/lib/pleroma/upload/filter/analyze_metadata.ex b/lib/pleroma/upload/filter/analyze_metadata.ex index 8c23076d4..c89c30fc1 100644 --- a/lib/pleroma/upload/filter/analyze_metadata.ex +++ b/lib/pleroma/upload/filter/analyze_metadata.ex @@ -33,6 +33,23 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do end end + def filter(%Pleroma.Upload{tempfile: file, content_type: "video" <> _} = upload) do + try do + result = media_dimensions(file) + + upload = + upload + |> Map.put(:width, result.width) + |> Map.put(:height, result.height) + + {:ok, :filtered, upload} + rescue + e in ErlangError -> + Logger.warn("#{__MODULE__}: #{inspect(e)}") + {:ok, :noop} + end + end + def filter(_), do: {:ok, :noop} defp get_blurhash(file) do @@ -42,4 +59,25 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do _ -> nil end end + + defp media_dimensions(file) do + with executable when is_binary(executable) <- System.find_executable("ffprobe"), + args = [ + "-v", + "error", + "-show_entries", + "stream=width,height", + "-of", + "csv=p=0:s=x", + file + ], + {result, 0} <- System.cmd(executable, args), + [width, height] <- + String.split(String.trim(result), "x") |> Enum.map(&String.to_integer(&1)) do + %{width: width, height: height} + else + nil -> {:error, {:ffprobe, :command_not_found}} + {:error, _} = error -> error + end + end end |