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);
|
||||
|
||||
await DetectInterlaced(mediaInfo, inputPath, probeSizeArgument).ConfigureAwait(false);
|
||||
|
||||
if (extractKeyFrameInterval && mediaInfo.RunTimeTicks.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));
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
if (videoStream.Type == MediaStreamType.Video && string.Equals(videoStream.Codec, "h264", StringComparison.OrdinalIgnoreCase) &&
|
||||
|
|
|
@ -103,13 +103,6 @@ namespace MediaBrowser.MediaEncoding.Probing
|
|||
}
|
||||
|
||||
ExtractTimestamp(info);
|
||||
|
||||
var videoStream = info.MediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Video);
|
||||
|
||||
if (videoStream != null && videoType == VideoType.VideoFile)
|
||||
{
|
||||
DetectInterlaced(info, videoStream);
|
||||
}
|
||||
}
|
||||
|
||||
return info;
|
||||
|
@ -932,20 +925,5 @@ namespace MediaBrowser.MediaEncoding.Probing
|
|||
|
||||
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 New Issue
Block a user