Как разделить видео на части аудио / видео / текст в одной команде?

#audio #video #ffmpeg

#Аудио #Видео #ffmpeg

Вопрос:

У меня есть один видеофайл .mkv . Внутри этого файла есть видеодорожка, 3 аудиодорожки, 2 субтитра, файл постера и файл фона. Знает ли ffmpeg, как разделить .mkv на отдельные части, видео / 3 аудио / 2 субтитра?

 ~# ffmpeg -hide_banner -i input.mkv
Input #0, matroska,webm, from 'input.mkv':
  Duration: 01:37:03.90, start: 0.000000, bitrate: 3605 kb/s
    Metadata:
      title           : 01:33:51.582
    Stream #0:0(eng): Video: h264 (High), yuv420p(tv, bt709, progressive), 1024x576 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
    Metadata:
      title           : Video
    Stream #0:1(rus): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s (default)
    Metadata:
      title           : MVO «West Video»
    Stream #0:2(spa): Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s
    Metadata:
      title           : MVO Spain-1
    Stream #0:3(eng): Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s
    Metadata:
      title           : MVO TRK
    Stream #0:4(eng): Subtitle: subrip (default)
    Metadata:
      title           : RUS
    Stream #0:5(eng): Subtitle: subrip
    Metadata:
      title           : Eng
    Stream #0:6(und): Video: mjpeg (Progressive), yuvj420p(pc, bt470bg/unknown/unknown), 780x1170 [SAR 1:1 DAR 2:3], 90k tbr, 90k tbn, 90k tbc (attached pic)
    Metadata:
      filename        : poster.jpg
      mimetype        : image/jpeg
      title           : poster
      LANGUAGE        : und
    Stream #0:7(und): Video: mjpeg (Progressive), yuvj420p(pc, bt470bg/unknown/unknown), 1280x719 [SAR 1:1 DAR 1280:719], 90k tbr, 90k tbn, 90k tbc (attached pic)
    Metadata:
      filename        : backdrop.jpg
      mimetype        : image/jpeg
      title           : backdrop
      LANGUAGE        : und
 

Мне нужно:

  • Видео
    • ввод0.mp4
  • Аудио
    • ввод0.m4a
    • вход1.m4a
    • ввод2.m4a
  • Субтитры
    • input0.vtt
    • вход1.vtt

Эти команды выполняют разделение, но мне нужно точно знать, сколько аудиофайлов и сколько файлов субтитров в mkv .

 ffmpeg -y -i input.mkv 
  -map 0:v:0 -c:v libx264 output0.mp4
 
 ffmpeg -y -i input.mkv 
  -map 0:a:0 -c:a aac output0.m4a 
  -map 0:a:1 -c:a aac output1.m4a 
  -map 0:a:2 -c:a aac output2.m4a
 
 ffmpeg -y -i input.mkv 
  -map 0:s:0 output0.vtt 
  -map 0:s:1 output1.vtt
 

Можно ли сделать такие разделения , не зная номера файла 0:a:2 , 0:s:1 ?

Комментарии:

1. Такой автоматической встроенной функции нет. Но смотрите , как ffprobe подсчитывает видео- и аудиопотоки / дорожки , которые могут быть полезны.