2016-08-08 107 views
0

Die Funktion nimmt als Eingabe eine Zeichenfolge, den Namen des Videos, an. Es wird das Video mit der -Funktion gelesen und gibt das gleiche Video mit der vision.VideoFileWriter-Funktion zurück. Sowohl das Eingangsvideo als auch die Ausgangsvideos haben Audio. Verarbeitung eines Videos über 6 MB, ich habe die Ausgabe eines Videos mehr als 1 GB. Die Funktion hat keine Fehler, aber ich muss komprimieren. Mit der , kann das Video bis zu 350 MB komprimieren, würde ich die AudioCompressor verwenden, aber durch einen Fehler zu erhalten. Dies ist mein Code, der folgende Fehler wird zurückgegeben.Audiokomprimierungsfilter kann nicht erstellt werden

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 

Ich kann die Eigenschaft AudioCompressor nicht verwenden. Ich habe versucht, sowohl die Compressor MJPEG und die DV Video Encoder Wert, aber ich bekomme diese Fehlermeldung:

Error using VideoFileWriter/step 
Unable to create audio compressor filter 

Error in showMovie (line 15) 

step (videoFWriter, frame, audios); 
+0

Sie versuchen, einen * video * Kompressor für Ihr Audio anzugeben. Sie müssen einen gültigen * audio * Kompressor verwenden. Sie können die Registerkarte completion 'videoWriter.AudioCompressor = ' Suever

Antwort

-2

Der einzige AudioCompressor-Kompressor, der in meinem System funktioniert, ist: 'Keine (unkomprimiert)'
Ich habe es auf 64-Bit-Version von Matlab (R2014b) versucht.
Der Grund dafür ist, dass meinem Windows-System x64 (64 Bit) Audio-Codec fehlt, der von Matlab unterstützt wird.
Hinweis: 64-Bit-Matlab benötigt x64-Codecs und 32-Bit-Matlab benötigt x86-Codecs.

Wenn ich videoWriter.AudioCompressor = ' % <tab> key als Suever erwähnt,

enter image description here

Wenn ich den gleichen Code versucht, 32-Bit-Version von Matlab (R2013b) verwendet wird, ich die folgende Liste bekam:

  • AC-3 ACM-Codec
  • AC-3 ACM erweiterbar
  • CCITT A-Law
  • CCITT U-Law
  • GSM 6.10
  • IMA ADPCM
  • Microsoft ADPCM
  • None (unkomprimierten)

Hinweis: Die Video-Codecs in 64 Bit dargestellt Version, werden nicht im 32-Bit-Matlab angezeigt.
Ich denke, Anzeige von Video-Codecs in AudioCompressor ist ein Matlab-Bug.

Nur für den Rekord, versuchte ich die <tab> key bevor Sueder seine Antwort aufstellte.
Ich las darüber in Matlab Dokumentation: 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

Das folgende Codebeispiel funktioniert im System:

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); 

ich die Web kostenlos x64-Audio-Codec zu suchen, die mit Matlab funktioniert, aber Ich konnte keinen finden.

+0

Wie ist diese Antwort anders als die Antwort, die ich zur Verfügung gestellt habe? Dies ist wirklich besser geeignet als Kommentar zu meiner Antwort. – Suever

+0

Zumindest funktioniert meine Antwort ... Ich denke, du hast nicht genug Aufmerksamkeit geschenkt, bevor du antwortest. Das Hauptproblem hier ist, dass Matlab sowohl Audio- als auch Video-Codecs zeigt, während der "Tab-Trick" verwendet wird, und kein Audio-Codec verfügbar ist. Ich habe mein Codebeispiel getestet, während du deine Antwort gepostet hast ... warum schreibst du nicht meine? – Rotem

+0

Es bietet immer noch keine Lösung. Er will keine Kompression. – Suever

0

Sie versuchen, einen Video Kompressor für Ihr Audio zu spezifizieren, die in dem Fehler führen. Für die Audio- und Videokomponenten werden unterschiedliche Komprimierungsalgorithmen verwendet. Sie müssen einen gültigen Audio Kompressor angeben.

, um eine Liste der verfügbaren Optionen auf Ihrem Computer erhalten Sie Tabulatorvervollständigung im Befehlsfenster verwenden können:

videoWriter.AudioCompressor = ' % <tab> key 

Wie Rotum bemerkt hat, kann diese Liste auch Video-Kompressionsalgorithmen umfassen, aber es sollte auch alle gültigen Audiokomprimierungsalgorithmen enthalten, für die Sie die richtigen Codecs installiert haben.

+0

Danke für die Antworten. Wenn ich 'videoWriter.Audio verwenden compressor = '% Schlüssel' öffnet das folgende Menü, das gleiche wie Rotem. Ich muss einen Audio-Codec installieren und in Matlab verwenden? Was kann ich installieren? –