Verwenden Sie amerge
dann 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 .
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 amerge
Filter 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 amix
Filter 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 ffprobe
fü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
Verwenden Sie amerge
dann 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 .
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.