Sfoglia il codice sorgente

Merge pull request #11689 from gnattu/workaround-ffmpeg-seek

Workaround ffmpeg keyframe seeking for external subtitles
Niels van Velzen 1 anno fa
parent
commit
02937873b1
1 ha cambiato i file con 7 aggiunte e 1 eliminazioni
  1. 7 1
      MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

+ 7 - 1
MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

@@ -2771,7 +2771,13 @@ namespace MediaBrowser.Controller.MediaEncoding
 
             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)
                 {