[Libav-user] movflags/faststart flag for avcodec_open2

Michael Armes michael.armes at gmail.com
Fri May 4 01:44:03 EEST 2018


My apologizes. Here is the full list of options from the serialize. I do
appreciate any help. Heads up that I will be away starting tomorrow until
Monday. If I don't respond timely, it doesn't mean I don't care. :-)


b:1216000;ab:1216000;bt:4000000;flags:0x80400000;me_method:-1;time_base:1/20;g:12;ar:0;ac:0;cutoff:0;frame_size:0;frame_number:0;delay:0;qcomp:-1.000000;qblur:-1.000000;qmin:-1;qmax:-1;qdiff:-1;bf:0;b_qfactor:-1.000000;rc_strategy:0;b_strategy:-1;ps:0;mv_bits:0;header_bits:0;i_tex_bits:0;p_tex_bits:0;i_count:0;p_count:0;skip_count:0;misc_bits:0;frame_bits:0;codec_tag:0;bug:0x00000001;strict:0;b_qoffset:1.250000;err_detect:0x00000000;has_b_frames:2;block_align:0;mpeg_quant:0;qsquish:0.000000;rc_qmod_amp:0.000000;rc_qmod_freq:0;rc_override_count:0;rc_eq:;maxrate:0;minrate:0;bufsize:0;rc_buf_aggressivity:1.000000;i_qfactor:-1.000000;i_qoffset:0.000000;rc_init_cplx:0.000000;dct:0;lumi_mask:0.000000;tcplx_mask:0.000000;scplx_mask:0.000000;p_mask:0.000000;dark_mask:0.000000;idct:0;slice_count:0;ec:0x00000003;bits_per_coded_sample:0;pred:0;aspect:0/1;sar:0/1;debug:0x00000000;vismv:0x00000000;cmp:-1;subcmp:0;mbcmp:0;ildctcmp:8;dia_size:0;last_pred:0;preme:0;precmp:0;pre_dia_size:0;subq:-1;dtg_active_format:0;me_range:-1;ibias:999999;pbias:999999;global_quality:0;coder:-1;context:0;slice_flags:0;xvmc_acceleration:0;mbd:0;stream_codec_tag:0;sc_threshold:-1;lmin:0;lmax:0;nr:-1;rc_init_occupancy:-1;flags2:0x00000000;error:0;threads:0;me_threshold:0;mb_threshold:0;dc:0;nssew:8;skip_top:0;skip_bottom:0;profile:-99;level:-99;lowres:0;skip_threshold:0;skip_factor:0;skip_exp:0;skipcmp:13;border_mask:0.000000;mblmin:236;mblmax:3658;mepc:256;skip_loop_filter:0;skip_idct:0;skip_frame:0;bidir_refine:1;brd_scale:0;keyint_min:-1;refs:-1;chromaoffset:0;trellis:-1;sc_factor:6;mv0_threshold:256;b_sensitivity:40;compression_level:-1;min_prediction_order:0;max_prediction_order:0;timecode_frame_start:-1;bits_per_raw_sample:0;channel_layout:0;request_channel_layout:0;rc_max_vbv_use:0.000000;rc_min_vbv_use:3.000000;ticks_per_frame:2;color_primaries:2;color_trc:2;colorspace:2;color_range:0;chroma_sample_location:0;log_level_offset:0;slices:0;thread_type:0x00000000;audio_service_type:0;request_sample_fmt:u8;pkt_timebase:0/1;sub_charenc:;sub_charenc_mode:0x00000000;sub_text_format:0;refcounted_frames:false;side_data_only_packets:true;skip_alpha:false;field_order:0;dump_separator:;codec_whitelist:;pixel_format:yuv420p;video_size:1204x338

On Thu, May 3, 2018 at 3:31 PM, Michael Armes <michael.armes at gmail.com>
wrote:

