문제

웹캠으로 Matlab에서 비디오를 녹화 할 수있는 방법을 알고 싶습니다.

도움이 되었습니까?

해결책

노트: 이전 기능 중 일부가 대체 및 제거되었으므로 새로운 버전의 MATLAB과 함께 사용하도록 업데이트되었습니다.

이미 방법을 알고 있다면 웹캠에서 단일 이미지를 캡처하십시오, 그런 다음 이미지를 영화에 함께 꿰매는 문제 일뿐입니다. 당신은 a를 사용할 수 있습니다 VideoWriter 물체 영화 파일을 열고 다음을 사용하여 순차적 이미지를 추가하려면 writeVideo 방법. 예를 들어:

aviObject = VideoWriter('myVideo.avi');  % Create a new AVI file
for iImage = 1:100                       % Capture 100 frames
  % ...
  % You would capture a single image I from your webcam here
  % ...
  writeVideo(aviObject, I);  % Add the image to the AVI file
end
close(aviObject);  % Close the AVI file

방금 루프를 간단한 예로 사용했지만 사용하고 싶을 수도 있습니다. timer 대신 이미지를 캡처하고 일반 시간 간격으로 AVI 파일에 추가하려는 경우.

다른 팁

먼저 비디오 입력 인터페이스를 구성합니다

vid = videoinput('winvideo',1,'RGB24_400x300');

웹캠의 마지막 비트를 조정해야합니다. 웹캠 장치 목록 (및 그 외에는 다른 것들)을 찾으려면 다음과 같습니다.

imaqhwinfo

다음은 첫 번째 웹캠을 객체로 만듭니다

a=imaqhwinfo('winvideo',1)

지원되는 비디오 형식 목록을 찾으십시오

a.SupportedFormats

그러면 프레임 속도를 결정하고 싶을 것입니다 (자세한 내용은 여기):

set(vid,'FramesPerTrigger',100);
start(vid);
wait(vid,Inf);

% Retrieve the frames and timestamps for each frame.
[frames,time] = getdata(vid, get(vid,'FramesAvailable'));

% Calculate frame rate by averaging difference between each frame's timestamp
framerate = mean(1./diff(time))

그만큼 FrameGrabInterval 속성은 비디오 스트림에서 프레임이 얼마나 자주 저장되는지를 지정합니다. 예를 들어, 5로 설정하면 5 프레임 중 1 개만 유지됩니다. 다른 4 프레임은 폐기됩니다. 프레임 속도를 사용하여 프레임을 얼마나 자주 받고 싶은지 결정하십시오.

set(vid,'FrameGrabInterval',10);

총액을 획득 할 프레임의 수를 결정하려면 장치의 프레임 속도로 획득 할 총 프레임 수를 계산 한 다음 FrameGrabinterVal로 나눕니다.

capturetime = 30;
interval = get(vid,'FrameGrabInterval');
numframes = floor(capturetime * framerate / interval)

이제 비디오를 사용하여 녹음하고 재생할 준비가되었습니다. getdata 명령 (peekdata 그러나 도움이됩니다) 그러나 ...

많은 수의 프레임이 획득되면 메모리가 아닌 디스크에 이미지를 로그인하는 것이 더 실용적입니다. 이미지 획득 도구 상자를 사용하면 이미지를 AVI 파일에 직접 로그인 할 수 있습니다. LoggingMode 속성을 사용하여이를 구성합니다.

set(vid,'LoggingMode','disk');

Avifile 명령을 사용하여 로그인 할 avi 파일 개체를 만듭니다. 사용할 파일 이름과 AVI 파일을 다시 재생 해야하는 프레임 속도를 지정해야합니다. 그런 다음 비디오 입력 객체의 디스크 로그 속성을 AVI 파일로 설정하십시오.

avi = avifile('timelapsevideo','fps',framerate);
set(vid,'DiskLogger',avi);

타임 랩스 획득을 시작하고 취득이 완료 될 때까지 기다리십시오. 이미지 획득 도구 상자는 획득 중에 MATLAB®를 연결하지 않습니다. 획득을 시작하고 Matlab에서 계속 일할 수 있습니다.

start(vid);
wait(vid,Inf); % Wait for the capture to complete before continuing.

캡처가 완료되면 AVI 파일 개체를 검색하고 밀접한 기능을 사용하여 관련 리소스를 해제하십시오.

avi = get(vid,'DiskLogger');
avi = close(avi);

비디오 입력 객체를 사용하면 삭제 기능을 사용하여 관련 하드웨어 리소스를 제거하고 명확한 기능을 사용하여 작업 영역에서 제거해야합니다.

delete(vid);
clear vid;

위의 모든 부분이 아닌 것은 아닙니다. 여기.

당신이 쳤을 때 start(vid) 프레임이 획득되기 전에 약간의 지연이 있음을 알 수 있습니다. 비디오를 무언가와 동기화하려는 경우 나쁘다. 이 경우 작업을 시도하고 싶을 것입니다. 방아쇠:

triggerconfig(vid,'manual');
start(vid); %There'll be a delay here, but nothing is being captured
trigger(vid); %Use this line when you want the capture to start. There should be very little delay.

트리거 및 동기화에 대한 자세한 정보는 다음과 같습니다 여기.

여기에서 훌륭한 비디오를 볼 수 있습니다. 웹캠에서 이미지를 캡처하고 처리하는 방법을 볼 수 있으므로 녹음은 어렵지 않아야합니다.

http://blogs.mathworks.com/videos/2008/01/18/cool-feature-video-processing-demos/

내 대학 생활에서 나는이 프로젝트를

MATLAB을 기반으로 한 오디오/비디오 레코더 및 플레이어 응용 프로그램

Matlab 프로그래밍에서 오디오 녹음 및 비디오 녹화 및 재생을 수행했습니다. 소스 코드를 다운로드 할 수 있습니다 여기

최근에 명령 줄을 FFMPEG 프로그램에 보내서 MATLAB에서 동기화 된 오디오 및 비디오를 녹화하는 방법에 대한 블로그 게시물을 작성했습니다. 더 많은 것을 찾을 수 있습니다 여기, 그러나 아래는 내 컴퓨터에서 의미가있는 일부 설정을 사용하는 샘플입니다.

dos('ffmpeg -list_devices true -f dshow -i dummy')

dos('ffmpeg -f dshow -list_options true -i video="USB2.0 HD UVC WebCam')

dos('ffmpeg -f dshow -video_size 1280x720 -framerate 30 -audio_buffer_size 80 -i video="USB2.0 HD UVC WebCam":audio="Microphone (Realtek High Definition Audio)" -t 10 -c:v libx264 -preset veryfast -crf 25 test_vid2.mp4');
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top