Ivf (ivf v0.3.0)

Collection of convenience functions to work with IVF files as described here: https://wiki.multimedia.cx/index.php/Duck_IVF.

reading-files

Reading Files

{props, stream} = Ivf.stream!("test/videos/test_vp8.ivf")
%Ivf.Props{
  width: 320,
  height: 180,
  time_base: {1, 5},
  frame_count: 280,
  codec: "VP80"
} = props
200 = stream |> Enum.to_list |> length


writing-files

Writing Files

file = File.open!("test/videos/out.ivf", [:binary, :write])
writer = Ivf.write!(file, Ivf.Props.new([]))
# File will not be written to until frames are appended
{:ok, %File.Stat{size: 0}} = File.stat("test/videos/out.ivf")
# writer accepts any binary or list
writer = Ivf.Writer.append(writer, "invalid_test_frame")
# time stamps can also be provided
writer = Ivf.Writer.append(writer, {1, "invalid_test_frame"})
writer = Ivf.Writer.append(writer, {3, "invalid_test_frame"})
# close the writer, the frame count in the header will be adjusted
:ok = Ivf.Writer.close(writer)

Link to this section Summary

Functions

Open an IVF file and lazy stream all frames.

Open an IVF file and lazy stream all frames.

Create a new IVF file.

Link to this section Functions

Link to this function

stream(file_path)

@spec stream(binary()) :: {:ok, Ivf.Props.t(), Stream.t()} | {:error, atom()}

Open an IVF file and lazy stream all frames.

Link to this function

stream!(file_path)

@spec stream!(binary()) :: {Ivf.Props.t(), Stream.t()}

Open an IVF file and lazy stream all frames.

Link to this function

write(file_path, props)

Create a new IVF file.

Link to this function

write!(file_path, props)

@spec write!(binary(), Ivf.Props.t()) :: Ivf.Writer.t()