一定要有 Computer Vision Toolbox 工具箱!!!
完整代碼:
videoPath='test.mp4';
% 以下部分按理說可以通過vision.VideoFileReader一下子獲取
% 但是為了獲取更多資訊更容易操作還是分開寫了
movObj=VideoReader(videoPath); % 獲取視頻資訊
[AUDIO,Fs]=audioread(videoPath);% 獲取音頻資訊
audioFrameLen=round(size(AUDIO,1)./movObj.NumFrames);% 獲取每一幀對應音頻長度
% 呼叫Computer Vision Toolbox內函式創建視頻物件
videoFWriter=vision.VideoFileWriter('result.avi','FrameRate',movObj.FrameRate);
videoFWriter.AudioInputPort=true; % 把允許聲音寫入設定為true
% 為了顯示進度創建一個視窗,不要也罷
close all;
fig=figure(1);
fig.NumberTitle='off';
for k=1:movObj.NumFrames
frame=read(movObj,k); %獲取每一幀
frame=frame(end:-1:1,:,:); %每一幀上下翻轉
% 視頻音頻一幀一幀寫入
videoFWriter(frame,AUDIO((k-1)*audioFrameLen+1:k*audioFrameLen,:));
% 為了顯示進度,不要也罷
imshow(frame)
fig.Name=['Frame:[',num2str(k),'/',num2str(movObj.NumFrames),']'];
end
release(videoFWriter);%關掉視頻物件
視頻每一幀是對應的一段聲波,因此我們要計算出每一幀對應聲波資訊長度,其實就是聲波資訊總長除以總幀數后取整:
audioFrameLen=round(size(AUDIO,1)./movObj.NumFrames);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297234.html
標籤:其他
