Как сделать снимок экрана для видео с помощью C# .Net?

Я знаю, что таких вопросов много.

Но я не хочу использовать кодировщик Windows Media 9, потому что его трудно получить, и он больше не поддерживается.

Я знаю, что одна возможность состоит в том, чтобы сделать много скриншотов и создать видео с ffmpeg но я не хочу использовать сторонние исполняемые файлы.

Есть ли .net Единственное решение?

2 ответа

Решение

Ответ - Microsoft Expression Encoder. По моему мнению, это самый простой способ записать что-то на Vista и Windows 7

private void CaptureMoni()
        {

            try
            {
                Rectangle _screenRectangle = Screen.PrimaryScreen.Bounds;
                _screenCaptureJob = new ScreenCaptureJob();
                _screenCaptureJob.CaptureRectangle = _screenRectangle;
                _screenCaptureJob.ShowFlashingBoundary = true;
                _screenCaptureJob.ScreenCaptureVideoProfile.FrameRate = 20;
                _screenCaptureJob.CaptureMouseCursor = true;

                _screenCaptureJob.OutputScreenCaptureFileName = string.Format(@"C:\test.wmv");
                if (File.Exists(_screenCaptureJob.OutputScreenCaptureFileName))
                {
                    File.Delete(_screenCaptureJob.OutputScreenCaptureFileName);
                }
                _screenCaptureJob.Start();
            }
            catch(Exception e) { }
        }

Редактировать на основе комментариев обратной связи:

Разработчик с именем baSSiLL любезно поделился репозиторием, в котором есть библиотека C# для записи экрана, а также примером проекта на C#, который показывает, как его можно использовать для захвата экрана и микрофона.

Запуск скриншота с использованием примера кода так же прост, как:

recorder = new Recorder(_filePath,
            KnownFourCCs.Codecs.X264, quality,
            0, SupportedWaveFormat.WAVE_FORMAT_44S16, true, 160);

_filePath - путь к файлу, в который я хочу сохранить видео.

Вы можете передавать различные кодеки, включая AVI, MotionJPEG, X264 и т. Д. В случае x264 мне сначала пришлось установить кодек на мою машину, но AVI работает из коробки.

Качество вступает в игру только при использовании AVI или MotionJPEG. Кодек x264 управляет своими собственными настройками качества.

0 выше - аудиоустройство, которое я хотел бы использовать. По умолчанию это ноль.

В настоящее время он поддерживает 2 волновых формата. 44100 на 16 бит или стерео или моно.

Параметр true указывает, что я хочу, чтобы аудио кодировалось в формате mp3. Я считаю, что это необходимо при выборе x264, поскольку несжатый звук, объединенный в файл.mp4, не будет воспроизводиться для меня.

160 - это битрейт для кодирования звука.

~~~~~

Чтобы остановить запись, вы просто

recorder.Dispose(); recorder = null;

Все с открытым исходным кодом, так что вы можете редактировать класс рекордера и изменять размеры, количество кадров в секунду и т. Д.

~~~~

Чтобы начать работу с этой библиотекой, вам нужно будет либо загрузить, либо извлечь файлы из библиотек github / codeplex, указанных ниже. Вы также можете использовать NuGet:

Установочный пакет SharpAvi

Исходное сообщение:

Sharp AVI: https://sharpavi.codeplex.com/ или https://github.com/baSSiLL/SharpAvi

В этой библиотеке есть пример проекта, в котором есть отличный экранный рекордер и меню настроек / и т.д.

Сначала я нашел Screna из другого ответа на этот вопрос StackoverFlow, но столкнулся с парой проблем, связанных с корректной работой кодировщика Mp3 Lame. Screna - это обёртка для SharpAVI. Я обнаружил, что, удалив Screna и взяв образец SharpAvi, мне повезло больше.

Другие вопросы по тегам