talklittle/ffmpex
{ "createdAt": "2016-07-27T23:14:14Z", "defaultBranch": "master", "description": "Elixir wrapper for FFmpeg command line interface", "fullName": "talklittle/ffmpex", "homepage": "https://hexdocs.pm/ffmpex/", "language": "Elixir", "name": "ffmpex", "pushedAt": "2024-06-30T22:15:29Z", "stargazersCount": 238, "topics": [], "updatedAt": "2025-10-10T23:14:36Z", "url": "https://github.com/talklittle/ffmpex"}FFmpex
Section titled “FFmpex”An Elixir wrapper for the FFmpeg command line interface.
Documentation: https://hexdocs.pm/ffmpex/
Usage notes
Section titled “Usage notes”The API is a builder, building up the list of options per-file, per-stream(-per-file), and globally.
Note that adding options is backwards from using the ffmpeg CLI; when using ffmpeg CLI, you specify the options before each file. But with FFmpex (this library), you add the file/stream first, then add the relevant options afterward.
Examples
Section titled “Examples”import FFmpexuse FFmpex.Options
command = FFmpex.new_command |> add_global_option(option_y()) |> add_input_file("/path/to/input.avi") |> add_output_file("/path/to/output.avi") |> add_stream_specifier(stream_type: :video) |> add_stream_option(option_b("64k")) |> add_file_option(option_maxrate("128k")) |> add_file_option(option_bufsize("64k"))
{:ok, output} = execute(command)It is possible to obtain ffmpeg’s output with:
command = FFmpex.new_command |> add_input_file("/path/to/input.mp4") |> to_stdout() |> add_file_option(option_f("avi"))
{:ok, output} = execute(command)
do_something(output)You can use the FFprobe module to query for file info:
FFprobe.duration("/path/to/input.avi")# => result in seconds, e.g., 228.456939See silent_video and thumbnex for more usage examples.
Prerequisites
Section titled “Prerequisites”FFmpeg must be installed.
Installation
Section titled “Installation”Add ffmpex to your list of dependencies in mix.exs:
def deps do [ {:ffmpex, "~> 0.11.0"} ]endConfiguration
Section titled “Configuration”You can specify some options in config.exs:
config :ffmpex, ffmpeg_path: "/path/to/ffmpeg"config :ffmpex, ffprobe_path: "/path/to/ffprobe"Release notes
Section titled “Release notes”See the [Changelog]!(./CHANGELOG.md) for changes between versions.
Disclaimer
Section titled “Disclaimer”FFmpex is not affiliated with nor endorsed by the FFmpeg project.
FFmpeg is a trademark of Fabrice Bellard, originator of the FFmpeg project.
Copyright and License
Section titled “Copyright and License”Copyright (c) 2016 Andrew Shu
FFmpex source code is licensed under the [MIT License]!(./LICENSE.md).