@ -615,20 +615,20 @@ namespace MediaBrowser.MediaEncoding.Encoder
public Task < string > ExtractAudioImage ( string path , int? imageStreamIndex , CancellationToken cancellationToken )
{
return ExtractImage ( new [ ] { path } , null , imageStreamIndex , MediaProtocol . File , true , null , null , cancellationToken ) ;
return ExtractImage ( new [ ] { path } , null , null , imageStreamIndex , MediaProtocol . File , true , null , null , cancellationToken ) ;
}
public Task < string > ExtractVideoImage ( string [ ] inputFiles , string container , MediaProtocol protocol , Video3DFormat? threedFormat , TimeSpan ? offset , CancellationToken cancellationToken )
public Task < string > ExtractVideoImage ( string [ ] inputFiles , string container , MediaProtocol protocol , MediaStream videoStream , Video3DFormat? threedFormat , TimeSpan ? offset , CancellationToken cancellationToken )
{
return ExtractImage ( inputFiles , container , null , protocol , false , threedFormat , offset , cancellationToken ) ;
return ExtractImage ( inputFiles , container , videoStream , null , protocol , false , threedFormat , offset , cancellationToken ) ;
}
public Task < string > ExtractVideoImage ( string [ ] inputFiles , string container , MediaProtocol protocol , int? imageStreamIndex , CancellationToken cancellationToken )
public Task < string > ExtractVideoImage ( string [ ] inputFiles , string container , MediaProtocol protocol , MediaStream imageStream , int? imageStreamIndex , CancellationToken cancellationToken )
{
return ExtractImage ( inputFiles , container , imageStream Index, protocol , false , null , null , cancellationToken ) ;
return ExtractImage ( inputFiles , container , imageStream , imageStream Index, protocol , false , null , null , cancellationToken ) ;
}
private async Task < string > ExtractImage ( string [ ] inputFiles , string container , int? imageStreamIndex , MediaProtocol protocol , bool isAudio ,
private async Task < string > ExtractImage ( string [ ] inputFiles , string container , MediaStream videoStream , int? imageStreamIndex , MediaProtocol protocol , bool isAudio ,
Video3DFormat ? threedFormat , TimeSpan ? offset , CancellationToken cancellationToken )
{
var inputArgument = GetInputArgument ( inputFiles , protocol ) ;
@ -645,7 +645,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
{
try
{
return await ExtractImageInternal ( inputArgument , container , imageStreamIndex, protocol , threedFormat , offset , true , cancellationToken ) . ConfigureAwait ( false ) ;
return await ExtractImageInternal ( inputArgument , container , videoStream, imageStreamIndex, threedFormat , offset , true , cancellationToken ) . ConfigureAwait ( false ) ;
}
catch ( ArgumentException )
{
@ -657,10 +657,10 @@ namespace MediaBrowser.MediaEncoding.Encoder
}
}
return await ExtractImageInternal ( inputArgument , container , imageStreamIndex, protocol , threedFormat , offset , false , cancellationToken ) . ConfigureAwait ( false ) ;
return await ExtractImageInternal ( inputArgument , container , videoStream, imageStreamIndex, threedFormat , offset , false , cancellationToken ) . ConfigureAwait ( false ) ;
}
private async Task < string > ExtractImageInternal ( string inputPath , string container , int? imageStreamIndex , MediaProtocol protocol , Video3DFormat ? threedFormat , TimeSpan ? offset , bool useIFrame , CancellationToken cancellationToken )
private async Task < string > ExtractImageInternal ( string inputPath , string container , MediaStream videoStream , int? imageStreamIndex , Video3DFormat ? threedFormat , TimeSpan ? offset , bool useIFrame , CancellationToken cancellationToken )
{
if ( string . IsNullOrEmpty ( inputPath ) )
{
@ -698,7 +698,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
break ;
}
}
var mapArg = imageStreamIndex . HasValue ? ( " -map 0:v:" + imageStreamIndex . Value . ToString ( CultureInfo . InvariantCulture ) ) : string . Empty ;
var enableThumbnail = ! new List < string > { "wtv" } . Contains ( container ? ? string . Empty , StringComparer . OrdinalIgnoreCase ) ;
@ -726,6 +726,25 @@ namespace MediaBrowser.MediaEncoding.Encoder
args = string . Format ( "-ss {0} " , GetTimeParameter ( offset . Value ) ) + args ;
}
var encodinghelper = new EncodingHelper ( this , FileSystem , SubtitleEncoder ( ) ) ;
if ( videoStream ! = null )
{
var decoder = encodinghelper . GetVideoDecoder ( VideoType . VideoFile , videoStream , GetEncodingOptions ( ) ) ;
if ( ! string . IsNullOrWhiteSpace ( decoder ) )
{
args = decoder + " " + args ;
}
}
if ( ! string . IsNullOrWhiteSpace ( container ) )
{
var inputFormat = encodinghelper . GetInputFormat ( container ) ;
if ( ! string . IsNullOrWhiteSpace ( inputFormat ) )
{
args = "-f " + inputFormat + " " + args ;
}
}
var process = _processFactory . Create ( new ProcessOptions
{
CreateNoWindow = true ,
@ -786,6 +805,8 @@ namespace MediaBrowser.MediaEncoding.Encoder
}
public async Task ExtractVideoImagesOnInterval ( string [ ] inputFiles ,
string container ,
MediaStream videoStream ,
MediaProtocol protocol ,
Video3DFormat ? threedFormat ,
TimeSpan interval ,
@ -825,6 +846,25 @@ namespace MediaBrowser.MediaEncoding.Encoder
args = analyzeDurationArgument + " " + args ;
}
var encodinghelper = new EncodingHelper ( this , FileSystem , SubtitleEncoder ( ) ) ;
if ( videoStream ! = null )
{
var decoder = encodinghelper . GetVideoDecoder ( VideoType . VideoFile , videoStream , GetEncodingOptions ( ) ) ;
if ( ! string . IsNullOrWhiteSpace ( decoder ) )
{
args = decoder + " " + args ;
}
}
if ( ! string . IsNullOrWhiteSpace ( container ) )
{
var inputFormat = encodinghelper . GetInputFormat ( container ) ;
if ( ! string . IsNullOrWhiteSpace ( inputFormat ) )
{
args = "-f " + inputFormat + " " + args ;
}
}
var process = _processFactory . Create ( new ProcessOptions
{
CreateNoWindow = true ,