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

标签 matlab audio compression video-processing

函数将视频名称作为字符串输入。它使用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 MJPEGDV 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用作时,提到的
enter image description here
当我使用32位版本的Matlab(R2013b)尝试相同的代码时,得到以下列表:

  • AC-3 ACM编解码器
  • AC-3 ACM可扩展
  • CCITT A-法律
  • CCITT U-法律
  • GSM 6.10
  • IMA ADPCM
  • Microsoft ADPCM
  • 无(未压缩)

  • 注意: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/

    相关文章:

    javascript html5元素删除

    python - 使用 python,如何压缩长查询字符串值?

    android - 首选项-使用媒体文件,图像

    MATLAB 重载加运算符

    matlab - 如何增加 MATLAB 2014b 散点图中图例的标记大小?

    matlab - .asv 文件在 matlab 中

    audio - 更改 Flash Player 音频输出设备

    java - 不使用 ZipFile 随机访问压缩文件(因为 ZipFile 有一个重大错误)

    java - 用于 Java 或替代二进制差异格式的 VCDIFF

    matlab - 在MATLAB中显示文本文档