> Jordan,
>
> Thanks for the reply. It's great to know that I'm on track with the option
> name/value and my use of av_dict_set. Also good to know that the -/+ logic
> applies here.
>
> Can you confirm that:
> AVDictionary* myOptions;
> av_dict_set( &myOptions, "movflags", "+faststart", 0 );
> avcodec_open2(context, codec, &myOptions);
>
> should set the option on the muxer?
>
> Interestingly, if I use av_opt_serialize on the AvCodecContext after
> opening
> av_opt_serialize(context, 0, 0, &buffer, ':', ';');
>
> after opening the codec, I don't see the flag set.
>
> b:1216000;ab:1216000;bt:4000000;flags:0x80400000;me_
> method:-1;time_base:1/20;g:12;ar:0;ac:0;cutoff:0;frame_size:
> 0;frame_number:0;delay:0;qcomp:-1.00000
>
> I'm looking for the 7th bit (128) to be set on flags, yes?
>
>
> On Wed, May 2, 2018 at 5:45 PM, Jodon Karlik <jodonk at gmail.com> wrote:
>
>>
>> Hello,
>>>
>>> I am trying to ensure that I have the moov metadata for H.264 encoded
>>> video at the beginning of the file. I have seen examples online that
>>> indicate I need to give ffmpeg the "-movflags +faststart"  option, but I am
>>> coding against libav*. How do these options translate to the options given
>>> to the AVDictionary parameter of avcodec_open2? Or rather, am I barking up
>>> the wrong tree entirely?
>>>
>>> I assumed that it was trivially a dictionary entry with key "movflags"
>>> and value "faststart" after I inspected movenc.c in libavformat, but this
>>> is not currently working for me and I need to determine what I have wrong
>>> (the "how" or the "what"). I appreciate any help.
>>>
>>> --michael
>>>
>>> _______________________________________________
>>> Libav-user mailing list
>>> Libav-user at ffmpeg.org
>>> http://ffmpeg.org/mailman/listinfo/libav-user
>>>
>>>
>> You can search in dict.h and use: int av_dict_set(AVDictionary **pm,
>> const char *key, const char *value, int flags).
>>
>> Example:
>>
>> AVDictionary* myOptions;
>> av_dict_set( &myOptions, "movflags", "+faststart", 0 );
>>
>> av_dict_set will allocate the dictionary for you.
>>
>> To understand how this all works:  there is a bunch of code in ffmpeg
>> that deals with AVOptions (and these dictionaries) and converts human
>> readable data into the right flags.  In the ffmpeg source code, in
>> libavformat/movenc.c you can find:
>>
>> static const AVOption options[] = {
>>     { "movflags", "MOV muxer flags", offsetof(MOVMuxContext, flags),
>> AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX,
>> AV_OPT_FLAG_ENCODING_PARAM, "movflags" },
>> ...
>>     { "faststart", "Run a second pass to put the index (moov atom) at the
>> beginning of the file", 0, AV_OPT_TYPE_CONST, {.i64 =
>> FF_MOV_FLAG_FASTSTART}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM,
>> "movflags" },
>>
>> The first one defines the human-readable "movflags" to access the "flags"
>> member variable, and the one further down that ends with "movflags" is a
>> way of saying the "faststart" string refers to a flag that applies to the
>> variable movflags.  In opt.c you'll find special code for AV_OPT_TYPE_FLAGS
>> that deals with prefixing with "+" or "-" which will add or remove flags
>> from the variable specified.  Once you know all of this, the code (and
>> settings) become quite readable which is nice.
>>
>> Everything that is an AVClass can be accessed using these types of
>> options through the AVOptions interfaces (libavutil/opt.h), or passing in
>> an AVDictionary with the options when creating it, as you've found.  I've
>> found it helpful when starting out to use the AVOptions interface rather
>> than AVDictionary.  The reason being, there's more immediately feedback
>> through the return code of av_opt_set, and you can grab the configuration
>> of an object through av_opt_serialize.  This will help you catch errors
>> like setting movflags on the stream rather than the muxer.
>>
>> Cheers.
>>
>> _______________________________________________
>> Libav-user mailing list
>> Libav-user at ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/libav-user
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20180503/a3586f38/attachment.html>


More information about the Libav-user mailing list