2011-07-06 63 views
15

나는 이렇게 많은 질문을 알고있다.C# .Net을 사용하여 화면을 캡쳐하는 방법은 무엇입니까?

Windows Media 인코더 9를 사용하고 싶지는 않지만, 문제가있어 더 이상 지원되지 않으므로 사용하지 않으려합니다.

나는 하나의 가능성은 많은 스크린 샷을 캡처하고 ffmpeg으로 비디오를 만드는 것이지만 제 3 자 실행 파일을 사용하고 싶지 않다는 것을 알고 있습니다.

.net 유일한 해결책이 있습니까?

+0

Silverlight 4를 사용하면이 옵션을 사용할 수 있습니다. –

+0

가능하면 .net 3.5이고 winforms는 –

+0

어떤 OS를 사용하고 있습니까? –

답변

9

대답은 Microsoft Expression Encoder입니다. 그것은 내 의견에 가장 쉬운 비스타에 뭔가를 기록하는 방법과 창을 따라한다 코멘트 피드백을 바탕으로 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) { } 
     } 
+2

을 확인할 수 있습니다. 이전 게시물이지만 Expression Encoder를 사용하려면 Pro 라이센스가 필요합니다. 10 분 이상의 지속 시간, GPU 인코딩에는 프로 라이센스가 필요합니다. (개인적으로 GPU 인코딩을 사용하지 않으면 출력이 나오지 않습니다.) – Sakuya

+0

@ masterchris_99 답변 해 주셔서 감사합니다. 나는 MEE도 사용하고 싶지만, 아래의 오류를 얻는다; PCba.Tests.Repository.dll에서 'System.IO.FileNotFoundException'유형의 예외가 발생했지만 사용자 코드에서 처리되지 않았습니다. 추가 정보 : 파일 또는 어셈블리를로드 할 수 없습니다. 'Microsoft.Expression.Encoder, Version = 4.0.0.0 , 문화 = 중립, PublicKeyToken = 31bf3856ad364e35 '또는 그것의 의존성 중 하나. 시스템이 지정된 파일을 찾을 수 없습니다. –

2

편집 : 이름의 개발자는 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은 내가 사용하고자하는 오디오 장치입니다. 기본값은 0입니다.

현재 두 가지 웨이브 형식을 지원합니다. 스테레오 또는 모노 중 하나 인 16bit에서 44100.

true 매개 변수는 오디오를 mp3 형식으로 인코딩하려는 것을 나타냅니다. 저는 이것이 .mp4 파일로 결합 된 비 압축 오디오가 나를 위해 재생되지 않기 때문에 x264를 선택할 때 필요하다고 생각합니다.

160은 오디오를 인코딩 할 비트 레이트입니다. 당신이 등 초당 프레임,

을 치수를 레코더 클래스를 편집하고 변경할 수 있도록

~~~~~

는 단지

recorder.Dispose(); recorder = null;

모든 오픈 소스 당신에게 녹화를 중지하려면

~~~~

이 라이브러리를 사용하려면 다운로드하거나 다운로드해야합니다. 아래 github/codeplex 라이브러리.또한 NuGet을 사용할 수 있습니다

설치 패키지 SharpAvi

원래의 게시물 :

샤프 AVI를 : https://sharpavi.codeplex.com/ 또는 https://github.com/baSSiLL/SharpAvi

가 해당 라이브러리 내에서 샘플 프로젝트가있다 설정/등을위한 메뉴와 함께 멋진 스크린 레코더.

이 StackoverFlow 질문에 대한 다른 대답으로 Screna를 처음 발견했지만 올바르게 작동하려면 Mp3 Lame 엔코더 가져 오는 것과 관련된 몇 가지 문제가 발생했습니다. Screna는 SharpAVI의 래퍼입니다. 나는 Screna를 제거하고 SharpAvi의 샘플에서 벗어나서 더 좋은 행운을 찾았습니다.

+0

잠깐이지만 SharpAVI에는 내가 만들 수없는 LameEncoder 버전이 있다고 생각합니다. 정확한 문제는 잊어 버렸지만 LameEncoder를 만들 때마다 일부 기능이 누락되었거나 다른 메서드 이름 등으로 생각됩니다. SharpAVI 내에서 실제 DLL 파일을 찾았고 한 번 사용 했더니 원활하게 처리되었습니다. – ickydime

+0

Scalea와 함께 절름발이 dll 파일을 사용하려고 시도했을 때 메서드에서 일치하지 않았습니다. 마치 Screna가 다른 버전의 절름발이를 사용하고있는 것처럼 보입니다. 그리고 필요한 불충분 한 DLL을 다시 만들 수 없습니다. – ickydime