AvThis module perform demuxing then decoding for reading and coding then muxing for writing multimedia container formats.
val container_options : Avutil.Options.tmodule Format : sig ... endval open_input :
?interrupt:(unit -> bool) ->
?format:(Avutil.input, _) Avutil.format ->
?opts:Avutil.opts ->
string ->
Avutil.input Avutil.containerAv.open_input url open the input url (a file name or http URL). After returning, if opts was passed, unused options are left in the hash table. Raise Error if the opening failed.
val open_input_stream :
?format:(Avutil.input, _) Avutil.format ->
?opts:Avutil.opts ->
?seek:seek ->
read ->
Avutil.input Avutil.containerAv.open_input_stream read creates an input stream from the given read callback. Exceptions from the callback are caught and result in a native Avutil.Error `Unknown error.
val get_input_duration :
?format:Avutil.Time_format.t ->
Avutil.input Avutil.container ->
Stdlib.Int64.t optionAv.get_input_duration ~format:fmt input return the duration of an input in the fmt time format (in second by default).
val get_input_metadata :
Avutil.input Avutil.container ->
(string * string) listReturn the input tag (key, vlue) list.
val input_obj : Avutil.input Avutil.container -> Avutil.Options.objReturn a value of type obj, suited for use with Avutils.Options getters.
val get_audio_streams :
'a Avutil.container ->
(int * ('a, Avutil.audio, 'b) stream * Avutil.audio Avcodec.params) listReturn the audio stream list of the input. The result is a list of tuple containing the index of the stream in the container, the stream and the codec of the stream.
val get_video_streams :
'a Avutil.container ->
(int * ('a, Avutil.video, 'b) stream * Avutil.video Avcodec.params) listSame as Av.get_audio_streams for the video streams.
val get_subtitle_streams :
'a Avutil.container ->
(int * ('a, Avutil.subtitle, 'b) stream * Avutil.subtitle Avcodec.params)
listSame as Av.get_audio_streams for the subtitle streams.
val get_data_streams :
'a Avutil.container ->
(int * ('a, [ `Data ], 'b) stream * [ `Data ] Avcodec.params) listSame as Av.get_audio_streams for the data streams.
val find_best_audio_stream :
Avutil.input Avutil.container ->
int * (Avutil.input, Avutil.audio, 'a) stream * Avutil.audio Avcodec.paramsReturn the best audio stream of the input. The result is a tuple containing the index of the stream in the container, the stream and the codec of the stream. Raise Error if no stream could be found.
val find_best_video_stream :
Avutil.input Avutil.container ->
int * (Avutil.input, Avutil.video, 'a) stream * Avutil.video Avcodec.paramsSame as Av.find_best_audio_stream for the video streams.
val find_best_subtitle_stream :
Avutil.input Avutil.container ->
int
* (Avutil.input, Avutil.subtitle, 'a) stream
* Avutil.subtitle Avcodec.paramsSame as Av.find_best_audio_stream for the subtitle streams.
val get_input : (Avutil.input, _, _) stream -> Avutil.input Avutil.containerReturn the input container of the input stream.
val get_index : (_, _, _) stream -> intReturn the index of the stream.
val get_codec_params : (_, 'media, _) stream -> 'media Avcodec.paramsAv.get_codec stream return the codec of the stream. Raise Error if the codec allocation failed.
val get_avg_frame_rate : (_, Avutil.video, _) stream -> Avutil.rational optionget_avg_frame_rate stream returns the average frame rate, if set.
val set_avg_frame_rate :
(_, Avutil.video, _) stream ->
Avutil.rational option ->
unitset_avg_frame_rate stream rate sets the average frame rate, if set.
val get_time_base : (_, _, _) stream -> Avutil.rationalAv.get_time_base stream return the time base of the stream.
val set_time_base : (_, _, _) stream -> Avutil.rational -> unitAv.set_time_base stream time_base set the stream time base to time_base.
val get_frame_size : (Avutil.output, Avutil.audio, _) stream -> intAv.get_frame_size stream return the frame size for the given audio stream.
val get_pixel_aspect : (_, Avutil.video, _) stream -> Avutil.rational optionAv.get_pixel_aspect stream return the pixel aspect of the stream.
val get_duration :
?format:Avutil.Time_format.t ->
(Avutil.input, _, _) stream ->
Stdlib.Int64.tSame as Av.get_input_duration for the input streams.
val get_metadata : (Avutil.input, _, _) stream -> (string * string) listSame as Av.get_input_metadata for the input streams.
val set_decoder :
(Avutil.input, 'a, _) stream ->
('a, Avcodec.decode) Avcodec.codec ->
unitFor the use of a specific decoder for the given input stream.
type input_result = [ | `Audio_packet of int * Avutil.audio Avcodec.Packet.t| `Audio_frame of int * Avutil.audio Avutil.frame| `Video_packet of int * Avutil.video Avcodec.Packet.t| `Video_frame of int * Avutil.video Avutil.frame| `Subtitle_packet of int * Avutil.subtitle Avcodec.Packet.t| `Subtitle_frame of int * Avutil.subtitle Avutil.frame| `Data_packet of int * [ `Data ] Avcodec.Packet.t ]val read_input :
?audio_packet:(Avutil.input, Avutil.audio, [ `Packet ]) stream list ->
?audio_frame:(Avutil.input, Avutil.audio, [ `Frame ]) stream list ->
?video_packet:(Avutil.input, Avutil.video, [ `Packet ]) stream list ->
?video_frame:(Avutil.input, Avutil.video, [ `Frame ]) stream list ->
?subtitle_packet:(Avutil.input, Avutil.subtitle, [ `Packet ]) stream list ->
?subtitle_frame:(Avutil.input, Avutil.subtitle, [ `Frame ]) stream list ->
?data_packet:(Avutil.input, [ `Data ], [ `Packet ]) stream list ->
Avutil.input Avutil.container ->
input_resultReads the selected streams if any or all streams otherwise. Return the next Audio Video Subtitle of Data index and packet or frame of the input or Error `Eof if the end of the input is reached. Raise Error if the reading failed.
Only packet and frames from the specified streams are returned.
val seek :
?flags:seek_flag list ->
?stream:(Avutil.input, _, _) stream ->
?min_ts:Stdlib.Int64.t ->
?max_ts:Stdlib.Int64.t ->
fmt:Avutil.Time_format.t ->
ts:Stdlib.Int64.t ->
Avutil.input Avutil.container ->
unitAv.seek ?flags ?stream ?min_ts ?max_ts ~fmt ~ts container seek in the container container to position ts. You can pass an optional stream to use for seeking, max_ts and min_ts to force seeking to happen within a given timestamp window and flags to speficy certain property of the seeking operation. Raise Error if the seeking failed.
val open_output :
?interrupt:(unit -> bool) ->
?format:(Avutil.output, _) Avutil.format ->
?interleaved:bool ->
?opts:Avutil.opts ->
string ->
Avutil.output Avutil.containerAv.open_output ?interrupt ?format ?interleaved ?opts filename open the output file named filename. interrupt is used to interrupt blocking functions, format may contain an optional format, interleaved indicates if FFmpeg's interleaved API should be used, opts may contain any option settable on the stream's internal AVFormat. After returning, if opts was passed, unused options are left in the hash table. Raise Error if the opening failed.
val open_output_stream :
?opts:Avutil.opts ->
?interleaved:bool ->
?seek:seek ->
write ->
(Avutil.output, _) Avutil.format ->
Avutil.output Avutil.containerAv.open_stream callbacks open the output container with the given callbacks. opts may contain any option settable on Ffmpeg avformat. After returning, if opts was passed, unused options are left in the hash table. Raise Error if the opening failed. Exceptions from the callback are caught and result in a native Avutil.Error `Unknown error.
val output_started : Avutil.output Avutil.container -> boolReturns true if the output has already started, in which case no new * stream or metadata can be added.
val set_output_metadata :
Avutil.output Avutil.container ->
(string * string) list ->
unitAv.set_output_metadata dst tags set the metadata of the dst output with the tags tag list. This must be set before starting writing streams. Raise Error if a writing already taken place or if the setting failed.
val set_metadata : (_, _, _) stream -> (string * string) list -> unitSame as Av.set_output_metadata for the output streams.
val get_output : (Avutil.output, _, _) stream -> Avutil.output Avutil.containerReturn the output container of the output stream.
val new_stream_copy :
params:'mode Avcodec.params ->
Avutil.output Avutil.container ->
(Avutil.output, 'mode, [ `Packet ]) streamval new_uninitialized_stream_copy :
Avutil.output Avutil.container ->
uninitialized_stream_copyval initialize_stream_copy :
params:'mode Avcodec.params ->
uninitialized_stream_copy ->
(Avutil.output, 'mode, [ `Packet ]) streamval new_audio_stream :
?opts:Avutil.opts ->
channel_layout:Avutil.Channel_layout.t ->
sample_rate:int ->
sample_format:Avutil.Sample_format.t ->
time_base:Avutil.rational ->
codec:[ `Encoder ] Avcodec.Audio.t ->
Avutil.output Avutil.container ->
(Avutil.output, Avutil.audio, [ `Frame ]) streamAdd a new audio stream to the given container. Stream only supports frames and encodes its input.
opts may contain any option settable on the stream's internal AVCodec. After returning, if opts was passed, unused options are left in the hash table.
Frames passed to this stream for encoding must have a PTS set according to the given time_base. 1/sample_rate is usually a good value for the time_base.
Please note that some codec require a fixed frame size, denoted by the absence of the `Variable_frame_size codec capabilities. In this case, the user is expected to pass frames containing exactly Av.get_frame_size stream.
Avfilter can be used to slice frames into frames of fixed size. See Avfilter.Utils.convert_audio for an example.
Raise Error if the opening failed.
val new_video_stream :
?opts:Avutil.opts ->
?frame_rate:Avutil.rational ->
?hardware_context:Avcodec.Video.hardware_context ->
pixel_format:Avutil.Pixel_format.t ->
width:int ->
height:int ->
time_base:Avutil.rational ->
codec:[ `Encoder ] Avcodec.Video.t ->
Avutil.output Avutil.container ->
(Avutil.output, Avutil.video, [ `Frame ]) streamAdd a new video stream to the given container. Stream only supports frames and encodes its input.
opts may contain any option settable on the stream's internal AVCodec. After returning, if opts was passed, unused options are left in the hash table.
Frames passed to this stream for encoding must have a PTS set according to the given time_base. 1/frame_rate is usually a good value for the time_base.
hardware_context can be used to pass optional hardware device and frame context to enable hardward encoding on this stream.
Raise Error if the opening failed.
val new_subtitle_stream :
?opts:Avutil.opts ->
time_base:Avutil.rational ->
codec:[ `Encoder ] Avcodec.Subtitle.t ->
Avutil.output Avutil.container ->
(Avutil.output, Avutil.subtitle, [ `Frame ]) streamAdd a new subtitle stream to the given container. Stream only supports frames and encodes its input.
opts may contain any option settable on the stream's internal AVCodec. After returning, if opts was passed, unused options are left in the hash table.
Raise Error if the opening failed.
val new_data_stream :
time_base:Avutil.rational ->
codec:Avcodec.Unknown.id ->
Avutil.output Avutil.container ->
(Avutil.output, [ `Data ], [ `Packet ]) streamAdd a new data stream to the given container.
opts may contain any option settable on the stream's internal AVCodec. After returning, if opts was passed, unused options are left in the hash table.
Raise Error if the opening failed.
val codec_attr : (_, _, _) stream -> string optionReturn a codec attribute suitable for HLS playlists when available.
val bitrate : (_, _, _) stream -> int optionReturn the stream's bitrate when available, suitable for HLS playlists.
val write_packet :
(Avutil.output, 'media, [ `Packet ]) stream ->
Avutil.rational ->
'media Avcodec.Packet.t ->
unitAv.write_packet os time_base pkt write the pkt packet to the os output stream. time_base is the packet's PTS/DTS/duration time base.
Raise Error if the writing failed.
val write_frame :
?on_keyframe:(unit -> unit) ->
(Avutil.output, 'media, [ `Frame ]) stream ->
'media Avutil.frame ->
unitAv.write_frame ?on_keyframe os frm write the frm frame to the os output stream.
Frame PTS should be set and counted in units of time_base, as passed when creating the stream
If on_keyframe is provided, it is called on keyframe, _before the keyframe is submitted to the muxer.
Raise Error if the writing failed.
val flush : Avutil.output Avutil.container -> unitFlush the underlying muxer.
val close : _ Avutil.container -> unitClose an input or output container.