2014-07-26 5 views
1

다음 작업을 수행해야합니다. C#을 사용하여 카메라에서 비디오를 녹화하십시오. 카메라에서 비디오 프레임을 만듭니다 (프레임 속도는 고정되어 있지 않습니다). 어떻게 든 모든 프레임을 함께 넣고 비디오 파일을 만들어야합니다. 또한 AVI 또는 MPEG4와 같은 다른 코덱을 사용해야합니다 (이 코덱은 필수이며 다른 코덱은 선택 사항 임).C#의 비디오 녹화

내가 직면 한 주요 문제는 프레임 속도가 고정되지 않은 비디오를 만드는 방법입니다. 나는 프레임의 흐름을 가지고있다. 예를 들어, 1ms 후에 첫 번째 프레임을 그리고 나서 20ms 후에 36ms를 반복 할 수있다. 초당 25 프레임으로 비디오를 만들면 프레임이 40ms 후에 추가된다는 의미이므로 결과가 잘못됩니다.

Aforge.Video 라이브러리를 사용해 보았습니다. 시간 간격에 따라 프레임을 추가하는 http://www.aforgenet.com/framework/docs/html/84a560df-bfd5-e0d6-2812-f810b56a254d.htm 메서드가 있습니다. 그러나이 방법은 비트율 설정에 문제가 있습니다. 즉, 무시한 방식으로 전달한 비트 전송률 값은 무시됩니다 (http://www.aforgenet.com/forum/viewtopic.php?f=2&t=2665).

내 질문은 : 비디오 레코딩에 사용할 수있는 C# 라이브러리가 있습니까? 나는 AVI와 MPEG4를 지원해야하며 가변 비트 레이트를 설정할 수도 있고 가변적 인 프레임 레이트를 가진 최단 기록 비디오를 설정할 수도있다.

미리 감사드립니다. 어떤 제안이라도 도움이 될 것입니다.

UPD1 : 카메라에 직접 연결할 수 없습니다. 가지고있는 것은 모두 프레임 스트림이며이 스트림을 런타임에 비디오로 변환해야합니다.

UPD2 : 찾고있는 라이브러리는 다음 속성을 충족해야합니다. 에서 (

public void WriteVideoFrame(Bitmap frame, TimeSpan timestamp) 

을 그리고 다른 코덱을 선택할 수 있어야한다 : 그것은 (방법 동일한 작업을 수행하는 방법 또는 어떤 방식) 단지 Aforge.Video.FFMPEG처럼 타임 스탬프와 다음 프레임을 추가하는 방법을 포함한다 최소 AVI 및 MPEG4) 및 비트 전송률을 설정할 수도 있습니다. Aforge.Video.FFMPEG에 대한 대안이 있습니까? Aforge가 제대로 작동하지 않기 때문에 비트율 값이 무시되고 일부 코덱이 지원되지 않습니다 (예 : MPEG2).

UPD3 : 코덱 라이센스에 대해 한 가지 더 질문합니다. 오픈 소스 라이브러리를 사용하는 경우 코덱 라이센스에 대해 걱정해야합니까?

답변

1
  • AVI 및 MPEG4는
  • API와 라이브러리가 잘 알려져있다 코덱하지만 컨테이너 형식 아니다, 여기에 문제는 특정 포맷과 코덱, 예를 들어 자신의 한계를 가지고있다 AVI 파일은
  • 도서관 검색 및 추천 품질 평가 점수가 오프 주제와 의견을 고려 SO

여기를 기반으로 (당신이 생략 된 프레임 높은 FPS 파일이있을 수 있습니다 해결 방법 포함) 비디오를위한 고정해야하는 프레임 속도를 가지고 비디오 레코딩을 위해 C# 코드에서 일반적으로 사용하는 최상의 컨트롤 API는 DirectShow.NET 라이브러리를 통한 DirectShow입니다. 형식 및 코덱을 선택하고 AVI 멀티플렉서를 재고 구성 요소로 사용할 수 있으며 타사 대체품이 있습니다. MPEG-4 (.MP4)의 경우 타사 구성 요소가 필요합니다. this. 비디오 압축 구성 요소는 대개 타사 필터 선택의 영향을받습니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 나는 여전히 몇 가지 질문을 가지고있다 : 1) 단순히 새로운 프레임을 추가하는 것만으로 DirectShow에서 비디오를 녹화 할 수 있습니까? 카메라에 연결하지 않고 말야. 2) Aforge.Video와 비슷한 도서관에 대해 물어볼 수있는 곳은 어디입니까? 나는 그것을 봤지만 아무 것도 발견하지 못했다. 3) 다른 형식으로 다른 라이브러리를 사용하고 싶지 않습니다. 나는 다음에 대해 생각했다. 처음에는 어떤 형식의 비디오를 녹화 한 다음 ffmpeg를 사용하여 원하는 형식으로 변환했다. 당신이 그것에 대해 어떻게 생각하십니까? – pfedotovsky

+0

'1' - 예; C# 소스와 표준 DirectShow 파이프 라인을 연결하기 위해서는 커스텀 빌트 C++ 필터/DLL이 필요하기 때문에이 방법은 널리 사용되지만 그리 간단하지는 않습니다. '2' 라이브러리 포럼 또는 질문이 구체적이고 잘 구성된 경우 (일반적으로 소스 코드 스 니펫 포함); '3' - 추가 변환 단계는 나에게 많은 의미가 없지만 일반적으로 제 3 자 라이브러리를 처리해야하는 비디오 인코딩 작업으로 결정해야합니다. 올바른 비디오 클립을 선택하기 만하면됩니다. –

+0

1 - 저에게 할 수있는 정보 나 링크를 제공해 주시겠습니까? – pfedotovsky