Как сделать снимок экрана для видео с помощью C # .Net? - PullRequest
16 голосов
/ 06 июля 2011

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

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

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

Есть ли решение .net only?

Ответы [ 2 ]

9 голосов
/ 06 июля 2011

ответом является 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) { }
        }
3 голосов
/ 09 марта 2016

Редактирование на основе комментариев Комментарии:

Разработчик с именем 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 бит или стерео или моно.

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

160 - это битрейт, с которым кодируется звук.

~~~~~

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

recorder.Dispose(); recorder = null;

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

~~~~

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

Install-Package SharpAvi

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

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

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

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

...