lib/exstream.ex

defmodule Exstream do

  def get_closest_packet_to_byte(packets, byte) do
    Enum.min_by(packets, fn x -> abs(String.to_integer(x["pos"]) - byte) end)
  end

  def get_packets({ result, 0 }) do
    result
    |> Jason.decode!()
    |> Map.get("packets")
  end

  def probe_for_packets(file) do
    System.cmd("ffprobe", [
      "-i", file,
      "-show_entries", "packet=pos,pts_time,flags",
      "-select_streams", "v",
      "-of", "json",
      "-v", "0"
    ])
    |> get_packets()
  end
end