An Elixir wrapper for the FFmpeg command line interface.
Documentation: https://hexdocs.pm/ffmpex/
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.
import FFmpex
use 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.456939
See silent_video and thumbnex for more usage examples.
FFmpeg must be installed.
Add ffmpex
to your list of dependencies in mix.exs
:
def deps do
[
{:ffmpex, "~> 0.10.0"}
]
end
You can specify some options in config.exs
:
config :ffmpex, ffmpeg_path: "/path/to/ffmpeg"
config :ffmpex, ffprobe_path: "/path/to/ffprobe"
See the Changelog for changes between versions.
FFmpex is not affiliated with nor endorsed by the FFmpeg project.
FFmpeg is a trademark of Fabrice Bellard, originator of the FFmpeg project.
Copyright (c) 2016 Andrew Shu
FFmpex source code is licensed under the MIT License.