Не могу понять, как устранить исключение FFMediaToolkit — «Не удалось открыть видеокодер».C#

Место общения программистов C#
Ответить
Anonymous
 Не могу понять, как устранить исключение FFMediaToolkit — «Не удалось открыть видеокодер».

Сообщение Anonymous »

Я создаю приложение для 2D-анимации, и у меня возникли проблемы с рендерингом видео. Раньше это работало, но сегодня я внезапно начал получать исключение, и теперь я не могу визуализировать ни одного видео.
Для создания видеофайлов я сейчас создаю снимки экрана каждого кадра, а затем сшиваю их вместе, чтобы создать видео.
Версии пакета:
  • .Net: 8.0
  • FFMediaToolkit: 4.8.1
  • Avalonia: 11.3.8
Исключение:
FFMediaToolkit.FFmpegException
HResult=0x80131500
Message=Failed to open video encoder. Error code: -542398533 : Generic error in an external library
Source=FFMediaToolkit
StackTrace:
at FFMediaToolkit.Helpers.ExceptionHandler.ThrowIfError(Int32 errorCode, String exceptionMessage)
at FFMediaToolkit.Encoding.Internal.EncoderFactory.CreateVideo(OutputContainer container, VideoEncoderSettings config)
at FFMediaToolkit.Encoding.Internal.OutputContainer.AddVideoStream(VideoEncoderSettings config)
at FFMediaToolkit.Encoding.MediaBuilder.WithVideo(VideoEncoderSettings settings)
at _2dAnimator.Views.MainView.RenderAnimation(String fileName, String exportPath, String exportFormat, Int32 frameRate) in C:\avalonia\2dAnimator\2dAnimator\Views\MainView.axaml.cs:line 247
at _2dAnimator.RenderOptionsWindow.RenderBtn_OnClick(Object sender, RoutedEventArgs e) in C:\avalonia\2dAnimator\2dAnimator\Views\RenderOptionsWindow.axaml.cs:line 62
at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)


Мой код:
private void RenderAnimation(string fileName, string exportPath, string exportFormat, int frameRate)
{
if (fileName == null)
fileName = $"file_{DateTime.Now.Millisecond}";
if (exportPath == null)
exportPath = "C:\\Documents";

var width = MainCanvas.Bounds.Width;
var height = MainCanvas.Bounds.Height;
PixelSize pixelSize = new PixelSize((int)width, (int)height);
RenderTargetBitmap bitmap = new RenderTargetBitmap(pixelSize);

int counter = 0;
foreach (var frame in frames)
{
MainCanvas.Children.Clear();
MainCanvas.Children.Add(frame.currentLines);
bitmap.Render(MainCanvas);
bitmap.Save($"C:\\temp\\{counter}.png");
counter++;
}

var settings = new VideoEncoderSettings((int)width, (int)height, frameRate, VideoCodec.H264)
{
EncoderPreset = EncoderPreset.Fast,
CRF = 17
};

var file = MediaBuilder.CreateContainer($"{exportPath}/{fileName}.{exportFormat}").WithVideo(settings).Create();
for (int i = 0; i < frames.Count; i++)
{
using var bmp = SKBitmap.Decode($"C:\\temp\\{i}.png");
file.Video.AddFrame(new FFMediaToolkit.Graphics.ImageData(bmp.GetPixelSpan(), FFMediaToolkit.Graphics.ImagePixelFormat.Rgba32, bmp.Width, bmp.Height));
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... en-video-e
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»