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()); }
public async Task <MediaFile> ConvertAsync(MediaFile input, MediaFile output, CancellationToken cancellationToken = default) => await ConvertAsync(input, output, default, cancellationToken);
public async Task <MediaFile> GetThumbnailAsync(MediaFile input, MediaFile output, CancellationToken cancellationToken = default) => await GetThumbnailAsync(input, output, default, cancellationToken);
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()); }
public Task GetMetadataAsync(MediaFile inputFile) { throw new NotImplementedException(); }