Current section
Files
Jump to
Current section
Files
lib/compressor/presets.ex
defmodule Compressor.Presets do
@moduledoc """
A Collection of presets
"""
import FFmpex
use FFmpex.Options
def streamable(input_file_path, output_file_path, opts \\ %{}) do
resolution = Map.get(opts, :resolution, "1920x1080")
video_rate = integer_opt(opts, :video_rate, 4_000_000)
audio_rate = integer_opt(opts, :audio_rate, 192_000)
audio_sample = integer_opt(opts, :audio_sample, 44_100)
max_rate = integer_opt(opts, :max_rate, 6_000_000)
new_command_common_options()
|> add_input_file(input_file_path)
|> add_output_file(output_file_path)
|> add_stream_specifier(stream_type: :video)
|> add_stream_option(option_s(resolution))
|> add_stream_option(option_profile("main"))
|> add_stream_option(option_b(video_rate))
|> add_stream_option(option_bufsize(2 * video_rate))
|> add_stream_specifier(stream_type: :audio)
|> add_stream_option(option_b(audio_rate))
|> add_stream_option(option_ar(audio_sample))
|> add_stream_option(option_bufsize(2 * audio_rate))
|> add_file_option(option_pix_fmt("yuv420p"))
|> add_file_option(option_maxrate(max_rate))
|> add_file_option(option_movflags("faststart"))
|> execute
end
defp new_command_common_options do
add_global_option(FFmpex.new_command, option_y())
end
def integer_opt(opts, key, default) do
value = Map.get(opts, key)
if is_integer(value), do: value, else: default
end
end