Ignorieren Sie nicht unterstützten Stream, wenn Sie eine AVI-Datei mit ffmpeg in eine MKV-Datei konvertieren

0

Die Frage Remux zu MKV, aber alle Streams mit FFmpeg hinzufügen erklärt, wie alle Streams zu einer MKV-Datei gemuxt werden.

Dies schlägt jedoch fehl, wenn ein Stream von FFMPEG nicht unterstützt wurde.

Verwenden Sie zum Beispiel den Befehl für eine AVI-Datei mit 2 Videostreams und einem Untertitel-Stream:

ffmpeg -y -i filename.avi -map 0 -c copy filename.mkv

Geben Sie die folgende Ausgabe aus:

ffmpeg version 2.3.1 Copyright (c) 2000-2014 the FFmpeg developers
  built on Aug  6 2014 13:32:20 with gcc 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)
  configuration: --enable-static --disable-shared --disable-asm --disable-doc --disable-devices --disable-network --disable-bsfs --disable-protocols --enable-protocol=file --disable-filters --disable-yasm --enable-pic --disable-iconv
  libavutil      52. 92.100 / 52. 92.100
  libavcodec     55. 69.100 / 55. 69.100
  libavformat    55. 48.100 / 55. 48.100
  libavdevice    55. 13.102 / 55. 13.102
  libavfilter     4. 11.100 /  4. 11.100
  libswscale      2.  6.100 /  2.  6.100
  libswresample   0. 19.100 /  0. 19.100
[avi @ 0x2dd8760] non-interleaved AVI
[avi @ 0x2dd8760] Could not find codec parameters for stream 2 (Unknown: none): unknown codec
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, avi, from 'filename.avi':
  Duration: 00:01:01.00, start: 0.000000, bitrate: 4285 kb/s
    Stream #0:0: Video: h264 (Constrained Baseline) (H264 / 0x34363248), yuv420p, 720x576, 2140 kb/s, 25.52 fps, 25.50 tbr, 25.52 tbn, 50 tbc
    Metadata:
      title           : sim0_video_H264_0_
    Stream #0:1: Video: h264 (Constrained Baseline) (H264 / 0x34363248), yuv420p, 720x576, 2140 kb/s, 25.52 fps, 25.50 tbr, 25.52 tbn, 50 tbc
    Metadata:
      title           : sim2_video_H264_0_
    Stream #0:2: Unknown: none
Cannot map stream #0:2 - unsupported type.

Gibt es eine Möglichkeit, nicht unterstützte Streams zu ignorieren?

mpromonet
quelle
Sie sollten einen aktuellen Build von git master erhalten, indem Sie entweder kompilieren oder einfach einen statischen Build verwenden . Wenn das Problem weiterhin besteht, melden Sie bitte einen Fehler . Fügen Sie Ihren Befehl, die vollständige Konsolenausgabe und eine Beispieleingabedatei hinzu.
Logan
Da sich der Code von github.com/FFmpeg/FFmpeg/blob/master/libavformat/avidec.c nicht geändert hat, wird das Ergebnis wahrscheinlich dasselbe sein. Die Bugs von ffmpeg melden Gedankenverfolgung? nicht Github Problem?
mpromonet
Ja, das Ergebnis ist möglicherweise dasselbe, aber es ist erforderlich, einen aktuellen Build zu testen, da die Entwicklung so aktiv ist. Bugs sollten per Trac gemeldet werden. FFmpeg verwendet Github nicht für die Entwicklung (es ist nur ein Spiegel für die Quelle, obwohl einige Benutzer fälschlicherweise Patches / Pull-Anforderungen übermitteln).
Logan

Antworten:

1

Das Debuggen von ffmpeg zeigt, dass die AVI-Datei einen Untertitel-Stream enthält, der einen leeren Header im AVI-Stream-Format hat.

In einer solchen Situation setzt die Methode avi_read_header nicht st-> codec-> codec_type

698      case MKTAG('s', 't', 'r', 'f'):
699          /* stream header */
700          if (!size)
701              break;

Weiter open_output_file druckt das Protokoll und beendet es ohne Bedingung.

1939      switch (ist->st->codec->codec_type) {
1940          case AVMEDIA_TYPE_VIDEO: ost = new_video_stream (o, oc, src_idx); break;
1941          case AVMEDIA_TYPE_AUDIO: ost = new_audio_stream (o, oc, src_idx); break;
1942          case AVMEDIA_TYPE_SUBTITLE: ost = new_subtitle_stream (o, oc, src_idx); break;
1943          case AVMEDIA_TYPE_DATA: ost = new_data_stream (o, oc, src_idx); break;
1944          case AVMEDIA_TYPE_ATTACHMENT: ost = new_attachment_stream(o, oc, src_idx); break;
1945          default:
1946              av_log(NULL, AV_LOG_FATAL, "Cannot map stream #%d:%d - unsupported type.\n",
1947                      map->file_index, map->stream_index);
1948              exit_program(1);
1949      }

Wenn Sie eine AVI-Datei mit einem leeren Stream-Format-Header unterstützen, müssen Sie ffmpeg ändern.

mpromonet
quelle