FFmpeg nicht kopiert alle audio-streams
Ich bin mit Mühe ffmpeg kopieren Sie alle audio-streams von einem .mp4-Datei. Nach Stunden der online-Suche, es scheint, dass diese kopieren sollten alle streams (wie in Beispiel 4 hier):
ffmpeg -i in.mp4 -map 0 -c copy out.mp4
in.mp4
enthält 3 streams:
- Video
- Audio-track 1
- Audio track 2
out.mp4
(die sollten identisch sein, um in.mp4
) enthält nur 2 streams:
- Video
- Audio-track 1
FFmpeg scheint korrekt zu identifizieren alle 3 streams, aber nicht kopieren Sie alle von Ihnen über. Die Ausgabe von FFmpeg:
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Stream #0:2 -> #0:2 (copy)
Edit: Ausgabe von ffmpeg -v 9 -loglevel 99 -i in.mp4
:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from in.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.36.100
Duration: 00:00:06.03, start: 0.000000, bitrate: 5582 kb/s
Stream #0:0(und), 1, 1/15360: Video: h264 (Main), 1 reference frame (avc1 /
0x31637661), yuv420p(tv, bt470bg/unknown/unknown, left), 1920x1080 (0x0) [SAR 1:
1 DAR 16:9], 0/1, 5317 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und), 1, 1/48000: Audio: aac (LC) (mp4a /0x6134706D), 48000 Hz,
stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
Stream #0:2(und), 1, 1/48000: Audio: aac (LC) (mp4a /0x6134706D), 48000 Hz,
stereo, fltp, 128 kb/s
Metadata:
handler_name : SoundHandler
Successfully opened the file.
At least one output file must be specified
[AVIOContext @ 0000000001c2b9e0] Statistics: 153350 bytes read, 2 seeks
Edit 2 (gelöst): ich es geschafft, die richtige syntax von dieses ticket. Für alle anderen, die daran interessiert sind, die richtige syntax lautet:
ffmpeg -i in.mp4 -vcodec copy -c:a copy -map 0 out.mp4
Dies wird kopieren Sie alle Ströme.
- Welche version von ffmpeg verwenden Sie, auf welche Plattform? Die Ausgabe von
ffmpeg -v 9 -loglevel 99 -i in.mp4
wäre hilfreich, nach dem "Bug Reports" - Seite auf ffmpeg.org/bugreports.html. - Ich habe die Ausgabe von
ffmpeg -v 9 -loglevel 99 -i
. Plattform ist Windows. FFmpeg version istgit-0a9e781 (2016-06-10)
. - Relevant doc: trac.ffmpeg.org/wiki/Map#Example4
Du musst angemeldet sein, um einen Kommentar abzugeben.
FFmpeg haben die option zum anzeigen aller streams für die Ausgabe, verwenden Sie die option
-map 0
map alle streams von input zu output.In voller Linie, es könnte so Aussehen:
Weitere Infos finden Sie in der Dokumentation auf stream-Auswahl und die
-map
option.ffmpeg -i IN.mp4 -c copy -map 0:? OUT.mp4
-i in0.mp4 -i in1.aac
man hinzufügen müssen-map 0 -map 1
zu mux alle input-streams.-map 0:?
mit nur-map 0
.Offensichtlich ist dies eine beliebte Frage, also ich werde Entsendung meine Lösung als Antwort (war vorher eine Kommentar-Antwort), so dass andere sehen können.
Ich es geschafft, die richtige syntax aus dieser ticket. Die korrekte syntax ist:
Dies wird kopieren Sie alle 3-streams.
OK, ich lese ziemlich tief in die
ffmpeg
Mann Seite und fand diese, die nützlich sein sollten:ffmpeg -i input.mkv -filter_complex "[0:1] [0:2] amerge" -c:a pcm_s16le -c:v copy output.mkv
Möchten Sie vielleicht zu Lesen und Experimentieren mit der man-Seite Anweisungen auf
man ffmpeg-filters
zu verstehen, genau das, was Ebene der Komplexität, die Sie immer weiter in die für die Benennung von Kanälen und erwartete Ausgabe.[Edit: Wie Mulvya festgestellt, dass dieses eine Frage beantwortet, aber es war nicht ganz das original-poster der Frage.]
ffmpeg -i in.mp4 -vcodec copy -c:a copy -map 0:0 -map 0:1 -map 0:2 out.mp4
dies wird kopieren Sie alle 3-streams.stream mapping
code zeigt. Es ist ein Rätsel, warum es nicht, aber die separaten Strom-codec-syntax enthält. Kann die OP teilen sich die Ausgabe der Konsole für den original-copy-Befehl?Zuerst habe ich versucht, dieses umfassendere Antwort hier: https://stackoverflow.com/a/54616353/1422630
Aber ich hatte Probleme mit einer nicht unterstützten Untertitel-Spur, so dass ich am Ende mit, um diesen Befehl verwenden:
avconv -i INFILE -c copy -map 0:a -map 0:v OUTFILE
Ich verstehe, dass, nachdem ich fragte, zu kopieren, es ist im Grunde kopiert nur das, was ich abgebildet (und es wurden alle audio natürlich), wie ich kümmern sich nicht für die Untertitel, eingebettet zu sein in allen. Wenn Sie möchten anzeigen der Untertitel, fügen Sie einfach dieses
-map 0:s
.