[FFmpeg-user] Use force_key_frames to obtain keyframes at exactly the same positions as in the input stream?
Henk D. Schoneveld
belcampo at zonnet.nl
Sat May 2 13:43:03 CEST 2015
> On 02 May 2015, at 11:38, Anatol <anatol2002 at gmail.com> wrote:
>
> I don't think that 'keep source keyframes' might impose any a/v sync issues
> that differ from any other encoding flows.
> AFIAK, 'force_key_frames' acts on the output/encoding, it does not aware of
> the decoding processing. For that matter - scene cuts are evaluated from
> post-decoding/raw frames.
Did you try without thinking of alignment what happens ?
Take a source file of several minutes and do your encoding for several bitrates with HLS and then test see if problems do really show up. Meaning maybe you try to solve a potential problem, looking at recuirements, that in reality don’t exist ?
>
> On Sat, May 2, 2015 at 12:31 PM, Haris Zukanovic <
> haris.zukanovic74 at gmail.com> wrote:
>
>> My "simple" idea was that instead of deducing from a "formula" like
>> -force_key_frames 'expr:gte(t,n_forced*5)'
>> force_key_frames somehow took this kind of info directly from the input
>> stream and passed onto all output streams
>>
>> This could be called something like
>>
>> -force_key_frames 'from_source'
>>
>>
>> Do you think it is possible to do?
>>
>>
>>
>>
>>
>> On 5/2/15 10:41 AM, Anatol wrote:
>>
>>> It does not matter the type of the incoming protocol.
>>> And slight un-alignment tolerated by the CDN providers and Apple HLS
>>> validation tools.
>>> Therefore the source live stream can be used in an adaptive-bitrate sets,
>>> IF the other streams match their key frames.
>>> By the way Wowza has this option ("keep Source key frames") in its
>>> Transcoder add-on.
>>> But Wowza also has other problems ...
>>>
>>>
>>> On Sat, May 2, 2015 at 11:06 AM, Henk D. Schoneveld <belcampo at zonnet.nl>
>>> wrote:
>>>
>>> On 02 May 2015, at 06:27, Anatol <anatol2002 at gmail.com> wrote:
>>>>>
>>>>> The idea is to gain the option to use the H264 source stream along with
>>>>> live transcoded streams in an adaptive bitrate delivery modes (HLS, HDS,
>>>>> etc), that require aligned keyframes on ALL participating streams.
>>>>>
>>>> Could it be ALL, except the livestream itself ?
>>>> Or is the livestream also available via HLS ?
>>>> If yes, then you’ll have to encode this one as well.
>>>> This can only be achieved if the source stream is encoded with the same
>>>> version of the encoder you’re using your self. I can imagine that
>>>> different
>>>> encoders could behave slightly different.
>>>> BTW what is your source ? Is it predictable like DVB-S from the same
>>>> broadcaster ?
>>>> From the top of my head BBC broadcast has an I-frame every 12 or 13
>>>> frames.
>>>> Another potential issue could be the delay between the video and audio
>>>> stream, which would force you to also encode the source stream.
>>>> Hope it helps.
>>>>
>>>>> On Sat, May 2, 2015 at 2:48 AM, Henk D. Schoneveld <belcampo at zonnet.nl>
>>>>> wrote:
>>>>>
>>>>> On 01 May 2015, at 20:43, Haris Zukanovic <haris.zukanovic74 at gmail.com
>>>>>>>
>>>>>> wrote:
>>>>>>
>>>>>>> Indeed force-ing keyframes at certain positions is meant to keep
>>>>>>>
>>>>>> multiple
>>>>
>>>>> output encodings keyframe aligned. The input stream is already h264 in
>>>>>>>
>>>>>> our
>>>>>>
>>>>>>> case.
>>>>>>> Moreover, if one could "copy" all iframe positions, and possibly also
>>>>>>>
>>>>>> all
>>>>
>>>>> other frametypes from the input stream there would not be any need for
>>>>>>> scene detection if that was already done in the input stream. I am not
>>>>>>>
>>>>>> sure
>>>>>>
>>>>>>> how much heavy lookahead calculations and perhaps other heavy
>>>>>>>
>>>>>> calculations
>>>>>>
>>>>>>> could also be skipped?
>>>>>>>
>>>>>> What are you trying to achieve ? A performance boost ? I don’t think
>>>>>>
>>>>> that
>>>>
>>>>> you’ll achieve improvement worthwhile, if anything at all. The working
>>>>>>
>>>>> of
>>>>
>>>>> the encoder should need to be totally rewritten to make something like
>>>>>>
>>>>> this
>>>>
>>>>> happen at all. Encoding of a frame depends on former and following
>>>>>>
>>>>> frames,
>>>>
>>>>> the result I P or B frame is the result. Your source is h264 already,
>>>>>>
>>>>> so I
>>>>
>>>>> think you’ll rescale and re-encode to achieve that. The calculation has
>>>>>>
>>>>> to
>>>>
>>>>> be done. Knowing in advance that it will be en I P or B frame won’t make
>>>>>> any difference in the amount of calculations in my opinion.
>>>>>>
>>>>>>> On May 1, 2015 7:42 PM, "Henk D. Schoneveld" <belcampo at zonnet.nl>
>>>>>>>
>>>>>> wrote:
>>>>
>>>>> On 01 May 2015, at 13:06, Haris Zukanovic <
>>>>>>>>>
>>>>>>>> haris.zukanovic74 at gmail.com
>>>>
>>>>> wrote:
>>>>>>>>
>>>>>>>>> Is the decision about exactly which frame to make an IDR frame made
>>>>>>>>>
>>>>>>>> in
>>>>
>>>>> x264 or ffmpeg?
>>>>>>>> In general I-frames are placed at scene-changes, this can happen
>>>>>>>>
>>>>>>> random.
>>>>
>>>>> Additionally you can can force an I-frame every arbitrary amount of
>>>>>>>>
>>>>>>> frames
>>>>>>
>>>>>>> by specifying the gop-size. The function of an I-frame is to hold max
>>>>>>>>
>>>>>>> frame
>>>>>>
>>>>>>> info P and B frames build on that complete I-frame. It doesn’t make
>>>>>>>>
>>>>>>> sense
>>>>>>
>>>>>>> from an encoding viewpoint to skip an I-frame at a scene-change, it’s
>>>>>>>>
>>>>>>> just
>>>>>>
>>>>>>> impossible.
>>>>>>>> Adding more than ‘a minimum amount’ of I-frames only makes sense for
>>>>>>>> seeking purposes, at the cost of less compression/higher then
>>>>>>>>
>>>>>>> necessary
>>>>
>>>>> bitrate.
>>>>>>>>
>>>>>>>>> Any pointer or advice on where to look for this in the code?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 4/29/15 8:54 PM, Anatol wrote:
>>>>>>>>>
>>>>>>>>>> No responses on that one?
>>>>>>>>>> It is very important issue.
>>>>>>>>>>
>>>>>>>>>> On Mon, Apr 27, 2015 at 11:47 PM, Haris Zukanovic <
>>>>>>>>>> haris.zukanovic74 at gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>> Hello,
>>>>>>>>>>> Can I use force_key_frames in some way to produce keyframes (IDR,
>>>>>>>>>>>
>>>>>>>>>> not
>>>>
>>>>> I-frames) at exactly the same PTS in output streams as they are
>>>>>>>>>>>
>>>>>>>>>> found
>>>>
>>>>> in
>>>>>>>>
>>>>>>>>> the live input stream? Both input and output are h264 and live
>>>>>>>>>>>
>>>>>>>>>> streaming.
>>>>>>>>
>>>>>>>>> Something analogous to using 2 pass encoding for VOD and in the
>>>>>>>>>>>
>>>>>>>>>> second
>>>>>>
>>>>>>> pass keyframes are inserted exactly where they are recorded in the
>>>>>>>>>>>
>>>>>>>>>> first
>>>>>>>>
>>>>>>>>> pass... Is that something like that even theoretically doable for
>>>>>>>>>>>
>>>>>>>>>> live
>>>>>>
>>>>>>> streaming?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> thanx
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> --
>>>>>>>>>>> Haris Zukanovic
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> ffmpeg-user mailing list
>>>>>>>>>>> ffmpeg-user at ffmpeg.org
>>>>>>>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>> ffmpeg-user mailing list
>>>>>>>>>> ffmpeg-user at ffmpeg.org
>>>>>>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> --
>>>>>>>>> Haris Zukanovic
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> ffmpeg-user mailing list
>>>>>>>>> ffmpeg-user at ffmpeg.org
>>>>>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> ffmpeg-user mailing list
>>>>>>>> ffmpeg-user at ffmpeg.org
>>>>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>> ffmpeg-user mailing list
>>>>>>> ffmpeg-user at ffmpeg.org
>>>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>>>>>>>
>>>>>> _______________________________________________
>>>>>> ffmpeg-user mailing list
>>>>>> ffmpeg-user at ffmpeg.org
>>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>>>>>>
>>>>>> _______________________________________________
>>>>> ffmpeg-user mailing list
>>>>> ffmpeg-user at ffmpeg.org
>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>>>>>
>>>> _______________________________________________
>>>> ffmpeg-user mailing list
>>>> ffmpeg-user at ffmpeg.org
>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>>>>
>>>> _______________________________________________
>>> ffmpeg-user mailing list
>>> ffmpeg-user at ffmpeg.org
>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>>>
>>
>> --
>> --
>> Haris Zukanovic
>>
>> _______________________________________________
>> ffmpeg-user mailing list
>> ffmpeg-user at ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>>
> _______________________________________________
> ffmpeg-user mailing list
> ffmpeg-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
More information about the ffmpeg-user
mailing list