Как игнорировать другие выходные потоки, если в ffmpeg произошел сбой? - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть входное видео. Я беру вход и кодирую видео, и кодирую все аудиоканалы в нем одной командой. Я получаю звук 5.1, а иногда и стереозвук (случайным образом один раз в день) с живого входа. Я использую следующую команду для кодирования всех потоков.

ffmpeg -i input.ts -c:v libx264 -c:a libfdk_aac -y output.m3u8 \
  -vn -map_channel 0.1.0 -c:a libfdk_aac -ac 1 -y channel1.m3u8 \
  -vn -map_channel 0.1.1 -c:a libfdk_aac -ac 1 -y channel2.m3u8 \
  -vn -map 0:2 -c:a libfdk_aac -ac 1 -y channel3.m3u8 \
  -vn -map_channel 0.2.0 -c:a libfdk_aac -ac 1 -y channel4.m3u8 \
  -vn -map_channel 0.2.1 -c:a libfdk_aac -ac 1 -y channel5.m3u8 \
  -vn -map 0:3 -c:a libfdk_aac -ac 1 -y channel6.m3u8 \
  -vn -map_channel 0.3.0 -c:a libfdk_aac -ac 1 -y channel7.m3u8 \
  -vn -map_channel 0.3.1 -c:a libfdk_aac -ac 1 -y channel8.m3u8 -v verbose

Иногда вся моя команда кодирования не работает из-за внезапного изменения формата звука (с 5.1 на стерео) в течение определенного часа. Я не хочу, чтобы моя команда кодирования была остановлена, мне нужен основной видеовыход.m3u8 (видеофайл), однако расположение аудио есть. Могу ли я игнорировать другие кодировки, используя какие-либо параметры, если они потерпели неудачу? Я видел опцию onfail в документации ffmpeg. Я пытался использовать это в моей команде, но мне не удалось. Ниже приведена команда, которую я использовал.

ffmpeg -i input.ts -c:v libx264 -c:a libfdk_aac -y output.m3u8 
  -vn -map_channel 0.1.0 -c:a libfdk_aac -ac 1 -y channel1.m3u8 
  -vn -map_channel 0.1.1 -c:a libfdk_aac -ac 1 -y channel2.m3u8 
  -f "[f=mpegts:onfail=ignore] -vn -map 0:2 -c:a libfdk_aac -ac 1 -y channel3.m3u8" 
  -f "[f=mpegts:onfail=ignore] -vn -map_channel 0.2.0 -c:a libfdk_aac -ac 1 -y channel4.m3u8" 
  -f "[f=mpegts:onfail=ignore] -vn -map_channel 0.2.1 -c:a libfdk_aac -ac 1 -y channel5.m3u8" 
  -f "[f=mpegts:onfail=ignore] -vn -map 0:3 -c:a libfdk_aac -ac 1 -y channel6.m3u8" 
  -f "[f=mpegts:onfail=ignore] -vn -map_channel 0.3.0 -c:a libfdk_aac -ac 1 -y channel7.m3u8" 
  -f "[f=mpegts:onfail=ignore] -vn -map_channel 0.3.1 -c:a libfdk_aac -ac 1 -y channel8.m3u8" 
  -f "[f=mpegts:onfail=ignore] -vn -map 0:3.1 -c:a libfdk_aac -ac 1 -y channel6.m3u8" -v verbose

Когда я передаю входное видео со звуком 5.1, вышеуказанная команда работает, но только для первых 3 выходов. Это полностью игнорирует все оставшиеся выходы, даже если они работают. Это не беспокоит о результатах выходных данных.

У меня вопрос, как использовать эту опцию onfail, чтобы игнорировать, если один из выходов вышел из строя?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...