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 将音频和视频写入同一个文件?

如何在MATLAB中读入多个音频文件啊?

使用 JMF 将多路复用的音频/视频录制到文件中

如何使用 Matlab 检查视频中的音频信号

如何使用 c# 将两个音频文件和一个视频文件合并到一个视频文件中?

fft 在 matlab 中的音频文件样本上