1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
open Ffmpeg_format
let () = Frame_settings.lazy_config_eval := true
let () =
let vorbis_enc =
{
format = Some "ogg";
interleaved = `Default;
output = `Stream;
streams =
[
( Frame.Fields.audio,
`Encode
{
mode = `Internal;
codec = Some "libvorbis";
options =
`Audio
{
pcm_kind = Content.Audio.kind;
channels = 2;
samplerate = lazy 44100;
sample_format = None;
};
opts = Hashtbl.create 0;
} );
];
opts = Hashtbl.create 0;
}
in
let mk_encoder = Encoder.get_factory (Encoder.Ffmpeg vorbis_enc) in
let enc = mk_encoder ~pos:None "ffmpeg" Frame.Metadata.Export.empty in
assert (Encoder.(enc.hls.bitrate ()) = None)
let () =
let mixed_enc =
{
format = Some "ogg";
interleaved = `Default;
output = `Stream;
streams =
[
( Frame.Fields.audio,
`Encode
{
mode = `Internal;
codec = Some "libvorbis";
options =
`Audio
{
pcm_kind = Content.Audio.kind;
channels = 2;
samplerate = lazy 44100;
sample_format = None;
};
opts = Hashtbl.create 0;
} );
( Frame.Fields.audio,
`Encode
{
mode = `Internal;
codec = Some "libmp3lame";
options =
`Audio
{
pcm_kind = Content.Audio.kind;
channels = 2;
samplerate = lazy 44100;
sample_format = None;
};
opts =
(let m = Hashtbl.create 0 in
Hashtbl.replace m "b" (`String "128k");
m);
} );
];
opts = Hashtbl.create 0;
}
in
let mk_encoder = Encoder.get_factory (Encoder.Ffmpeg mixed_enc) in
let enc = mk_encoder ~pos:None "ffmpeg" Frame.Metadata.Export.empty in
assert (Encoder.(enc.hls.bitrate ()) = Some 128000)
|