aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs
diff options
context:
space:
mode:
authorShadowghost <Ghost_of_Stone@web.de>2023-02-04 00:08:51 +0100
committerShadowghost <Ghost_of_Stone@web.de>2023-02-04 18:39:45 +0100
commitedf3909157a5ef10436b7ebf5717b36a6bac9e7c (patch)
tree94d8a44852fdde32e84ddd88d049b8c036484147 /MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs
parentddfdec7f46dd31d437dc6210658392fc7f894138 (diff)
Use FFmpeg concat for DVD and BD folder playback
Diffstat (limited to 'MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs')
-rw-r--r--MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs40
1 files changed, 40 insertions, 0 deletions
diff --git a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs
index df31ba83e..f4e6ea428 100644
--- a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs
+++ b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs
@@ -918,6 +918,46 @@ namespace MediaBrowser.MediaEncoding.Encoder
.Select(f => f.FullName);
}
+ public void GenerateConcatConfig(MediaSourceInfo source, string concatFilePath)
+ {
+ var files = new List<string>();
+ var videoType = source.VideoType;
+ if (videoType == VideoType.Dvd)
+ {
+ files = GetPrimaryPlaylistVobFiles(source.Path, null).ToList();
+ }
+ else if (videoType == VideoType.BluRay)
+ {
+ files = GetPrimaryPlaylistM2TsFiles(source.Path, null).ToList();
+ }
+
+ var lines = new List<string>();
+
+ foreach (var path in files)
+ {
+ var fileinfo = _fileSystem.GetFileInfo(path);
+ var mediaInfoResult = GetMediaInfo(
+ new MediaInfoRequest
+ {
+ MediaType = DlnaProfileType.Video,
+ MediaSource = new MediaSourceInfo
+ {
+ Path = path,
+ Protocol = MediaProtocol.File,
+ VideoType = videoType
+ }
+ },
+ CancellationToken.None).GetAwaiter().GetResult();
+
+ var duration = TimeSpan.FromTicks(mediaInfoResult.RunTimeTicks.Value).TotalSeconds;
+
+ lines.Add("file " + "'" + path + "'");
+ lines.Add("duration " + duration);
+ }
+
+ File.WriteAllLinesAsync(concatFilePath, lines, CancellationToken.None).GetAwaiter().GetResult();
+ }
+
public bool CanExtractSubtitles(string codec)
{
// TODO is there ever a case when a subtitle can't be extracted??