Fix ffmpeg framegrabs with Exile

This commit is contained in:
Mark Felder 2024-03-07 17:38:21 -05:00
parent 8298b326a7
commit 54ff7234b9
2 changed files with 21 additions and 16 deletions

View File

@ -0,0 +1 @@
Video framegrabs were not working correctly after the change to use Exile to execute ffmpeg

View File

@ -40,12 +40,14 @@ def image_resize(url, options) do
end end
# Note: video thumbnail is intentionally not resized (always has original dimensions) # Note: video thumbnail is intentionally not resized (always has original dimensions)
@spec video_framegrab(String.t()) :: {:ok, binary()} | {:error, any()}
def video_framegrab(url) do def video_framegrab(url) do
with executable when is_binary(executable) <- System.find_executable("ffmpeg"), with executable when is_binary(executable) <- System.find_executable("ffmpeg"),
{:ok, env} <- HTTP.get(url, [], pool: :media), {:ok, env} <- HTTP.get(url, [], pool: :media),
{:ok, pid} <- StringIO.open(env.body) do {:ok, pid} <- StringIO.open(env.body) do
body_stream = IO.binstream(pid, 1) body_stream = IO.binstream(pid, 1)
result =
Exile.stream!( Exile.stream!(
[ [
executable, executable,
@ -62,6 +64,8 @@ def video_framegrab(url) do
stderr: :disable stderr: :disable
) )
|> Enum.into(<<>>) |> Enum.into(<<>>)
{:ok, result}
else else
nil -> {:error, {:ffmpeg, :command_not_found}} nil -> {:error, {:ffmpeg, :command_not_found}}
{:error, _} = error -> error {:error, _} = error -> error