FFmpeg/Avconv kann Untertitel nicht kopieren; Nicht unterstützter Codec?

Ich habe eine mp4-Datei mit diesen Streams ( avconv -i file.mp4oder ffmpeg -i file.mp4):

Stream #0.0(eng): Audio: aac, 48000 Hz, stereo, fltp, 125 kb/s (default)
Stream #0.1(eng): Audio: ac3, 48000 Hz, 5.1, fltp, 384 kb/s
Stream #0.2(eng): Video: h264 (Main), yuv420p, 1280x568, 4027 kb/s, PAR 1:1 DAR 160:71, 23.98 fps, 2997 tbn, 50 tbc (default)
Stream #0.3(eng): Subtitle: c608 / 0x38303663, 0 kb/s
Stream #0.4(und): Subtitle: text / 0x74786574
Stream #0.5: Video: mjpeg, yuvj420p, 667x1000 [PAR 72:72 DAR 667:1000], 90k tbn

Ich versuche, den ersten Audiostream wie folgt aus der Datei zu entfernen:

avconv -i file.mp4 -map 0 -map -0:0 -codec copy file-out.mp4

# OR #

ffmpeg -i file.mp4 -map 0 -map -0:0 -codec copy file-out.mp4

Das Problem ist, ich bekomme diesen Fehler:

Could not write header for output file #0 (incorrect codec parameters ?): Operation not permitted

Also habe ich überprüft, ob etwas mit der mp4-Datei selbst nicht stimmt:

avprobe file.mp4

# OR #

ffprobe file.mp4

Und die Ausgabe sagt:

Unsupported codec with id 0 for input stream 3
Unsupported codec with id 94213 for input stream 4

Ich habe keine Ahnung was das heißt. (Anscheinend stimmt etwas mit den Untertiteln nicht, aber ich habe das Video von iTunes.)

  1. Was ist falsch?

  2. Kann ich avconv/ffmpeg einfach dazu zwingen, das zu tun, was ich von ihm verlangt habe (dh den Audiostream entfernen und den Rest so kopieren, wie er ist)? Wenn das so ist, wie?

  3. Gibt es eine bessere Alternative zum Remuxen, die über die Befehlszeile und aktiv entwickelt wird?


Anscheinend habe ich die anderen Fehler/Warnungen in der Konsolenausgabe vor der endgültigen Fehlermeldung übersehen, wie @aergistal vorgeschlagen hat:

[mp4 @ 0x2645420] Codec for stream 0 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] Codec for stream 1 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] Codec for stream 2 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] Codec for stream 3 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] Codec for stream 4 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] track 2: could not find tag, codec not currently supported in container
Das Fehlen globaler Header ist für Ihr Muxing-Problem nicht relevant.
Diese Frage wurde gepostet (davon wird abgeraten).

Antworten (1)

Der vierte Strom ist offensichtlich ein CEA-608- Untertitelstrom, der während der Tage der analogen Fernsehsignalübertragung Untertiteldaten waren, die in die Videodaten eingebettet waren . Anscheinend kann FFmpeg es extrahieren, aber nicht in einen neuen Container muxen .

Um nur das Audio zu entfernen, kann MP4Box hilfreich sein.

Basierend auf Ihrer Antwort und Ihrem Kommentar wird ffmpegderzeit nicht unterstützt, das zu tun, worum ich gebeten habe, und wenn das Ticket gepatcht ist, kann dies in Zukunft der Fall sein. Keine Möglichkeit, ffmpeg zu zwingen, es richtig zu machen?
Es kann einen Umweg geben: Muxen Sie nur die AC3- und H264-Streams in einen neuen Container. Versuchen Sie, die Beschriftung in eine SRT zu extrahieren, z. B. ffmpeg -i file.mp4 -c:s copy file-out.srt. Wenn dies funktioniert, muxen Sie die SRT zusammen mit den Streams aus dem neuen Container in einen endgültigen Container.
Ich habe gerade die 2 Untertitel-Streams als separate srt-Dateien extrahiert und der Befehl wurde ohne Probleme erfolgreich ausgeführt. Aber wenn ich sie in Notepad ++ öffne, sehe ich Folgendes: i.imgur.com/j1MKW8n.png - Irgendeine Idee warum? Ich habe zuvor srt-Dateien geöffnet und sie sollen normalen Text anzeigen.
Weil es sich nur um CEA608-Rohdaten handelt, die in die von Ihnen angegebene Ausgabe ausgegeben werden. CCExtractor sollte in der Lage sein, daraus gültige SRTs zu erstellen.