函数将视频名称作为字符串输入。它使用vision.VideoFileReader
函数读取视频,并使用vision.VideoFileWriter
函数返回相同的视频。输入视频和输出视频都具有音频。处理大约6 MB的视频,我的视频输出超过1 GB。该功能没有错误,但我必须压缩。使用VideoCompressor
,可以将视频压缩到350 MB,我会使用AudioCompressor
,但是会得到一个错误。
这是我的代码,以下是返回的错误。
function [ nFrames ] = showMovie( video )
v = VideoReader(video);
videoFReader = vision.VideoFileReader(video);
videoFWriter = vision.VideoFileWriter('FrameRate',v.FrameRate,'AudioInputPort',1,'VideoCompressor', 'MJPEG Compressor','AudioCompressor','MJPEG Compressor');
[audio,fs] = audioread(video);
op=floor(fs/v.FrameRate);
nFrames = 0;
while ~isDone(videoFReader)
nFrames=nFrames+1;
frame=step(videoFReader);
audios=audio( (nFrames-1)*op + 1 : nFrames*op , : );
step(videoFWriter,frame,audios);
end
release(videoFReader);
release(videoFWriter);
end
我不能使用
AudioCompressor
属性。我同时尝试了Compressor MJPEG
和DV Video Encoder
值,但出现此错误:Error using VideoFileWriter / step
Unable to create audio compressor filter
Error in showMovie (line 15)
step (videoFWriter, frame, audios);
最佳答案
在我的系统中可以使用的唯一AudioCompressor压缩器是:'None(未压缩)'
我在64位版本的Matlab(R2014b)上进行了尝试。
原因是我的Windows系统缺少Matlab支持的x64(64位)音频编解码器。
注意: 64位Matlab需要x64编解码器,而32位Matlab需要x86编解码器。
当我将videoWriter.AudioCompressor = ' % <tab> key
用作时,提到的,
当我使用32位版本的Matlab(R2013b)尝试相同的代码时,得到以下列表:
注意:64位版本中显示的视频编解码器未在32位Matlab中显示。
我猜在
AudioCompressor
中显示视频编解码器是Matlab的错误。仅作记录,在Suever提出答案之前,我尝试了
<tab> key
。我在Matlab文档中读到了它:http://www.mathworks.com/help/vision/ref/vision.videofilewriter-class.html
To launch the tab completion functionality, type the following up to the open quote.
y.VideoCompressor='
A list of compressors available on your system will appear after you press the Tab key
以下代码示例在系统中工作:
video = 'xylophone.mpg';
v = VideoReader(video);
videoFReader = vision.VideoFileReader(video);
videoFWriter = vision.VideoFileWriter('FrameRate',v.FrameRate,'AudioInputPort',1,'VideoCompressor', 'MJPEG Compressor','AudioCompressor', 'None (uncompressed)');
[audio,fs] = audioread(video);
op=floor(fs/v.FrameRate);
nFrames = 0;
while ~isDone(videoFReader)
nFrames=nFrames+1;
frame=step(videoFReader);
audios=audio( (nFrames-1)*op + 1 : min(nFrames*op, length(audio)) , : );
%Handle last audio sample.
if (length(audios) < op)
audios = [audios; audios(1:op - length(audios), :)];
end
step(videoFWriter,frame,audios);
end
release(videoFReader);
release(videoFWriter);
我正在网上搜索与Matlab兼容的免费x64音频编解码器,但找不到。
关于matlab - 无法创建音频压缩过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38835367/