在MATLAB中将音频和视频合并为视频文件

在MATLAB中将音频和视频合并为视频文件,matlab,audio,video,video-processing,matlab-cvst,Matlab,Audio,Video,Video Processing,Matlab Cvst,我想结合音频和视频作为视频文件在MATLAB中。我编写了以下代码: 但它给了我错误!?!有人能指引我吗 [filename pathname]=uigetfile({'*.*'},'Video Selector'); fulpathname=strcat(pathname,filename); videoFReader = vision.VideoFileReader(fulpathname); [AUDIO,Fs] = audioread(fulpathname); videoFWriter

我想结合音频和视频作为视频文件在MATLAB中。我编写了以下代码: 但它给了我错误!?!有人能指引我吗

[filename pathname]=uigetfile({'*.*'},'Video Selector');
fulpathname=strcat(pathname,filename);
videoFReader = vision.VideoFileReader(fulpathname);
[AUDIO,Fs] = audioread(fulpathname);
videoFWriter = vision.VideoFileWriter('myFile.avi','FrameRate',videoFReader.info.VideoFrameRate);

for i=1:50
videoFrame = step(videoFReader);
step(videoFWriter, videoFrame,AUDIO);
end

release(videoFReader);
release(videoFWriter);

使用“videoFReader.SampleRate”而不是“videoFReader.info.VideoFrameRate”将删除错误

如果要使用vision.VideoFileWriter同时写入音频和视频,则应将AudioInputPort选项设置为true。这在默认情况下为false,对象只需要视频数据输入。如果设置为true,则可以将视频和音频作为输入发送到step method。

当Navan回答时,必须先将AudioInputPort添加到true。您的视频帧必须是帧的结构。音频也必须是与视频帧数相同长度的结构。您的音频采样率将明显超过帧数。 为此,我建议您将音频采样数除以帧速率,然后对该值进行四舍五入。
这些步骤对我很有用。

编写音频和视频的示例


% It is assumed that audio is stored in "data" variable

% Idea is simple: Just divide length of the audio sample by the number of frames to be written in the video frames. ( it is equivalent to saying that what audio you   % want to have with that particular frame)

% First make AudioInputPort property true (by default this is false)

writerObj = vision.VideoFileWriter('Guitar.avi','AudioInputPort',true);

% total number of frames
nFrames   = 250;

% assign FrameRate (by default it is 30)

writerObj.FrameRate =  20;

% length of the audio to be put per frame

val = size(data,1)/nFrames;

% Read one frame at a time

for k = sf : nFrames
    % reading frames from a directory
    Frame=(imread(strcat('frame',num2str(k),'.jpg')));
    % adding the audio variable in the step function
    step(writerObj,Frame,data(val*(k-1)+1:val*k,:)); % it is 2 channel that is why I have put (:)

end

% release the video

release(writerObj)

哪个错误?(您似乎正在将音频读入“y”中,然后却没有对其进行任何处理——“音频”从何而来?)我为这个错误感到抱歉。音频是需要与视频结合的音频文件。在这里,我只想知道如何在MATLAB中组合音频和视频。@阿米尔:错误到底是什么?@MohammadIzady使用vision.VideoFileWriter/step时出错输入参数太多;预期为1(除对象句柄外),得到2。在这些情况下,添加一个实际示例总是有帮助的。为什么?他犯了什么错?这应该是评论而不是回答。