Support metadata for video files too
This commit is contained in:
parent
99f8605582
commit
5c27578bce
@ -168,7 +168,8 @@ defmodule Pleroma.ApplicationRequirements do
|
|||||||
check_filter(Pleroma.Upload.Filter.Mogrify, "mogrify"),
|
check_filter(Pleroma.Upload.Filter.Mogrify, "mogrify"),
|
||||||
check_filter(Pleroma.Upload.Filter.Mogrifun, "mogrify"),
|
check_filter(Pleroma.Upload.Filter.Mogrifun, "mogrify"),
|
||||||
check_filter(Pleroma.Upload.Filter.AnalyzeMetadata, "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 =
|
preview_proxy_commands_status =
|
||||||
|
@ -33,6 +33,23 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do
|
|||||||
end
|
end
|
||||||
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}
|
def filter(_), do: {:ok, :noop}
|
||||||
|
|
||||||
defp get_blurhash(file) do
|
defp get_blurhash(file) do
|
||||||
@ -42,4 +59,25 @@ defmodule Pleroma.Upload.Filter.AnalyzeMetadata do
|
|||||||
_ -> nil
|
_ -> nil
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user