Объединение аудио и видео в виде видеофайла в MATLAB

Я хочу объединить аудио и видео в виде видеофайла в 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);

person amir nemat    schedule 22.08.2013    source источник
comment
Какая ошибка? (Кажется, вы читаете звук в y, а потом ничего с ним не делаете — откуда берется ЗВУК?)   -  person nkjt    schedule 22.08.2013
comment
Я сожалею об этой ошибке. АУДИО — это аудиофайл, который необходимо объединить с видео. Здесь я просто хочу знать, как сочетаются аудио и видео в MATLAB.   -  person amir nemat    schedule 22.08.2013
comment
@amir: в чем именно ошибка?   -  person Mohammad Izady    schedule 22.08.2013
comment
@MohammadIzady Ошибка при использовании vision.VideoFileWriter/step Слишком много входных аргументов; ожидал 1 (в дополнение к дескриптору объекта), получил 2.   -  person amir nemat    schedule 23.08.2013


Ответы (4)


используйте «videoFReader.SampleRate» вместо «videoFReader.info.VideoFrameRate», ошибка будет удалена

person Ankur Mali    schedule 07.09.2013
comment
Почему? Какую ошибку он сделал? - person A. Abramov; 20.05.2015
comment
Это должен быть комментарий, а не ответ. - person eric; 19.03.2016

Если вы хотите записывать аудио и видео с помощью vision.VideoFileWriter, вы должны установить для параметра AudioInputPort значение true. По умолчанию это false, и объект ожидает только ввода видеоданных. Если вы установите значение true, вы можете отправлять как видео, так и аудио в качестве входных данных для пошагового метода.

person Navan    schedule 24.10.2013

Пример записи аудио и видео


% 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)
person Akshay Bhandari    schedule 14.04.2015

Как ответил Наван, вы должны сначала добавить AudioInputPort в ture. Ваш videoFrame должен быть структурой кадров. Звук также должен быть структурой той же длины, что и число видеокадров. Ваша частота дискретизации звука будет явно больше, чем количество кадров. Для этого я предлагаю вам разделить количество аудиосэмплов на частоту кадров и округлить значение. Эти шаги работают для меня.

person Abhay Prasad    schedule 06.02.2014
comment
В таких случаях всегда помогает добавление практического примера. - person nKn; 06.02.2014