philomena/lib/philomena_media/analyzers/gif.ex

38 lines
871 B
Elixir
Raw Normal View History

defmodule PhilomenaMedia.Analyzers.Gif do
@moduledoc false
alias PhilomenaMedia.Analyzers.Analyzer
alias PhilomenaMedia.Analyzers.Result
@behaviour Analyzer
@spec analyze(Path.t()) :: Result.t()
2019-11-26 01:06:40 +01:00
def analyze(file) do
2020-05-16 19:48:54 +02:00
stats = stats(file)
2019-11-26 01:06:40 +01:00
%Result{
2019-11-26 01:06:40 +01:00
extension: "gif",
mime_type: "image/gif",
2020-05-16 19:48:54 +02:00
animated?: stats.animated?,
duration: stats.duration,
dimensions: stats.dimensions
2019-11-26 01:06:40 +01:00
}
end
2020-05-16 19:48:54 +02:00
defp stats(file) do
case System.cmd("mediastat", [file]) do
2019-11-26 01:06:40 +01:00
{output, 0} ->
2020-05-16 19:48:54 +02:00
[_size, frames, width, height, num, den] =
2019-11-26 01:06:40 +01:00
output
|> String.trim()
|> String.split(" ")
|> Enum.map(&String.to_integer/1)
2020-05-16 19:48:54 +02:00
%{animated?: frames > 1, dimensions: {width, height}, duration: num / den}
2019-11-26 01:06:40 +01:00
2020-05-16 19:48:54 +02:00
_ ->
%{animated?: false, dimensions: {0, 0}, duration: 0.0}
2019-11-26 01:06:40 +01:00
end
end
2020-01-11 05:20:19 +01:00
end