无法创建音频压缩器过滤器

Unable to create audio compressor filter

函数将一个字符串作为输入,即视频的名称。它使用 vision.VideoFileReader 函数读取视频,并使用 vision.VideoFileWriter 函数读取同一视频 returns。输出视频都有音频的输入视频。处理一个大约 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 MJPEGDV Video Encoder 值,但出现此错误:

Error using VideoFileWriter / step
Unable to create audio compressor filter

Error in showMovie (line 15)

step (videoFWriter, frame, audios);

您正在尝试为音频指定 video 压缩器,这导致了错误。不同的压缩算法用于音频和视频组件。您需要指定一个有效的 audio 压缩器。

要获取您机器上可用选项的列表,您可以在命令 window:

中使用制表符完成
videoWriter.AudioCompressor = ' % <tab> key

正如 Rotem 所指出的,此列表可以 包括视频压缩算法,但它还应该包括您安装了正确编解码器的任何有效音频压缩算法。

我的系统中唯一可用的 AudioCompressor 压缩器是:'None (uncompressed)'
我在 64 位版本的 Matlab (R2014b) 上试过了。
原因是我的 Windows 系统缺少 Matlab 支持的 x64(64 位)音频编解码器。
注意:64 位 Matlab 需要 x64 编解码器,32 位 Matlab 需要 x86 编解码器。

当我像 Suever 提到的那样使用 videoWriter.AudioCompressor = ' % <tab> key 时,

当我使用 32 位版本的 Matlab (R2013b) 尝试相同的代码时,我得到以下列表:

  • AC-3 ACM 编解码器
  • AC-3 ACM 可扩展
  • CCITT A 法
  • CCITT U-Law
  • GSM 6.10
  • IMA ADPCM
  • 微软 ADPCM
  • None(未压缩)

注意: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 音频编解码器,但找不到。