LINUX.ORG.RU

Как заставить ffmpeg искать дорожку принудительно

 , ,


0

1

Если ffmpeg не нашел audio дорожку из INPUT, не начинать кодирование и продолжать\анализировать входной поток. Заголовок FLV сначала cодержит только video, потом прилетает новый заголовок где есть audio, но ffmpeg начинает кодировать сразу же ТОЛЬКО видео. Как быть?

Input #0, flv, from 'rtmp://127.0.0.1:1935/live/stream':
  Metadata:
    |RtmpSampleAccess: true
  Duration: N/A, start: 2816209.627000, bitrate: N/A
  Stream #0:0: Data: none
  Stream #0:1: Video: h264 (Constrained Baseline), yuv420p(progressive), 320x240, 7.50 fps, 7.50 tbr, 1k tbn, start 2816209.627000


Спустя некоторое время цепляется AUDIO
  Stream #0:0: Video: h264 ([7][0][0][0] / 0x0007), yuv420p(tv, bt709, progressive), 360x202 [SAR 404:405 DAR 16:9], q=2-31, 128 kb/s, 20 fps, 1k tbn
    Metadata:
      encoder         : Lavc62.15.100 libx264
    Side data:
      CPB properties: bitrate max/min/avg: 0/0/128000 buffer size: 0 vbv_delay: N/A
  Stream #0:1: Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz, stereo, fltp, 48 kb/s
    Metadata:
      encoder         : Lavc62.15.100 aac


Если ко выходу добавить

-map a:0 -map v:0

то если нет аудио, ffmpeg завершается с ошибкой, повторный запуск ffmpegс этими параметрами (когда в стриме уже есть audio) — идет нормальная кодировка. Как бы заставить его ждать пока придет аудио, а не завершать работу?

★★★★

Последнее исправление: gobot (всего исправлений: 2)
Ответ на: комментарий от skyman

Нет, там живой поток, нужно все чтобы на лету конвертировалось и сразу

Подшаманил вроде

-map 0:v -map 0:a


пока не знаю насколько это правильно, но ffmpeg валится с ошибкой

Stream map '' matches no streams.
To ignore this, add a trailing '?' to the map.
Failed to set value '0:a' for option 'map': Invalid argument


второй запуск с этими же параметрами (когда уже video дорожка есть в потоке) - норм запуск

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot
   -max_muxing_queue_size packets (output,per-stream)
       When transcoding audio and/or video streams, ffmpeg will not begin
       writing into the output until it has one packet for each such
       stream. While waiting for that to happen, packets for other streams
       are buffered. This option sets the size of this buffer, in packets,
       for the matching output stream.

       The default value of this option should be high enough for most
       uses, so only touch this option if you are sure that you need it.

   -muxing_queue_data_threshold bytes (output,per-stream)
       This is a minimum threshold until which the muxing queue size is
       not taken into account. Defaults to 50 megabytes per stream, and is
       based on the overall size of packets passed to the muxer.
anonymous
()

Напомню, что консольный ffmpeg изначально делался как демка к возможностям библиотеки (libavformat, libavcodec итд). Ты можешь написать прогу с использованием этих библиотек и вписать туда любую логику работы.

firkax ★★★★★
()