private static string GetMetadata(MediaFile inputFile) => $"-i \"{inputFile.FileInfo.FullName}\" -f ffmetadata -";
        private static string Convert(MediaFile inputFile, MediaFile outputFile, ConversionOptions conversionOptions)
        {
            var commandBuilder = new StringBuilder();

            // Default conversion
            if (conversionOptions == null)
            {
                return(commandBuilder.AppendFormat(" -i \"{0}\" \"{1}\" ", inputFile.FileInfo.FullName, outputFile.FileInfo.FullName).ToString());
            }

            // Media seek position
            if (conversionOptions.Seek != null)
            {
                commandBuilder.AppendFormat(CultureInfo.InvariantCulture, " -ss {0} ", conversionOptions.Seek.Value.TotalSeconds);
            }

            commandBuilder.AppendFormat(" -i \"{0}\" ", inputFile.FileInfo.FullName);

            // Physical media conversion (DVD etc)
            if (conversionOptions.Target != Target.Default)
            {
                commandBuilder.Append(" -target ");
                if (conversionOptions.TargetStandard != TargetStandard.Default)
                {
                    commandBuilder.AppendFormat(" {0}-{1} \"{2}\" ", conversionOptions.TargetStandard.ToString().ToLowerInvariant(), conversionOptions.Target.ToString().ToLowerInvariant(), outputFile.FileInfo.FullName);

                    return(commandBuilder.ToString());
                }

                commandBuilder.AppendFormat("{0} \"{1}\" ", conversionOptions.Target.ToString().ToLowerInvariant(), outputFile.FileInfo.FullName);

                return(commandBuilder.ToString());
            }

            // Audio bit rate
            if (conversionOptions.AudioBitRate != null)
            {
                commandBuilder.AppendFormat(" -ab {0}k", conversionOptions.AudioBitRate);
            }

            // Audio sample rate
            if (conversionOptions.AudioSampleRate != AudioSampleRate.Default)
            {
                commandBuilder.AppendFormat(" -ar {0} ", conversionOptions.AudioSampleRate.ToString().Replace("Hz", ""));
            }

            // Maximum video duration
            if (conversionOptions.MaxVideoDuration != null)
            {
                commandBuilder.AppendFormat(" -t {0} ", conversionOptions.MaxVideoDuration);
            }

            // Video bit rate
            if (conversionOptions.VideoBitRate != null)
            {
                commandBuilder.AppendFormat(" -b {0}k ", conversionOptions.VideoBitRate);
            }

            // AudioChannel
            if (conversionOptions.AudioChannel != null)
            {
                commandBuilder.AppendFormat(" -ac {0} ", conversionOptions.AudioChannel);
            }

            // Video frame rate
            if (conversionOptions.VideoFps != null)
            {
                commandBuilder.AppendFormat(" -r {0} ", conversionOptions.VideoFps);
            }

            // Video size / resolution
            commandBuilder = AppendVideoSize(commandBuilder, conversionOptions);

            // Video aspect ratio
            commandBuilder = AppendVideoAspectRatio(commandBuilder, conversionOptions);

            // Video cropping
            commandBuilder = AppendVideoCropping(commandBuilder, conversionOptions);

            if (conversionOptions.BaselineProfile)
            {
                commandBuilder.Append(" -profile:v baseline ");
            }

            return(commandBuilder.AppendFormat(" \"{0}\" ", outputFile.FileInfo.FullName).ToString());
        }
        private static string Convert(MediaFile inputFile, MediaFile outputFile, ConversionOptions conversionOptions)
        {
            var commandBuilder = new StringBuilder();

            // Default conversion
            if (conversionOptions == null)
            {
                return(commandBuilder.AppendFormat(" -i \"{0}\" \"{1}\" ", inputFile.FileInfo.FullName, outputFile.FileInfo.FullName).ToString());
            }

            // Media seek position
            if (conversionOptions.Seek != null)
            {
                commandBuilder.AppendFormat(CultureInfo.InvariantCulture, " -ss {0} ", conversionOptions.Seek.Value.TotalSeconds);
            }

            commandBuilder.AppendFormat(" -i \"{0}\" ", inputFile.FileInfo.FullName);

            // Physical media conversion (DVD etc)
            if (conversionOptions.Target != Target.Default)
            {
                commandBuilder.Append(" -target ");
                if (conversionOptions.TargetStandard != TargetStandard.Default)
                {
                    commandBuilder.AppendFormat(" {0}-{1} \"{2}\" ", conversionOptions.TargetStandard.ToString().ToLowerInvariant(), conversionOptions.Target.ToString().ToLowerInvariant(), outputFile.FileInfo.FullName);

                    return(commandBuilder.ToString());
                }

                commandBuilder.AppendFormat("{0} \"{1}\" ", conversionOptions.Target.ToString().ToLowerInvariant(), outputFile.FileInfo.FullName);

                return(commandBuilder.ToString());
            }

            // Audio bit rate
            if (conversionOptions.AudioBitRate != null)
            {
                commandBuilder.AppendFormat(" -ab {0}k", conversionOptions.AudioBitRate);
            }

            // Audio sample rate
            if (conversionOptions.AudioSampleRate != AudioSampleRate.Default)
            {
                commandBuilder.AppendFormat(" -ar {0} ", conversionOptions.AudioSampleRate.ToString().Replace("Hz", ""));
            }

            // Maximum video duration
            if (conversionOptions.MaxVideoDuration != null)
            {
                commandBuilder.AppendFormat(" -t {0} ", conversionOptions.MaxVideoDuration);
            }

            // Video bit rate
            if (conversionOptions.VideoBitRate != null)
            {
                commandBuilder.AppendFormat(" -b {0}k ", conversionOptions.VideoBitRate);
            }

            // Video frame rate
            if (conversionOptions.VideoFps != null)
            {
                commandBuilder.AppendFormat(" -r {0} ", conversionOptions.VideoFps);
            }

            // Video size / resolution
            if (conversionOptions.VideoSize == VideoSize.Custom)
            {
                commandBuilder.AppendFormat(" -vf \"scale={0}:{1}\" ", conversionOptions.CustomWidth ?? -2, conversionOptions.CustomHeight ?? -2);
            }
            else if (conversionOptions.VideoSize != VideoSize.Default)
            {
                var size = conversionOptions.VideoSize.ToString().ToLowerInvariant();
                if (size.StartsWith("_"))
                {
                    size = size.Replace("_", "");
                }
                if (size.Contains("_"))
                {
                    size = size.Replace("_", "-");
                }

                commandBuilder.AppendFormat(" -s {0} ", size);
            }

            // Video aspect ratio
            if (conversionOptions.VideoAspectRatio != VideoAspectRatio.Default)
            {
                var ratio = conversionOptions.VideoAspectRatio.ToString();
                ratio = ratio.Substring(1);
                ratio = ratio.Replace("_", ":");

                commandBuilder.AppendFormat(" -aspect {0} ", ratio);
            }

            // Video cropping
            if (conversionOptions.SourceCrop != null)
            {
                var crop = conversionOptions.SourceCrop;
                commandBuilder.AppendFormat(" -filter:v \"crop={0}:{1}:{2}:{3}\" ", crop.Width, crop.Height, crop.X, crop.Y);
            }

            if (conversionOptions.BaselineProfile)
            {
                commandBuilder.Append(" -profile:v baseline ");
            }

            if (!string.IsNullOrEmpty(conversionOptions.FFmpegDrawTextArgs))
            {
                commandBuilder.AppendFormat(" -vf drawtext=\"{0}\" ", conversionOptions.FFmpegDrawTextArgs);
            }
            if (!string.IsNullOrEmpty(conversionOptions.ExtraFFmpegArgs))
            {
                commandBuilder.AppendFormat(" {0} ", conversionOptions.ExtraFFmpegArgs);
            }


            return(commandBuilder.AppendFormat(" \"{0}\" ", outputFile.FileInfo.FullName).ToString());
        }
