Ignore la transmisión no admitida al convertir un archivo avi a un archivo mkv usando ffmpeg


0

La pregunta Remux a MKV pero agregar todas las transmisiones usando FFmpeg explica cómo muxear todas las transmisiones a un archivo MKV.

Sin embargo, esto falla cuando FFMPEG no admite la transmisión.

Por ejemplo, usando el comando en un archivo avi con 2 transmisiones de video + una transmisión de subtítulos:

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

dar el siguiente resultado:

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.

¿Hay alguna manera de ignorar las secuencias no compatibles?


Debe obtener una compilación reciente de git master compilando o simplemente usando una compilación estática . Si el problema persiste, informe un error ; incluya su comando, la salida completa de la consola y un archivo de entrada de muestra.
— llogan

Como el código de github.com/FFmpeg/FFmpeg/blob/master/libavformat/avidec.c no cambió, el resultado será probablemente el mismo. ¿Los errores de ffmpeg están informando el seguimiento del pensamiento? no es problema de github?
— mpromonet

Sí, el resultado puede ser el mismo, pero es necesario probar una compilación actual porque el desarrollo es muy activo. Los errores se deben informar a través de trac. FFmpeg no usa Github para el desarrollo (es solo un espejo para la fuente; aunque algunos usuarios envían erróneamente parches / solicitudes de extracción a través de él).
— llogan

Respuestas:


1

La depuración de ffmpeg muestra que el archivo avi contiene una secuencia de subtítulos que tiene un encabezado de formato de secuencia de AVI vacío.

En tal situación, el método avi_read_header no establece st-> codec-> codec_type

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

A continuación, open_output_file imprime el registro y sale sin condición.

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      }

Luego, admitir el archivo AVI con un encabezado de formato de flujo vacío necesita modificar ffmpeg.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.