@ -31,6 +31,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
@@ -31,6 +31,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- AviSynth itself needs to be installed
- Add `Troubleshoot` button to classic schedule list
- This generates JSON representing the entire schedule which can be shared when requested for troubleshooting
- Add **Settings** > **FFmpeg** > **Probe For Interlaced Frames**
- When enabled, this will probe *local content* for interlaced frames on demand (immediately before playback)
- This will be used as a more accurate check for interlaced content
- The result will be cached (only probed once and stored) in the database along with all other media item statistics (e.g. duration)
- This feature will currently ignore content that is not streamed from disk
@ -33,6 +33,10 @@ public class GetFFmpegSettingsHandler(IConfigElementRepository configElementRepo
@@ -33,6 +33,10 @@ public class GetFFmpegSettingsHandler(IConfigElementRepository configElementRepo
@ -62,6 +66,7 @@ public class GetFFmpegSettingsHandler(IConfigElementRepository configElementRepo
@@ -62,6 +66,7 @@ public class GetFFmpegSettingsHandler(IConfigElementRepository configElementRepo
@ -408,7 +408,7 @@ public class GetPlayoutItemProcessByChannelNumberHandler : FFmpegProcessHandler<
@@ -408,7 +408,7 @@ public class GetPlayoutItemProcessByChannelNumberHandler : FFmpegProcessHandler<
@ -4,7 +4,9 @@ using CliWrap;
@@ -4,7 +4,9 @@ using CliWrap;
usingCliWrap.Buffered;
usingErsatzTV.Core.Domain;
usingErsatzTV.Core.Domain.Filler;
usingErsatzTV.Core.Extensions;
usingErsatzTV.Core.Interfaces.FFmpeg;
usingErsatzTV.Core.Interfaces.Metadata;
usingErsatzTV.Core.Interfaces.Repositories;
usingErsatzTV.Core.Interfaces.Streaming;
usingErsatzTV.FFmpeg;
@ -26,6 +28,8 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@@ -26,6 +28,8 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@ -43,6 +47,8 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@@ -43,6 +47,8 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
IGraphicsElementLoadergraphicsElementLoader,
IMemoryCachememoryCache,
IMpegTsScriptServicempegTsScriptService,
ILocalStatisticsProviderlocalStatisticsProvider,
IMediaItemRepositorymediaItemRepository,
ILogger<FFmpegLibraryProcessService>logger)
{
_ffmpegProcessService=ffmpegProcessService;
@ -54,6 +60,8 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@@ -54,6 +60,8 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
_graphicsElementLoader=graphicsElementLoader;
_memoryCache=memoryCache;
_mpegTsScriptService=mpegTsScriptService;
_localStatisticsProvider=localStatisticsProvider;
_mediaItemRepository=mediaItemRepository;
_logger=logger;
}
@ -62,7 +70,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@@ -62,7 +70,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
stringffprobePath,
boolsaveReports,
Channelchannel,
MediaVersionvideoVersion,
MediaItemVideoVersionvideoVersion,
MediaItemAudioVersionaudioVersion,
stringvideoPath,
stringaudioPath,
@ -92,7 +100,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@@ -92,7 +100,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@ -100,7 +108,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@@ -100,7 +108,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@ -214,6 +222,8 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@@ -214,6 +222,8 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@ -224,12 +234,12 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@@ -224,12 +234,12 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@ -455,8 +465,8 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@@ -455,8 +465,8 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
// if any dimension is smaller than the crop, scale beyond the crop (beyond the target resolution)
if(isTooSmallToCrop)
@ -546,7 +556,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@@ -546,7 +556,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@ -584,6 +594,47 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@@ -584,6 +594,47 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
"Content has interlaced ratio of {Ratio} - will consider as {ScanKind}",
headVersion.InterlacedRatio,
result);
returnresult;
}
publicasyncTask<Command>ForError(
stringffmpegPath,
Channelchannel,
@ -847,7 +898,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@@ -847,7 +898,7 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@ -112,6 +112,18 @@ public class MediaItemRepository : IMediaItemRepository
@@ -112,6 +112,18 @@ public class MediaItemRepository : IMediaItemRepository
@ -137,6 +137,7 @@ public class MetadataRepository(IDbContextFactory<TvContext> dbContextFactory) :
@@ -137,6 +137,7 @@ public class MetadataRepository(IDbContextFactory<TvContext> dbContextFactory) :
@ -131,6 +131,52 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider
@@ -131,6 +131,52 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider
@ -200,8 +246,7 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider
@@ -200,8 +246,7 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider
@ -234,6 +279,55 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider
@@ -234,6 +279,55 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider
returnBaseError.New("Unable to deserialize ffprobe output");
@ -366,6 +460,7 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider
@@ -366,6 +460,7 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider
@ -600,4 +695,27 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider
@@ -600,4 +695,27 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider