Entry source flavors are not always generated into all the flavors chosen to be generated. The reasons may be due to a low bitrate for the source flavor , a small frame size or other reason.
Kaltura’s ingestion’s logic has several optimization rules that were developed to avoid generating redundant flavors and attempt to preserve the source flavor’s quality as much as possible. Only flavors that comply with all 3 rules are generated.
"The asset bitrate should not be higher than the source bitrate".
The video quality depends on the video bitrate. As a rule of thumb, the higher bitrate renders higher visual quality. Since the source quality will ALWAYS be higher than the rendition (asset quality), the rendition bitrate should not exceed the source bitrate. Therefore, flavors that are set to generate a bitrate that is higher than the source bitrate will be filtered out of the generation process by this rule.
The source video bitrate (vid.br) is 600kbps. The flavors included in the conversion profile are 400, 600, 900, 1500, 2500, and 4000. The resulting entry will have the 400 and 600 flavors, the other 4 flavors will be filtered out.
The actual logic considers some additional parameters other than just the source video bitrate value vs. the flavor's video bitrate value. The following parameters are also considered:
- Content Aware encoding – see https://corp.kaltura.com/blog/implementing-content-aware-encoding-cae/
- Source video codec efficiency level vs flavor video codec efficiency level. The video codecs differ by their ability to squeeze different amount of data (quality) per the same bitrate. For example, HEVC/H265 is 50% more efficient than AVC/H264. Therefore, the source/flavor video bitrates are 'normalized' into the same 'scale'.
- If the source video bitrate (vid.br) is more than 20% lower than the flavor video bitrate (vid.br) , the flavor video bitrate will still be taken in. For example - for a source with vid.br 3800kbps, the flavor 4000 will be generated.
"At least one flavor will be generated with the source frame size."
Even if the source bitrate is lower than the flavor that matches the source frame size, the flavor will be generated with the source frame size. Downscaling the frame size greatly reduces the visual quality. Therefore, it is vital to create the flavor to preserve the source frame size.
Back to the example - The source video bitrate (vid.br) is 600kbps. The flavors included in the conversion profile are - 400/360p, 600/480p, 900/540p, 1500/720p, 2500/720p, 4000/1080p.
Let’s add additional data to this example. The source’s frame size is 1080p with 600kbps. For this case, the system will generate the flavor 400/360p and the 4000/1080p, but the last generated flavor will not use the bitrate as it is defined for 1080p flavor – aka 4000kbps, it will use 720kbps bitrate. This is an adaptation of the sources 600kbps bitrate. Please see the Rule #3.
When the flavor is to be generated with the source’s bitrate, the transcoding logic will attempt to preserve the source’s quality by increasing the generated flavor’s bitrate by 20%. This increase is capped by the flavor’s maximum bitrate.
Back to the example: – The source bitrate is 600Kbps. It should be generated by the 4000kbps/1080p flavor. The transcoding logic will do the matching by increasing the video bitrate by 20% - 600 to 720.
When analyzing the flavor parameters in the conversion profile, at least one flavor should be generated for every 'tag' that is bound to the flavor parameters. A single flavor parameter can match many tags.
There may be some other fixes/adjustments/exceptions to these rules.