defmodule PhilomenaMedia.Analyzers.Png do @moduledoc false alias PhilomenaMedia.Analyzers.Analyzer alias PhilomenaMedia.Analyzers.Result @behaviour Analyzer @spec analyze(Path.t()) :: Result.t() def analyze(file) do stats = stats(file) %Result{ extension: "png", mime_type: "image/png", animated?: stats.animated?, duration: stats.duration, dimensions: stats.dimensions } end defp stats(file) do case System.cmd("mediastat", [file]) do {output, 0} -> [_size, frames, width, height, num, den] = output |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1) %{animated?: frames > 1, dimensions: {width, height}, duration: num / den} _ -> %{animated?: false, dimensions: {0, 0}, duration: 0.0} end end end