|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Правильно распарсить лог FFprobe |
|
PowerShell - Правильно распарсить лог FFprobe
|
Старожил Сообщения: 226 |
Добрый день всем!
Возникла небольшая проблема с рег. выражением. По ссылкам посредством FFprobe получаю данные о видеопотоках. Лог такого содержания: ffprobe started on 2019-11-16 at 21:38:15 Report written to "ffprobe-20191116-213815.log" Command line: "I:\\\xd1\xea\xf0\xe8\xef\xf2\xfb Python\\udp_parser\\log\\ffprobe.exe" -hide_banner -show_streams -timeout 500000 http://109.200.253.165:4022/udp/224.5.1.1:1234 -report [NULL @ 01284e40] Opening "http://109.200.253.165:4022/udp/224.5.1.1:1234" for reading [http @ 0126e000] Setting default whitelist "http,https,tls,rtp,tcp,udp,crypto,httpproxy" [tcp @ 01272f80] Original list of addresses: [tcp @ 01272f80] Address 92.244.96.211 port 443 [tcp @ 01272f80] Interleaved list of addresses: [tcp @ 01272f80] Address 92.244.96.211 port 443 [tcp @ 01272f80] Starting connection attempt to 92.244.96.211 port 443 [tcp @ 01272f80] Successfully connected to 92.244.96.211 port 443 [http @ 0126e000] request: GET /udp/239.0.0.1:1234 HTTP/1.1 User-Agent: Lavf/58.20.100 Accept: */* Range: bytes=0- Connection: close Host: 92.244.96.211:443 Icy-MetaData: 1 [mpegts @ 01284e40] Format mpegts probed with size=2048 and score=50 [mpegts @ 01284e40] stream=0 stream_type=2 pid=f1 prog_reg_desc=CUEI [mpegts @ 01284e40] stream=1 stream_type=3 pid=f2 prog_reg_desc=CUEI [mpegts @ 01284e40] Before avformat_find_stream_info() pos: 0 bytes read:37960 seeks:0 nb_streams:3 [mpeg2video @ 0128adc0] Invalid frame dimensions 0x0. [mpeg2video @ 0128adc0] Invalid frame dimensions 0x0. [mpeg2video @ 0128adc0] Invalid frame dimensions 0x0. [mpeg2video @ 0128adc0] Invalid frame dimensions 0x0. [mpeg2video @ 0128adc0] Invalid frame dimensions 0x0. [mpeg2video @ 0128adc0] Invalid frame dimensions 0x0. [mpeg2video @ 0128adc0] Invalid frame dimensions 0x0. [mpeg2video @ 0128adc0] Invalid frame dimensions 0x0. [mpeg2video @ 0128adc0] Invalid frame dimensions 0x0. [mpeg2video @ 0128adc0] Invalid frame dimensions 0x0. [mpeg2video @ 0128adc0] Invalid frame dimensions 0x0. [mpeg2video @ 0128adc0] Format yuv420p chosen by get_format(). [mpegts @ 01284e40] max_analyze_duration 5000000 reached at 5016000 microseconds st:1 [mpegts @ 01284e40] After avformat_find_stream_info() pos: 2088304 bytes read:2090696 seeks:0 frames:338 "from":"http://109.200.253.165:4022/udp/224.5.1.1:1234" Duration: N/A, start: 26217.541478, bitrate: N/A Program 4 Metadata: "service_name":"NOVY CHANNEL" service_provider: Harmonic Stream #0:0[0xf1], 127, 1/90000: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, top first), 720x576 [SAR 64:45 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc Stream #0:1[0xf2], 211, 1/90000: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, fltp, 192 kb/s Stream #0:2[0x59], 0, 1/90000: Data: scte_35 Unsupported codec with id 98305 for input stream 2 [AVIOContext @ 0128eec0] Statistics: 2090696 bytes read, 0 seeks ffprobe started on 2019-11-16 at 21:38:21 Report written to "ffprobe-20191116-213821.log" Написал код: (Get-Content .\log\ffprobe-20191116-213815.log -Encoding utf8 ` | Select-String -Encoding utf8 -Pattern '"from":"([^"]+)"[\S\s]*"service_name":"([^"]+)"[\S\s]*' ` -AllMatches).Matches | ForEach-Object {"$($_.Groups[2].Value)`n$($_.Groups[1].Value)"} Подскажите, пожалуйста, где ошибка в моём коде ? Или может по-другому можно решить эту задачу ? |
|
Отправлено: 09:30, 17-11-2019 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 09:47, 17-11-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 226
|
Профиль | Отправить PM | Цитировать DJ Mogarych, спасибо большое!
Ваш код с моим примером работает. Но в примере привёл только часть лога, в реальности значений "from" и "service_name" значительно больше, до 255 По Вашему коду берутся только первые значения. Нужно как-то цикл организовать, но как, не пойму... |
Отправлено: 11:45, 17-11-2019 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Uragan66, а откуда бы он мог понять, сколько там у Вас этих значений «в реальности»? Регулярные выражения вообще очень критичны к конкретному содержанию.
Можете упаковать весь лог в архив, каковой приложить к сообщению, або выложить на вменяемый обменник/облако. |
Отправлено: 12:53, 17-11-2019 | #4 |
Старожил Сообщения: 226
|
Профиль | Отправить PM | Цитировать Iska, да, моя вина, как-то не подумал об этом
прикрепил логи, alllog.log - реальный выход ffprobe log_ffprobe.log - немного изменённый для удобства парсинга. |
|
Последний раз редактировалось Uragan66, 29-08-2020 в 20:05. Отправлено: 13:22, 17-11-2019 | #5 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 19:42, 17-11-2019 | #6 |
Старожил Сообщения: 226
|
Профиль | Отправить PM | Цитировать DJ Mogarych, ещё раз моя большая благодарность!
Код работает отлично. А не подскажете почему простые рег. выражения не работают с этим логом ? В дальнейшем взятые значения нужно поменять местами и добавить к значению "service_name" подстроку. Простой Regex в цикле не работает пробовал и по конвееру и с сохранением значений в промежуточный файл, не работает... |
Отправлено: 20:15, 17-11-2019 | #7 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать Потому что после get-content получается массив и со строки на строку перескочить не получится.
Можно попробовать импортировать файл с флагом -raw, тогда он будет одним куском. Вариант с выгрузкой в CSV: |
------- Последний раз редактировалось DJ Mogarych, 17-11-2019 в 21:07. Отправлено: 20:30, 17-11-2019 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Как правильно разделить HDD на лог. диски? | addins | Хочу все знать | 2 | 16-07-2016 14:18 | |
CMD/BAT - [решено] Распарсить имя файла | KYI | Скриптовые языки администрирования Windows | 2 | 13-11-2015 12:53 | |
PowerShell - [решено] Распарсить datetime | pogo | Скриптовые языки администрирования Windows | 1 | 09-10-2015 11:31 | |
PowerShell - [решено] Распарсить строку | milligan | Скриптовые языки администрирования Windows | 6 | 02-07-2014 11:18 | |
CMD/BAT - Чем бы распарсить .doc ? | mitiya | Скриптовые языки администрирования Windows | 5 | 29-11-2010 14:14 |
|