Прочитайте в формате MP4 видео файл со звуком, отредактируйте кадры и запишите их в новый файл со звуком. - PullRequest
0 голосов
/ 17 апреля 2019

Я читаю видео файл filename.mp4 в MATLAB. Я хочу редактировать изображения, но хочу сохранить звук в целости и сохранности. Использование VideoReader и VideoWriter только разделяет изображения. Я использовал vision.VideoFileReader и 'vision.VideoFileWriter'. Я читаю видео и аудио файлы, затем беру изображение и добавляю изображение рядом с ним. Затем напишите кадр и звук, связанный с ним. Финальное видео показывает изображение, которое я добавил, но не оригинальное изображение. Любая помощь приветствуется.

v = VideoReader('movie.mp4');
nfr = v.NumberofFrames;
clear v;
vR = vision.VideoFileReader('movie.mp4','AudioOutputPort',1);
fr = vR.info.VideoFrameRate;
vW = vision.VideoFileWriter('filename.avi','AudioInputPort',1,'FrameRate',fr);

pic = imread('picture.png');%read picture
[a1,b1,~] = size(pic);% get picture size to be resized.


for i = 1:nfr
    [I,audio] = vR();
    I = permute(I,[2,1,3]);%rotate 90 degrees
    if i == 1%resize the picture
        [a,b,~] = size(I);
        pic = imresize(pic,[a,a/a1*b1]);
    end
    I = [I pic];%combine picture and movie frame
    vW(I,audio);%write frame and audio
end
release(vR);
release(vW);

1 Ответ

0 голосов
/ 19 апреля 2019

Я понял это.

v = VideoReader('movie.mp4');
nfr = v.NumberofFrames;
clear v;
vR = vision.VideoFileReader('movie.mp4','AudioOutputPort',1,'VideoOutDataType','uint8');
%default of VideoOutDataType is 'single', converting it to a similar format is essential
fr = vR.info.VideoFrameRate;
vW = vision.VideoFileWriter('filename.avi','AudioInputPort',1,'FrameRate',fr);

pic = imread('picture.png');%read picture
[a1,b1,~] = size(pic);% get picture size to be resized.


for i = 1:nfr
    [I,audio] = vR();
    I = permute(I,[2,1,3]);%rotate 90 degrees
    if i == 1%resize the picture
        [a,b,~] = size(I);
        pic = imresize(pic,[a,a/a1*b1]);%resizing the pic to same height as movie frame %with proportional width
    end
    I = [I pic];%combine picture and movie frame
    vW(I,audio);%write frame and audio
end
release(vR);
release(vW);
...