mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-07-09 07:10:34 +02:00
remove call from probe result normalizer
This commit is contained in:
parent
940702aa0b
commit
5c610d71f6
|
@ -262,6 +262,8 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||||
|
|
||||||
var mediaInfo = new ProbeResultNormalizer(_logger, FileSystem).GetMediaInfo(result, videoType, isAudio, primaryPath, protocol);
|
var mediaInfo = new ProbeResultNormalizer(_logger, FileSystem).GetMediaInfo(result, videoType, isAudio, primaryPath, protocol);
|
||||||
|
|
||||||
|
await DetectInterlaced(mediaInfo, inputPath, probeSizeArgument).ConfigureAwait(false);
|
||||||
|
|
||||||
if (extractKeyFrameInterval && mediaInfo.RunTimeTicks.HasValue)
|
if (extractKeyFrameInterval && mediaInfo.RunTimeTicks.HasValue)
|
||||||
{
|
{
|
||||||
if (ConfigurationManager.Configuration.EnableVideoFrameByFrameAnalysis && mediaInfo.Size.HasValue)
|
if (ConfigurationManager.Configuration.EnableVideoFrameByFrameAnalysis && mediaInfo.Size.HasValue)
|
||||||
|
@ -304,6 +306,81 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||||
throw new ApplicationException(string.Format("FFProbe failed for {0}", inputPath));
|
throw new ApplicationException(string.Format("FFProbe failed for {0}", inputPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task DetectInterlaced(MediaSourceInfo video, string inputPath, string probeSizeArgument)
|
||||||
|
{
|
||||||
|
var videoStream = video.MediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Video);
|
||||||
|
|
||||||
|
if (video.Protocol != MediaProtocol.File || videoStream == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Take a shortcut and limit this to containers that are likely to have interlaced content
|
||||||
|
if (!string.Equals(video.Container, "ts", StringComparison.OrdinalIgnoreCase) &&
|
||||||
|
!string.Equals(video.Container, "wtv", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
//return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var args = "{0} -i {1} -map 0:v:{2} -filter:v idet -frames:v 500 -an -f null /dev/null";
|
||||||
|
|
||||||
|
var process = new Process
|
||||||
|
{
|
||||||
|
StartInfo = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
CreateNoWindow = true,
|
||||||
|
UseShellExecute = false,
|
||||||
|
|
||||||
|
// Must consume both or ffmpeg may hang due to deadlocks. See comments below.
|
||||||
|
RedirectStandardOutput = true,
|
||||||
|
RedirectStandardError = true,
|
||||||
|
RedirectStandardInput = true,
|
||||||
|
FileName = FFMpegPath,
|
||||||
|
Arguments = string.Format(args, probeSizeArgument, inputPath, videoStream.Index.ToString(CultureInfo.InvariantCulture)).Trim(),
|
||||||
|
|
||||||
|
WindowStyle = ProcessWindowStyle.Hidden,
|
||||||
|
ErrorDialog = false
|
||||||
|
},
|
||||||
|
|
||||||
|
EnableRaisingEvents = true
|
||||||
|
};
|
||||||
|
|
||||||
|
_logger.Info("{0} {1}", process.StartInfo.FileName, process.StartInfo.Arguments);
|
||||||
|
|
||||||
|
using (var processWrapper = new ProcessWrapper(process, this, _logger))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
StartProcess(processWrapper);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.ErrorException("Error starting ffprobe", ex);
|
||||||
|
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
process.BeginOutputReadLine();
|
||||||
|
|
||||||
|
using (var reader = new StreamReader(process.StandardError.BaseStream))
|
||||||
|
{
|
||||||
|
var result = await reader.ReadToEndAsync().ConfigureAwait(false);
|
||||||
|
|
||||||
|
File.WriteAllText("D:\\\\1.txt", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
StopProcess(processWrapper, 100, true);
|
||||||
|
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private bool EnableKeyframeExtraction(MediaSourceInfo mediaSource, MediaStream videoStream)
|
private bool EnableKeyframeExtraction(MediaSourceInfo mediaSource, MediaStream videoStream)
|
||||||
{
|
{
|
||||||
if (videoStream.Type == MediaStreamType.Video && string.Equals(videoStream.Codec, "h264", StringComparison.OrdinalIgnoreCase) &&
|
if (videoStream.Type == MediaStreamType.Video && string.Equals(videoStream.Codec, "h264", StringComparison.OrdinalIgnoreCase) &&
|
||||||
|
|
|
@ -103,13 +103,6 @@ namespace MediaBrowser.MediaEncoding.Probing
|
||||||
}
|
}
|
||||||
|
|
||||||
ExtractTimestamp(info);
|
ExtractTimestamp(info);
|
||||||
|
|
||||||
var videoStream = info.MediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Video);
|
|
||||||
|
|
||||||
if (videoStream != null && videoType == VideoType.VideoFile)
|
|
||||||
{
|
|
||||||
DetectInterlaced(info, videoStream);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
|
@ -932,20 +925,5 @@ namespace MediaBrowser.MediaEncoding.Probing
|
||||||
|
|
||||||
return TransportStreamTimestamp.None;
|
return TransportStreamTimestamp.None;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DetectInterlaced(MediaSourceInfo video, MediaStream videoStream)
|
|
||||||
{
|
|
||||||
if (video.Protocol != MediaProtocol.File || videoStream == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Take a shortcut and limit this to containers that are likely to have interlaced content
|
|
||||||
if (!string.Equals(video.Container, "ts", StringComparison.OrdinalIgnoreCase) &&
|
|
||||||
!string.Equals(video.Container, "wtv", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue