2013-05-05 2 views
3

거의 30fps의 비디오 (정지 영상과 같은) 인 비디오 스트림 유형과 인터페이싱합니다. 동영상에 움직임이있을 때만 스트림에서 업데이트를받습니다. 따라서 동영상이 5 분 동안 정적 인 경우, 해당 데이터를 단일 프레임으로 5 분 동안 만 가져옵니다. 그런 다음 비디오 스트림에서 5 초 동안 움직임이 있으면 해당 프레임의 데이터도 각각 얻습니다 (예 : 약 150 프레임). 그런 다음 5 분 동안 계속 남아 있으면 그 전체 시간 동안 1 개의 단일 프레임 데이터를 얻습니다. 따라서 비디오는 10 분 5 초가되지만 그 기간 동안 152 프레임의 데이터를 얻습니다.일련의 스냅 샷에서 비디오를 인코딩하는 방법은 무엇입니까?

이 데이터에서 실시간 비디오 파일을 만들려고하는데 인코딩 할 때 첫 번째와 마지막 5 분 분량의 비디오가 하나의 프레임으로 존재하기 때문에 5 분간의 스틸 비디오 대신 똑바로 진행됩니다 그 실제 실시간 프레임을 가지고있는 2 초까지.

이 정보에서 실제, 전체 길이/실시간 비디오를 만드는 가장 좋은 방법은 무엇입니까? 현재 C++을 사용하고 있습니다.

+0

당신이 사용하는 라이브러리를 요구하고 있습니다 :

여기에 몇 가지 의사 코드는? 아니면 이미 염두에두고 있니? – flup

+0

모든 C++ 라이브러리가 수행합니다. 무엇이든 가장 일반적이며 단순합니다. 나는이 접근에 더 관심이있다. – NotDan

답변

0

코덱이나 도구에 대해서는 언급하지 않았지만 이미 인코딩을하고 있다는 의미입니다.

대부분의 비디오 인코더는 고정 된 프레임 속도를 예상합니다. 따라서 쉬운 해결책은 충분한 "프레임 시간"이 경과하여 세트에서 다음 프레임까지 도달 할 때까지 계속 동일한 프레임을 계속 공급하는 것입니다.

frames_per_second = 30; 
encoder = CreateEncoder(frames_per_second, width, height); 
milliseconds_per_frame = 1000.0/fps; 
timestamp = frameset[0].timestamp; 
x = 0; 

while (x < frameset.count) 
{ 
    AddNextFrameToEncoder(encoder, frameset[x].framedata); 
    timestamp += milliseconds_per_frame; 

    if ((x < frameset.count-1) && (timestamp >= frameset[x+1].timestamp)) 
    { 
     x++; 
    } 
    // else - keep repeating the same source frame until "timestamp" is incremented to the timestamp of the next still 
} 
관련 문제