Sfoglia il codice sorgente

Support metadata for video files too

cycles-ensure-plug
Mark Felder 3 anni fa
parent
commit
5c27578bce
2 ha cambiato i file con 40 aggiunte e 1 eliminazioni
  1. +2
    -1
      lib/pleroma/application_requirements.ex
  2. +38
    -0
      lib/pleroma/upload/filter/analyze_metadata.ex

+ 2
- 1
lib/pleroma/application_requirements.ex Vedi File

@@ -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 =


+ 38
- 0
lib/pleroma/upload/filter/analyze_metadata.ex Vedi File

@@ -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

Loading…
Annulla
Salva