Saltar al contenido

Extraiga todos los audios y subtítulos de un video con ffmpeg

este problema se puede tratar de diversas formas, pero en este caso te enseñamos la respuesta más completa en nuestra opinión.

Solución:

Todavía no hay opción en ffmpeg para extraer automáticamente todos los flujos en un contenedor apropiado, pero ciertamente es posible hacerlo manualmente.

Solo necesita conocer los contenedores adecuados para los formatos que desea extraer.

La selección de transmisión predeterminada solo elige una transmisión por tipo de transmisión, por lo que debe asignar manualmente cada transmisión con el -map opción.

1. Obtener información de entrada

Utilizando ffmpeg o ffprobe puede obtener la información en cada flujo individual, y hay una amplia variedad de formatos (xml, json, cvs, etc.) disponibles para satisfacer sus necesidades.

ffmpeg ejemplo

ffmpeg -i input.mkv

La salida resultante (corté algunas cosas adicionales, los números de transmisión y la información de formato son lo que es importante):

Input #0, matroska,webm, from 'input.mkv':
  Metadata:
  Duration: 00:00:05.00, start: 0.000000, bitrate: 106 kb/s
    Stream #0:0: Video: h264 (High 4:4:4 Predictive), yuv444p, 320x240 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 1k tbn, 50 tbc (default)
    Stream #0:1: Audio: vorbis, 44100 Hz, mono, fltp (default)
    Stream #0:2: Audio: aac, 44100 Hz, mono, fltp (default)
    Stream #0:3: Audio: flac, 44100 Hz, mono, fltp (default)
    Stream #0:4: Subtitle: ass (default)

ffprobe ejemplo

ffprobe -v error -show_entries stream=index,codec_name,codec_type input.mkv

La salida resultante:

[STREAM]
index=0
codec_name=h264
codec_type=video
[/STREAM]
[STREAM]
index=1
codec_name=vorbis
codec_type=audio
[/STREAM]
[STREAM]
index=2
codec_name=aac
codec_type=audio
[/STREAM]
[STREAM]
index=3
codec_name=flac
codec_type=audio
[/STREAM]
[STREAM]
index=4
codec_name=ass
codec_type=subtitle
[/STREAM]

2. Extrae las corrientes

Usando la información de uno de los comandos anteriores:

ffmpeg -i input.mkv 
-map 0:v -c copy video_h264.mkv 
-map 0:a:0 -c copy audio0_vorbis.oga 
-map 0:a:1 -c copy audio1_aac.m4a 
-map 0:a:2 -c copy audio2.flac 
-map 0:s -c copy subtitles.ass

En este caso, el ejemplo anterior es el mismo que:

ffmpeg -i input.mkv 
-map 0:0 -c copy video_h264.mkv 
-map 0:1 -c copy audio0_vorbis.oga 
-map 0:2 -c copy audio1_aac.m4a 
-map 0:3 -c copy audio2.flac 
-map 0:4 -c copy subtitles.ass
  • Prefiero el primer ejemplo porque el input file index:stream specifier:stream index es más flexible y eficiente; también es menos propenso a mapeos incorrectos.

  • Consulte la documentación sobre especificadores de flujo y -map opción para comprender completamente la sintaxis. La información adicional está en la respuesta al video y audio de FFmpeg mux (de otro video): problema de mapeo.

  • Estos ejemplos transmitirán copia (re-mux) por lo que no ocurrirá una recodificación.

Formatos de contenedor

Una lista parcial para hacer coincidir la transmisión con la extensión de salida para algunos formatos comunes:

Video Format         Compatible extension(s)
H.264                .mp4, .m4v, .h264, .264
H.265/HEVC           .mp4, .h265, .265
VP8/VP9              .webm
AV1                  .mp4
MPEG-4               .mp4, .avi
MPEG-2               .mpg, .vob, .ts
DV                   .dv, .avi
Theora               .ogv/.ogg
FFV1                 .mkv
Almost anything      .mkv, .nut

Audio Format         Compatible extension(s)
AAC                  .m4a, .aac
MP3                  .mp3
PCM                  .wav
vorbis               .oga/.ogg
opus                 .opus, .oga/.ogg, .mp4
flac                 .flac, .oga/.ogg
Almost anything      .mka, .nut

Subtitle Format      Compatible extension(s)
Subrip/SRT           .srt
SubStation Alpha/ASS .ass

Primero enumeraría todas las transmisiones de audio:

ffmpeg -i VIDEO.mkv

y luego, según la salida, puede compilar el comando para extraer las pistas de audio individualmente.

Usando algún script de shell, puede potencialmente automatizar esto en un archivo de script para que pueda hacerlo de forma genérica para cualquier archivo mkv.

Los subtítulos son prácticamente iguales. Los subtítulos se imprimirán en la información y luego podrás extraerlos, similar a:

ffmpeg -threads 4 -i VIDEO.mkv -vn -an -codec:s:0.2 srt myLangSubtitle.srt

0.2 es el identificador que debe leer de la información.

Sección de Reseñas y Valoraciones

Si te sientes impulsado, eres capaz de dejar una división acerca de qué te ha gustado de este tutorial.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *