mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Workaround ffmpeg keyframe seeking for external subtitles
We seek to the exact position of the keyframe for direct stream/remuxing, but FFmpeg seeks to the previous keyframe when the exact time is provided as input. To work around this, add a 0.5 second offset to the seeking time. Signed-off-by: gnattu <gnattuoc@me.com>
This commit is contained in:
parent
26714e2c62
commit
dec2032e13
@ -2771,7 +2771,13 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
|
|
||||||
if (time > 0)
|
if (time > 0)
|
||||||
{
|
{
|
||||||
seekParam += string.Format(CultureInfo.InvariantCulture, "-ss {0}", _mediaEncoder.GetTimeParameter(time));
|
// For direct streaming/remuxing, we seek at the exact position of the keyframe
|
||||||
|
// However, ffmpeg will seek to previous keyframe when the exact time is the input
|
||||||
|
// Workaround this by adding 0.5s offset to the seeking time to get the exact keyframe on most videos.
|
||||||
|
// This will help subtitle syncing.
|
||||||
|
var isHlsRemuxing = state.IsVideoRequest && state.TranscodingType is TranscodingJobType.Hls && IsCopyCodec(state.OutputVideoCodec);
|
||||||
|
var seekTick = isHlsRemuxing ? time + 5000000L : time;
|
||||||
|
seekParam += string.Format(CultureInfo.InvariantCulture, "-ss {0}", _mediaEncoder.GetTimeParameter(seekTick));
|
||||||
|
|
||||||
if (state.IsVideoRequest)
|
if (state.IsVideoRequest)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user