[Libav-user] Overlay filter has incorrect frame rate
Brian C. Wiles
brian at streamcomm.com
Fri Jul 27 18:24:05 EEST 2018
On 07/27/2018 10:10 AM, Philippe Gorley wrote:
> On 2018-07-27 10:38 AM, Brian C. Wiles wrote:
>> I am trying to programmatically overlay one video onto another, and
>> the top (overlaid) video plays at half it's normal frame rate. If I use
>> the ffmpeg command, it works fine. >
>> I started with the doc/examples/transcoding.c example and changed the
>> filter initialization. Here's how I create the filters:
>> static int init_filters(char *source, char *source_type)
>> char filter_spec;
>> unsigned int i;
>> int ret;
>> filter_ctx = av_malloc_array(ifmt_ctx->nb_streams,
>> if (!filter_ctx)
>> return AVERROR(ENOMEM);
>> for (i = 0; i < ifmt_ctx->nb_streams; i++)
>> filter_ctx[i].buffersrc_ctx = NULL;
>> filter_ctx[i].buffersink_ctx = NULL;
>> filter_ctx[i].filter_graph = NULL;
>> if (!(ifmt_ctx->streams[i]->codecpar->codec_type ==
>> AVMEDIA_TYPE_AUDIO ||
>> ifmt_ctx->streams[i]->codecpar->codec_type ==
>> if (ifmt_ctx->streams[i]->codecpar->codec_type ==
>> "movie='anim.mp4', "
>> "scale=w='min(250\\, iw*3/2):h=-1' [wm]; "
>> ":enable='between(t,5,10)' [out]");
>> "anull"); /* passthrough (dummy) filter for audio */
>> ret = init_filter(&filter_ctx[i], stream_ctx[i].dec_ctx,
>> stream_ctx[i].enc_ctx, filter_spec);
>> if (ret)
>> return ret;
>> return 0;
>> I have tried using the fps and setpts filters, but that seems like a
>> hack to get it to honor the actual frame rate in the file. Let me know
>> if you need more info. I appreciate any help someone can give me.
> Overlay takes frames from each input in timestamp order. It likely
> overlays two frames when they have matching timestamps. So the fps and
> setpts filters are necessary if the 2 inputs have different
> framerates/starting points.
> The ffmpeg tool likely takes care of this for you.
That's what I wondered. So, if I specify the right fps and setpts
combinations, it should work fine? I thought the overlay filter was
supposed to add and drop frames as needed. Also, do I specify the frame
rate of the overlaid video or the bottom one? Thanks!
More information about the Libav-user