스펙업/2024 winter-study

[MATLAB] 매트랩으로 파일 불러오고 저장하기 (동영상, 사진, 음성)

성밍쟁 2024. 1. 10. 23:16
728x90
반응형

프롤로그

무선통신 스터디를 진행하는데, 매트랩을 이용하여 음성, 영상, 텍스트 파일 불러오고 변화된 후 파일 저장하는 방법을 알아낸 것을 정리하였다.

 

 

음성 파일 불러오기 & 저장하기

[y, Fs] = audioread("./testvoice.m4a"); %파일 불러오기
y_modified = y * 0.1; % 볼륨 10% 로 감소
audiowrite('modifiedvoice.m4a', y_modified, Fs); %파일 저장하기

 

처음에 위와 같이 testvoice.m4a 파일 하나만 존재하였는데 해당 코드를 실행하게 되면

새로운 음성 파일이 저장이 된 것을 확인 할 수 있다.

 

이때 [y, Fs] 로 불러오는데, y는 오디오 데이터, Fs 는 샘플링 레이트를 나타낸다.

샘플링 레이트란 초당 샘플 수를 나타내며, 단위는 Hz이다. 기본적으로 연속적인 아날로그 오디오 신호를 디지털 형식으로 변환할 때 얼마나 자주 샘플(데이터 포인트)를 취하는 지 나타낸다.

 

정리를 하자면 y-오디오 데이터 : 불러온 오디오 파일의 실제 데이터를 포함한다.

Fs - 샘플링 레이트 : 오디오 파일이 샘플링된 레이트를 나타낸다.이것은 오디오의 품질과 파일 크기에 직접적인 영향을 끼친다.

 

이렇게 음성 파일을 불러왔을 때

t = (0:length(y)-1)/Fs; % 시간 벡터 생성
plot(t, y); % 오디오 데이터를 시간에 따라 그래프로 그리기
xlabel('Time (seconds)'); % x축 레이블
ylabel('Amplitude'); % y축 레이블
title('Audio Signal'); % 그래프 제목​
 
위 와 같이 작성을 하여 시간에 따른 오디오 신호의 진폭을 그래프로 나타낼 수 있다.

 

추가적인 내용은...

https://blog.naver.com/wjddus3204/221876039243

 

MATLAB 활용(9) : Sound 조작 [소리파일을 잘라내서 다시 배열하기]

조금 어려울 수도 있지만 잘 생각해 보면서 만들어 보자! 예제1 Thank You~ (여성음성) Thank You~ (남...

blog.naver.com

일단 여기에 있는 거 보기 위해 메모장으로 넣겠다.

 

 

영상 파일 불러오기 & 저장하기

일단 영상을 불러오는 함수는

v = VideoReader('./testvidio.mp4'); %비디오 파일 불러오기

이를 활용하고, 이를 토대로 여러 속성에 접근할 수 있다.

% 속성 접근
frameRate = v.FrameRate; % 프레임 레이트 접근
numFrames = v.NumFrames; % 총 프레임 수 접근

 

프레임별로 동영상을 읽어서 서 이미지 데이터로 처리할 때는

while hasFrame(v)
    frame = readFrame(v);
    % 여기서 frame을 처리
end

이와 같이 사용한다.

 

새 동영상을 생성할 때에는 VideoWriter 객체를 사용하여 생성 할 수 있다.

% 새 동영상 파일을 위한 VideoWriter 객체 생성
newVideo = VideoWriter('modified_video.mp4', 'MPEG-4');
open(newVideo);

그 후 

writeVideo(newVideo, frame);

이렇게 비디오를 한 프레임씩 덮어 씌운다.

 

아까 프레임을 읽고 처리한 후에 저장하면 되는 것인데, 

종합하면

% 동영상 파일 불러오기
v = VideoReader('original_video.mp4');

% VideoWriter 객체 생성
newVideo = VideoWriter('modified_video.mp4', 'MPEG-4');
open(newVideo);

% 프레임별로 동영상 읽고 처리하기
while hasFrame(v)
    frame = readFrame(v);

    % 프레임 조작
    % 예: frame = imrotate(frame, 90); % 프레임을 90도 회전

    % 새 동영상 파일에 프레임 쓰기
    writeVideo(newVideo, frame);
end

% 새 동영상 파일 닫기
close(newVideo);

위 코드와 같이 된다.

주의해야할 것은, 파일을 열었으니 close 로 닫아줘야한다. 이는 파이썬도 마찬가지였다.

 

실행하면 다음과 같이 파일이 새로 생성되었다.

 

 

 

이미지 파일 불러오기 & 저장하기

매트랩에서 IMAGE 파일을 조작하려면 Image Processing Toolbox 가 있어야한다.

설치해주고, 확인해보자

I = imread('./testimg.PNG'); % 이미지 불러오기
I_modified = imrotate(I, 90); %이미지 조작하기

imwrite(I_modified, 'modified_image.png'); % 이미지 저장하기

이미지를 불러오는 건 imread 를 사용하고, 저장하는 것은 imwrite 를 사용한다.

 

이미지 조작하는 것은

https://kr.mathworks.com/help/images/index.html?s_tid=CRUX_lftnav

 

Image Processing Toolbox Documentation - MathWorks 한국

다음 MATLAB 명령에 해당하는 링크를 클릭했습니다. 명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.

kr.mathworks.com

좀 나중에 천천히 알아보겠다.

아무튼 실행해보니

 

90도 돌아간 이미지가 생성되었다.

 

 

에필로그

일단 동영상, 사진, 음성 파일을 불러오고 저장하는 방법에 대해서 알아보았다.

이상이다.

728x90
반응형