Befehlszeilenmethode, um ein Multichannelaudio .Mov in ein Einkanalaudio .Mov?

424
M. Scott Ford

Einschränkung: Ich bin mit Audio-Codecs und -Terminologie nicht sehr vertraut, daher kann es sein, dass ich nicht die richtigen Wörter verwende, um zu beschreiben, was ich tun möchte. Ich habe versucht, das klar zu stellen.

Ich verwende den Call Recorder von ecamm für Skype . Es zeichnet in einer QuickTime MOV-Datei mit zwei Audioströmen auf. Eines ist das vom Mikrofon aufgenommene Audio und das andere ist das von den Lautsprechern aufgenommene Audio. Sie stellen ein Tool namens "Convert to Internet" bereit, das sie zusammen mit ihrer Movie Tools- Distribution liefern .

Ich habe jede Woche ein Meeting, das ich aufgenommen habe, und ich suche nach einem Weg, den Prozess des "Reduzierens" dieser Audioströme in einen einzigen Stream zu automatisieren, damit ich ihn mit anderen teilen kann. Die Anwendung "In Internet konvertieren" unterstützt nur das Konvertieren einer einzelnen Datei zu einem Zeitpunkt. Eine GUI-App kann per Drag-and-Drop in das Hauptfenster der App gezogen werden.

Ich möchte einen Weg finden, um das gleiche Endergebnis zu erreichen, das "Convert to Internet" -Anwendung erhält, aber durch die Verwendung von etwas, das ich auf der Kommandozeile ausführte (vorzugsweise aus einer Linux-Box, die ich für die Ausführung der Aufgabe aktivieren kann) dann nach unten drehen).

Ich denke, dass das Produkthandbuch den Prozess, der passieren muss, ziemlich gut erklärt. Für den Fall, dass mein Wandern hier nicht so klar ist.

Ich habe mich in die Dokumentation für FFmpeg eingemischt, was meiner Meinung nach der beste Kandidat dafür ist. Ich habe den amergeFilter gefunden, aber die Dokumente lassen es so aussehen, als würde es mir nur einen einzigen Audiostream mit 4 Kanälen geben (links und rechts vom ersten Stream und links und rechts vom zweiten Stream). Da dies nicht das ist, was ich will, habe ich mir den amixFilter angesehen, aber das scheint mit Streams aus verschiedenen Eingabedateien und nicht mit mehreren Streams aus einer einzigen Datei zu arbeiten.

Jede Hilfe, die in die richtige Richtung weist, wird sehr geschätzt.

Bearbeiten:

Ich dachte, die Ausgabe ffprobefür die Datei, mit der ich arbeite, könnte ebenfalls nützlich sein.

$ ffprobe input.mov ffprobe version 2.8.3 Copyright (c) 2007-2015 the FFmpeg developers built with Apple LLVM version 7.0.0 (clang-700.1.76) configuration: --prefix=/usr/local/Cellar/ffmpeg/2.8.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda libavutil 54. 31.100 / 54. 31.100 libavcodec 56. 60.100 / 56. 60.100 libavformat 56. 40.101 / 56. 40.101 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 40.101 / 5. 40.101 libavresample 2. 1. 0 / 2. 1. 0 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 2.101 / 1. 2.101 libpostproc 53. 3.100 / 53. 3.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mov': Metadata: major_brand : qt  minor_version : 537199360 compatible_brands: qt  creation_time : 2015-09-18 17:04:00 Duration: 01:07:51.64, start: 0.000000, bitrate: 1503 kb/s Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 43 kb/s (default) Metadata: creation_time : 2015-09-18 17:04:00 handler_name : Apple Alias Data Handler Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 63 kb/s (default) Metadata: creation_time : 2015-09-18 17:04:00 handler_name : Apple Alias Data Handler Stream #0:2(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 1381 kb/s, SAR 1:1 DAR 16:9, 19.63 fps, 14.42 tbr, 1k tbn, 50 tbc (default) Metadata: creation_time : 2015-09-18 17:04:00 handler_name : Apple Alias Data Handler encoder : H.264 
2

2 Antworten auf die Frage

2
LordNeckbeard

Verwenden Sie amergedann Downmix es mit -ac:

ffmpeg -i input -filter_complex "[0:a:0][0:a:1]amerge=inputs=2[a]" \ -map 0:v -map "[a]" -c:v copy -ac 1 output 

Siehe auch FFmpeg Wiki: Audiokanalmanipulation .

Vielen Dank! Ungefähr eine Stunde nachdem ich diese Frage gepostet hatte, spielte ich weiter mit amix und ich habe es zum Laufen gebracht (und ich werde es als eine andere Antwort posten). Aber ich entschied mich dafür, Ihnen zu versuchen, herauszufinden, welcher Ansatz überlegen war. Ihre lief viel schneller (etwa eine Minute), aber die Ausgabedatei war größer als das Original. Mit einer 730M-Eingabedatei habe ich eine 735M-Ausgabedatei erhalten. Mit der anderen habe ich eine 468M-Datei erhalten, die jedoch ungefähr 15 Minuten dauerte. M. Scott Ford vor 8 Jahren 0
Ah! Sieht so aus, als wäre der Grund für meinen Befehl die kleinere Datei, und die längere Laufzeit war, weil das Video neu codiert wurde, während Ihr Video nur eine Kopie erstellte. Kennzeichnen Sie Ihre als die richtige Antwort. Vielen Dank! M. Scott Ford vor 8 Jahren 0
@ M.ScottFord Nur der Videostream wird kopiert, und das Audio wird neu kodiert (Filterung erfordert Kodierung). Ich habe einige Annahmen bezüglich Ihrer Eingabe und des `ffmpeg`-Builds gemacht, da zu diesem Zeitpunkt noch keine Konsolenausgabe bereitgestellt wurde. libvo-aac ist scheiße, also sollten Sie `-c: a aac -strict -2` hinzufügen, um stattdessen den nativen AAC-Encoder zu verwenden, obwohl Ihr Build alt ist und keine aktuellen AAC-Updates enthält (Sie müssen einen Build verwenden.) von aktuellem git master, um dies zu nutzen: siehe [statische Builds] (http://evermeet.cx/ffmpeg/)). LordNeckbeard vor 8 Jahren 0
Ich erhalte eine Fehlermeldung: `Es wurde kein geeignetes Ausgabeformat für '-map' -map: Ungültiges Argument gefunden. ' Arthur vor 7 Jahren 0
@Arthur Bitte verwenden Sie eine Pastebin-Site, um Ihren aktuellen Befehl und die vollständige Ausgabe anzuzeigen. Dann geben Sie den Link in einem Kommentar an. LordNeckbeard vor 7 Jahren 0
0
M. Scott Ford

Nachdem ich herumgespielt und mehr gesucht hatte, kam mir der folgende Befehl, der zu funktionieren scheint.

ffmpeg -i input.mov -filter_complex "[0:0][0:1] amix=inputs=2[audio]" \ -map a output.mov 

Die Ausführung dauerte viel länger als die von LordNeckbeard veröffentlichte Antwort, führte jedoch zu einer kleineren Datei. Ich denke, ich muss jetzt entscheiden, welchen Wert ich mehr habe, Zeit oder (Speicher-) Platz.