Пример #4
0
 public async Task <MediaFile> ConvertAsync(MediaFile input, MediaFile output, CancellationToken cancellationToken = default)
 => await ConvertAsync(input, output, default, cancellationToken);
Пример #5
0
 public async Task <MediaFile> GetThumbnailAsync(MediaFile input, MediaFile output, CancellationToken cancellationToken = default)
 => await GetThumbnailAsync(input, output, default, cancellationToken);
Пример #6
0
        private static string Convert(MediaFile inputFile, MediaFile outputFile, ConversionOptions conversionOptions)
        {
            var commandBuilder = new StringBuilder();

            // Default conversion
            if (conversionOptions == null)
            {
                return(commandBuilder.AppendFormat(" -i \"{0}\" \"{1}\" ", inputFile.FileInfo.FullName, outputFile.FileInfo.FullName).ToString());
            }

            if (conversionOptions.HideBanner)
            {
                commandBuilder.Append(" -hide_banner ");
            }

            if (conversionOptions.Threads != 0)
            {
                commandBuilder.AppendFormat(" -threads {0} ", conversionOptions.Threads);
            }

            // HW Accel
            if (conversionOptions.HWAccel != HWAccel.None)
            {
                commandBuilder.AppendFormat(" -hwaccel {0} ", conversionOptions.HWAccel);
                AppendHWAccelOutputFormat(commandBuilder, conversionOptions);
            }

            // Media seek position
            if (conversionOptions.Seek != null)
            {
                commandBuilder.AppendFormat(CultureInfo.InvariantCulture, " -ss {0} ", conversionOptions.Seek.Value.TotalSeconds);
            }

            commandBuilder.AppendFormat(" -i \"{0}\" ", inputFile.FileInfo.FullName);

            // Physical media conversion (DVD etc)
            if (conversionOptions.Target != Target.Default)
            {
                commandBuilder.Append(" -target ");
                if (conversionOptions.TargetStandard != TargetStandard.Default)
                {
                    commandBuilder.AppendFormat(" {0}-{1} \"{2}\" ", conversionOptions.TargetStandard.ToString().ToLowerInvariant(), conversionOptions.Target.ToString().ToLowerInvariant(), outputFile.FileInfo.FullName);

                    return(commandBuilder.ToString());
                }

                commandBuilder.AppendFormat("{0} \"{1}\" ", conversionOptions.Target.ToString().ToLowerInvariant(), outputFile.FileInfo.FullName);

                return(commandBuilder.ToString());
            }

            // Video Format
            commandBuilder = AppendVideoFormat(commandBuilder, conversionOptions);

            // Video Codec
            commandBuilder = AppendVideoCodec(commandBuilder, conversionOptions);

            // Video Codec Preset
            if (conversionOptions.VideoCodecPreset != VideoCodecPreset.Default)
            {
                commandBuilder.AppendFormat(" -preset {0} ", conversionOptions.VideoCodecPreset);
            }

            // Video Codec Profile
            if (conversionOptions.VideoCodecProfile != VideoCodecProfile.Default)
            {
                commandBuilder.AppendFormat(" -profile:v {0} ", conversionOptions.VideoCodecProfile);
            }

            // Video Time Scale
            if (conversionOptions.VideoTimeScale != null && conversionOptions.VideoTimeScale != 1)
            {
                commandBuilder.AppendFormat(" -filter:v \"setpts = {0} * PTS\" ", conversionOptions.VideoTimeScale.ToString().Replace(",", "."));
            }

            // Maximum video duration
            if (conversionOptions.MaxVideoDuration != null)
            {
                commandBuilder.AppendFormat(" -t {0} ", conversionOptions.MaxVideoDuration);
            }

            // Video bit rate
            if (conversionOptions.VideoBitRate != null)
            {
                commandBuilder.AppendFormat(" -b:v {0}k ", conversionOptions.VideoBitRate);
            }

            // Video frame rate
            if (conversionOptions.VideoFps != null)
            {
                commandBuilder.AppendFormat(" -r {0} ", conversionOptions.VideoFps);
            }

            // Video size / resolution
            commandBuilder = AppendVideoSize(commandBuilder, conversionOptions);

            // Video aspect ratio
            commandBuilder = AppendVideoAspectRatio(commandBuilder, conversionOptions);

            // Video cropping
            commandBuilder = AppendVideoCropping(commandBuilder, conversionOptions);

            #region Audio
            // Audio bit rate
            if (conversionOptions.AudioBitRate != null)
            {
                commandBuilder.AppendFormat(" -ab {0}k", conversionOptions.AudioBitRate);
            }

            // Audio sample rate
            if (conversionOptions.AudioSampleRate != AudioSampleRate.Default)
            {
                commandBuilder.AppendFormat(" -ar {0} ", conversionOptions.AudioSampleRate.ToString().Replace("Hz", ""));
            }

            // Remove Audio
            if (conversionOptions.RemoveAudio)
            {
                commandBuilder.Append(" -an ");
            }
            #endregion

            if (conversionOptions.MapMetadata)
            {
                commandBuilder.Append(" -map_metadata 0 ");
            }


            return(commandBuilder.AppendFormat(" \"{0}\" ", outputFile.FileInfo.FullName).ToString());
        }
Пример #7
0
 public Task GetMetadataAsync(MediaFile inputFile)
 {
     throw new NotImplementedException();
 }