MATLAB 如何将视频和音频写入同一个文件?以视频上下颠倒为例,附带详细注释
Posted slandarer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB 如何将视频和音频写入同一个文件?以视频上下颠倒为例,附带详细注释相关的知识,希望对你有一定的参考价值。
一定要有 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);
以上是关于MATLAB 如何将视频和音频写入同一个文件?以视频上下颠倒为例,附带详细注释的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 FFMPEG 和 C 将音频和视频写入同一个文件?