Как не добавлять AdaptationSet для аудио в cmd-файл, если аудиопоток отсутствует во входном видеофайле - PullRequest
0 голосов
/ 13 июня 2019

Я использую ffmpeg-dash для создания файлов mpd.Я использую следующую команду, чтобы сгенерировать то же самое:

ffmpeg -i input/video.mov \
        -map 0:v:0 -map 0:v:0 -map 0:v:0 -map 0:a\?:0 \
        -b:v:0 350k -c:v:0 libx264 -filter:v:0 "scale=320:-1" \
        -b:v:1 1000k -c:v:1 libx264 -filter:v:1 "scale=640:-1" \
        -b:v:2 3000k -c:v:2 libx264 -filter:v:2 "scale=1280:-1" \
        -use_timeline 1 -use_template 1 -window_size 6  -adaptation_sets "id=0,streams=v id=1,streams=a"  \
        -seg_duration 2 -threads 16 -hls_playlist true -f dash output/ffmpeg/output.mpd

Это работает с видео, которое имеет аудиопотоки, но для случая, когда в видеофайле нет аудиопотока, я получаю пустую запись для аудио в mpdфайлы, подобные следующим, что недопустимо и завершается ошибкой при воспроизведении в Exo Player на Android.

<AdaptationSet id="1" contentType="audio" segmentAlignment="true" bitstreamSwitching="true">
</AdaptationSet>

Я попытался добавить ? в опцию adapting_sets, например: id=0,streams=v id=1,streams=a?, однако это также добавляет строку выше.

Одно из решений состоит в том, чтобы запускать разные команды для разных видео, сначала проверяя, есть ли аудиопоток или нет, но было бы лучше, если бы была какая-либо опция, добавляющая аудиоадаптирование. Устанавливается, только если во входном файле присутствует аудиопоток.

...