отображать поток метаданных по фильтру в ffmpeg - PullRequest
1 голос
/ 07 августа 2020

Я пытаюсь извлечь только один (мета) поток данных из потока mpegts

Это потоки, возвращаемые ffprobe

Stream #0:0[0x12c]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:1[0x12d]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 256 kb/s
Stream #0:2[0x5]: Data: bin_data ([6][0][0][0] / 0x0006)
Stream #0:3[0x262]: Data: bin_data (FBID / 0x44494246)
Stream #0:4[0x258]: Data: klv (KLVA / 0x41564C4B)

Мне нужны только видео, аудио и klv stream (0: 4).

Хотя я мог сопоставить этот поток, указав его индекс ffmpeg -i udp://[IP] -map 0:4 -map 0:v -map 0:a -f mpegts udp://[IP]

Я не хочу полагаться на положение потоков klv в контейнере. Я тоже пробовал как ffmpeg -i udp://[IP] -map 0:d:m:klv -map 0:v -map 0:a -f mpegts udp://[IP] Но это было больше догадок.

Как я могу включить видео, аудио и klv или исключить потоки 0:2 и 0:3 без указания индекса потока, чтобы полученный поток mpegts выглядел так?

Stream #0:0[0x12c]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:1[0x12d]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 256 kb/s
Stream #0:2[0x258]: Data: klv (KLVA / 0x41564C4B)

1 Ответ

0 голосов
/ 07 августа 2020

Вы можете использовать ffprobe для определения индекса:

ffprobe -v error -select_streams d -show_entries stream=index,codec_name -of csv=p=0 udp://[IP]

Результат:

2,klv

Bash пример с использованием ffprobe с awk для автоматического получения KLV индекс:

ffmpeg -i udp://[IP] -map 0:v -map 0:a -map 0:"$(ffprobe -v error -select_streams d -show_entries stream=index,codec_name -of csv=p=0 udp://[IP] | awk -F, '/klv/ {print $1}')" -c copy -f mpegts udp://[IP]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...