Вопрос Remux to MKV, но добавление всех потоков с помощью FFmpeg объясняет, как объединить все потоки в файл MKV.

Однако это не удается, если поток не был поддержан FFMPEG.

Например, используя команду для файлов AVI с 2 видеопотоками + потоком субтитров:

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

дать следующий вывод:

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.

Есть ли способ игнорировать неподдерживаемые потоки?

1 ответ1

1

Отладка ffmpeg показывает, что файл avi содержит поток субтитров с пустым заголовком формата потока AVI.

В такой ситуации avi_read_header метод оленьей кожи установить ST-> codec-> codec_type

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

Далее open_output_file распечатать журнал и выйти без условий.

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      }

Затем, поддерживая файл AVI с пустым заголовком формата потока, необходимо изменить ffmpeg.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .