How can I write a set number of frames to a file using vision.VideoFileWriter and MATLAB R2015a?
    6 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    Robyn Hunt
 il 13 Lug 2015
  
    
    
    
    
    Commentato: Walter Roberson
      
      
 il 16 Lug 2015
            The code involves reading a video file and rewriting the same video image into a new file with new audio samples (the total audio file has already been trimmed to the correct length). 'start_time' and 'total_time' are defined as inputs to the function, in seconds.
The audio part of the file writes perfectly, but I can't get the video output to match the indexed values I've specified. The video output is the correct length but always starts from index 0. Can anyone help? The relevant parts of my code are shown below.
videoreader = vision.VideoFileReader('input.mp4');
videowriter = vision.VideoFileWriter('output.avi', 'FileFormat', 'AVI',...
    'AudioInputPort', true, 'FrameRate', videoreader.info.VideoFrameRate);
[y, fs] = audioread('input.wav');
a = round(start_time *  videoreader.info.VideoFrameRate, 0);
b = round((start_time + total_time) * videoreader.info.VideoFrameRate, 0);
nSamples = round(fs/videoreader.info.VideoFrameRate, 0);
for i = a:b; 
    videoframe = step(videoreader);
    step(videowriter, videoframe, y((nSamples*(i-a)+1):nSamples*(i-a+1)));
end
close(videoreader);
close(videowriter);
0 Commenti
Risposta accettata
  Robyn Hunt
 il 15 Lug 2015
        
      Modificato: Robyn Hunt
 il 15 Lug 2015
  
      
      1 Commento
  Walter Roberson
      
      
 il 16 Lug 2015
				I don't see how that could make a difference compared to my suggestion, unless for some data flushing reason one further step() was needed after reading frame #b.
Più risposte (1)
  Walter Roberson
      
      
 il 13 Lug 2015
        I might be misunderstanding, but possibly
for i = 1:b; 
  videoframe = step(videoreader);
  if i >= a
    step(videowriter, videoframe, y((nSamples*(i-a)+1):nSamples*(i-a+1)));
  end
end
3 Commenti
  Walter Roberson
      
      
 il 15 Lug 2015
				That does not seem possible. videowriter for Computer Vision uses system objects that overwrite the buffers each time. The first frame is going to be gone by the time "i" becomes as large as "a" for the first step() of the videowriter object.
Vedere anche
Categorie
				Scopri di più su Audio and Video Data in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!