您当前的位置: 首页 >  matlab

slandarer

暂无认证

  • 0浏览

    0关注

    248博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MATLAB 如何将视频和音频写入同一个文件?以视频上下颠倒为例,附带详细注释

slandarer 发布时间:2021-09-02 15:26:10 ,浏览量:0

一定要有 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);
关注
打赏
1664692598
查看更多评论
立即登录/注册

微信扫码登录

0.0426s