Add option to extract keyframe only during trickplay image generation
This would be significantly faster than decoding every frame, but it does have compatibility issues. Not all decoders support this mode, notably the VP9 decoder, CUVID decoders, and QSV decoders. Some videos with very long key-frame intervals may also perform poorly with this mode, as the image timing could become too inaccurate to reflect the actual frame. Signed-off-by: gnattu <gnattuoc@me.com>
This commit is contained in:
parent
c050abf3e8
commit
68bfabbaba
|
@ -168,6 +168,7 @@ public class TrickplayManager : ITrickplayManager
|
|||
options.ProcessThreads,
|
||||
options.Qscale,
|
||||
options.ProcessPriority,
|
||||
options.EnableKeyFrameOnlyExtraction,
|
||||
_encodingHelper,
|
||||
cancellationToken).ConfigureAwait(false);
|
||||
|
||||
|
|
|
@ -153,6 +153,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||
/// <param name="threads">The input/output thread count for ffmpeg.</param>
|
||||
/// <param name="qualityScale">The qscale value for ffmpeg.</param>
|
||||
/// <param name="priority">The process priority for the ffmpeg process.</param>
|
||||
/// <param name="enableKeyFrameOnlyExtraction">Whether to only extract key frames.</param>
|
||||
/// <param name="encodingHelper">EncodingHelper instance.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <returns>Directory where images where extracted. A given image made before another will always be named with a lower number.</returns>
|
||||
|
@ -168,6 +169,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||
int? threads,
|
||||
int? qualityScale,
|
||||
ProcessPriorityClass? priority,
|
||||
bool enableKeyFrameOnlyExtraction,
|
||||
EncodingHelper encodingHelper,
|
||||
CancellationToken cancellationToken);
|
||||
|
||||
|
|
|
@ -807,6 +807,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
|||
int? threads,
|
||||
int? qualityScale,
|
||||
ProcessPriorityClass? priority,
|
||||
bool enableKeyFrameOnlyExtraction,
|
||||
EncodingHelper encodingHelper,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
|
@ -862,6 +863,11 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
|||
inputArg = "-threads " + threads + " " + inputArg; // HW accel args set a different input thread count, only set if disabled
|
||||
}
|
||||
|
||||
if (enableKeyFrameOnlyExtraction)
|
||||
{
|
||||
inputArg = "-skip_frame nokey " + inputArg;
|
||||
}
|
||||
|
||||
var filterParam = encodingHelper.GetVideoProcessingFilterParam(jobState, options, vidEncoder).Trim();
|
||||
if (string.IsNullOrWhiteSpace(filterParam))
|
||||
{
|
||||
|
|
|
@ -18,6 +18,12 @@ public class TrickplayOptions
|
|||
/// </summary>
|
||||
public bool EnableHwEncoding { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether to only extract key frames.
|
||||
/// Significantly faster, but is not compatible with all decoders and/or video files.
|
||||
/// </summary>
|
||||
public bool EnableKeyFrameOnlyExtraction { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the behavior used by trickplay provider on library scan/update.
|
||||
/// </summary>
|
||||
|
|
Loading…
Reference in New Issue
Block a user