StreamingCommunity 2.5.2__py3-none-any.whl → 2.5.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of StreamingCommunity might be problematic. Click here for more details.
- StreamingCommunity/Api/Player/Helper/Vixcloud/js_parser.py +143 -143
- StreamingCommunity/Api/Player/Helper/Vixcloud/util.py +136 -136
- StreamingCommunity/Api/Player/ddl.py +89 -89
- StreamingCommunity/Api/Player/maxstream.py +151 -151
- StreamingCommunity/Api/Player/supervideo.py +193 -193
- StreamingCommunity/Api/Player/vixcloud.py +272 -272
- StreamingCommunity/Api/Site/1337xx/__init__.py +51 -50
- StreamingCommunity/Api/Site/1337xx/costant.py +14 -14
- StreamingCommunity/Api/Site/1337xx/site.py +87 -89
- StreamingCommunity/Api/Site/1337xx/title.py +63 -64
- StreamingCommunity/Api/Site/altadefinizionegratis/__init__.py +74 -50
- StreamingCommunity/Api/Site/altadefinizionegratis/costant.py +21 -19
- StreamingCommunity/Api/Site/altadefinizionegratis/film.py +81 -72
- StreamingCommunity/Api/Site/altadefinizionegratis/site.py +116 -94
- StreamingCommunity/Api/Site/animeunity/__init__.py +75 -50
- StreamingCommunity/Api/Site/animeunity/costant.py +21 -19
- StreamingCommunity/Api/Site/animeunity/film_serie.py +171 -134
- StreamingCommunity/Api/Site/animeunity/site.py +191 -174
- StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py +97 -97
- StreamingCommunity/Api/Site/cb01new/__init__.py +51 -51
- StreamingCommunity/Api/Site/cb01new/costant.py +19 -19
- StreamingCommunity/Api/Site/cb01new/film.py +61 -71
- StreamingCommunity/Api/Site/cb01new/site.py +82 -82
- StreamingCommunity/Api/Site/ddlstreamitaly/__init__.py +55 -55
- StreamingCommunity/Api/Site/ddlstreamitaly/costant.py +20 -20
- StreamingCommunity/Api/Site/ddlstreamitaly/series.py +149 -145
- StreamingCommunity/Api/Site/ddlstreamitaly/site.py +98 -98
- StreamingCommunity/Api/Site/ddlstreamitaly/util/ScrapeSerie.py +84 -84
- StreamingCommunity/Api/Site/guardaserie/__init__.py +50 -50
- StreamingCommunity/Api/Site/guardaserie/costant.py +19 -19
- StreamingCommunity/Api/Site/guardaserie/series.py +199 -198
- StreamingCommunity/Api/Site/guardaserie/site.py +89 -89
- StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py +110 -110
- StreamingCommunity/Api/Site/ilcorsaronero/__init__.py +51 -51
- StreamingCommunity/Api/Site/ilcorsaronero/costant.py +18 -18
- StreamingCommunity/Api/Site/ilcorsaronero/site.py +71 -71
- StreamingCommunity/Api/Site/ilcorsaronero/title.py +44 -44
- StreamingCommunity/Api/Site/ilcorsaronero/util/ilCorsarScraper.py +149 -149
- StreamingCommunity/Api/Site/mostraguarda/__init__.py +48 -48
- StreamingCommunity/Api/Site/mostraguarda/costant.py +18 -18
- StreamingCommunity/Api/Site/mostraguarda/film.py +90 -101
- StreamingCommunity/Api/Site/streamingcommunity/__init__.py +79 -55
- StreamingCommunity/Api/Site/streamingcommunity/costant.py +21 -19
- StreamingCommunity/Api/Site/streamingcommunity/film.py +86 -75
- StreamingCommunity/Api/Site/streamingcommunity/series.py +259 -207
- StreamingCommunity/Api/Site/streamingcommunity/site.py +156 -142
- StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py +124 -124
- StreamingCommunity/Api/Template/Class/SearchType.py +101 -101
- StreamingCommunity/Api/Template/Util/__init__.py +4 -4
- StreamingCommunity/Api/Template/Util/get_domain.py +201 -201
- StreamingCommunity/Api/Template/Util/manage_ep.py +178 -178
- StreamingCommunity/Api/Template/Util/recall_search.py +37 -37
- StreamingCommunity/Api/Template/__init__.py +2 -2
- StreamingCommunity/Api/Template/site.py +87 -87
- StreamingCommunity/Lib/Downloader/HLS/downloader.py +529 -1008
- StreamingCommunity/Lib/Downloader/HLS/proxyes.py +110 -110
- StreamingCommunity/Lib/Downloader/HLS/segments.py +446 -573
- StreamingCommunity/Lib/Downloader/MP4/downloader.py +181 -155
- StreamingCommunity/Lib/Downloader/TOR/downloader.py +297 -295
- StreamingCommunity/Lib/Downloader/__init__.py +4 -4
- StreamingCommunity/Lib/FFmpeg/__init__.py +4 -4
- StreamingCommunity/Lib/FFmpeg/capture.py +170 -170
- StreamingCommunity/Lib/FFmpeg/command.py +264 -296
- StreamingCommunity/Lib/FFmpeg/util.py +248 -248
- StreamingCommunity/Lib/M3U8/__init__.py +5 -5
- StreamingCommunity/Lib/M3U8/decryptor.py +164 -164
- StreamingCommunity/Lib/M3U8/estimator.py +146 -228
- StreamingCommunity/Lib/M3U8/parser.py +666 -666
- StreamingCommunity/Lib/M3U8/url_fixer.py +57 -57
- StreamingCommunity/Lib/TMBD/__init__.py +1 -1
- StreamingCommunity/Lib/TMBD/obj_tmbd.py +39 -39
- StreamingCommunity/Lib/TMBD/tmdb.py +345 -345
- StreamingCommunity/TelegramHelp/__init__.py +0 -0
- StreamingCommunity/TelegramHelp/request_manager.py +82 -0
- StreamingCommunity/TelegramHelp/session.py +56 -0
- StreamingCommunity/TelegramHelp/telegram_bot.py +561 -0
- StreamingCommunity/Upload/update.py +75 -67
- StreamingCommunity/Upload/version.py +5 -5
- StreamingCommunity/Util/_jsonConfig.py +227 -228
- StreamingCommunity/Util/call_stack.py +42 -42
- StreamingCommunity/Util/color.py +20 -20
- StreamingCommunity/Util/console.py +12 -12
- StreamingCommunity/Util/ffmpeg_installer.py +342 -370
- StreamingCommunity/Util/headers.py +159 -159
- StreamingCommunity/Util/logger.py +61 -61
- StreamingCommunity/Util/message.py +36 -64
- StreamingCommunity/Util/os.py +500 -507
- StreamingCommunity/Util/table.py +271 -228
- StreamingCommunity/run.py +352 -245
- {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/LICENSE +674 -674
- {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/METADATA +601 -543
- StreamingCommunity-2.5.5.dist-info/RECORD +96 -0
- {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/entry_points.txt +0 -1
- StreamingCommunity/Api/Player/Helper/Vixcloud/__pycache__/js_parser.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/Helper/Vixcloud/__pycache__/js_parser.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Player/Helper/Vixcloud/__pycache__/util.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/Helper/Vixcloud/__pycache__/util.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/ddl.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/ddl.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/maxstream.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/maxstream.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/supervideo.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/supervideo.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/vixcloud.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/vixcloud.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/title.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/title.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/film.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/film.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/film_serie.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/film_serie.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/util/__pycache__/ScrapeSerie.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/util/__pycache__/ScrapeSerie.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/film.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/film.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/series.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/series.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/util/__pycache__/ScrapeSerie.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/util/__pycache__/ScrapeSerie.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/series.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/series.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/util/__pycache__/ScrapeSerie.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/util/__pycache__/ScrapeSerie.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/title.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/title.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/util/__pycache__/ilCorsarScraper.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/util/__pycache__/ilCorsarScraper.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/film.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/film.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/film.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/film.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/series.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/series.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/util/__pycache__/ScrapeSerie.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/util/__pycache__/ScrapeSerie.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/Class/__pycache__/SearchType.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/Class/__pycache__/SearchType.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/get_domain.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/get_domain.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/manage_ep.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/manage_ep.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/recall_search.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/recall_search.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/downloader.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/downloader.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/proxyes.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/proxyes.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/segments.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/segments.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/MP4/__pycache__/downloader.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/MP4/__pycache__/downloader.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/TOR/__pycache__/downloader.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/TOR/__pycache__/downloader.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/capture.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/capture.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/command.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/command.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/util.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/util.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/decryptor.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/decryptor.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/estimator.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/estimator.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/parser.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/parser.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/url_fixer.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/url_fixer.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/obj_tmbd.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/obj_tmbd.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/tmdb.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/tmdb.cpython-39.pyc +0 -0
- StreamingCommunity/Upload/__pycache__/update.cpython-313.pyc +0 -0
- StreamingCommunity/Upload/__pycache__/update.cpython-39.pyc +0 -0
- StreamingCommunity/Upload/__pycache__/version.cpython-313.pyc +0 -0
- StreamingCommunity/Upload/__pycache__/version.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/_jsonConfig.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/_jsonConfig.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/call_stack.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/call_stack.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/color.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/color.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/console.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/console.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/ffmpeg_installer.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/ffmpeg_installer.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/headers.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/headers.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/logger.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/logger.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/message.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/message.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/os.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/os.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/table.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/table.cpython-39.pyc +0 -0
- StreamingCommunity/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/__pycache__/run.cpython-313.pyc +0 -0
- StreamingCommunity/__pycache__/run.cpython-39.pyc +0 -0
- StreamingCommunity-2.5.2.dist-info/RECORD +0 -264
- {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/WHEEL +0 -0
- {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/top_level.txt +0 -0
|
@@ -1,249 +1,249 @@
|
|
|
1
|
-
# 16.04.24
|
|
2
|
-
|
|
3
|
-
import os
|
|
4
|
-
import sys
|
|
5
|
-
import json
|
|
6
|
-
import subprocess
|
|
7
|
-
import logging
|
|
8
|
-
from typing import Tuple
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
# Internal utilities
|
|
12
|
-
from StreamingCommunity.Util.console import console
|
|
13
|
-
from StreamingCommunity.Util.os import os_summary
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
# Variable
|
|
17
|
-
FFPROB_PATH = os_summary.ffprobe_path
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def has_audio_stream(video_path: str) -> bool:
|
|
22
|
-
"""
|
|
23
|
-
Check if the input video has an audio stream.
|
|
24
|
-
|
|
25
|
-
Parameters:
|
|
26
|
-
- video_path (str): Path to the input video file.
|
|
27
|
-
|
|
28
|
-
Returns:
|
|
29
|
-
has_audio (bool): True if the input video has an audio stream, False otherwise.
|
|
30
|
-
"""
|
|
31
|
-
try:
|
|
32
|
-
ffprobe_cmd = [FFPROB_PATH, '-v', 'error', '-print_format', 'json', '-select_streams', 'a', '-show_streams', video_path]
|
|
33
|
-
logging.info(f"FFmpeg command: {ffprobe_cmd}")
|
|
34
|
-
|
|
35
|
-
with subprocess.Popen(ffprobe_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) as proc:
|
|
36
|
-
stdout, stderr = proc.communicate()
|
|
37
|
-
if stderr:
|
|
38
|
-
logging.error(f"Error: {stderr}")
|
|
39
|
-
else:
|
|
40
|
-
probe_result = json.loads(stdout)
|
|
41
|
-
return bool(probe_result.get('streams', []))
|
|
42
|
-
|
|
43
|
-
except Exception as e:
|
|
44
|
-
logging.error(f"Error: {e}")
|
|
45
|
-
return False
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
def get_video_duration(file_path: str) -> float:
|
|
49
|
-
"""
|
|
50
|
-
Get the duration of a video file.
|
|
51
|
-
|
|
52
|
-
Parameters:
|
|
53
|
-
- file_path (str): The path to the video file.
|
|
54
|
-
|
|
55
|
-
Returns:
|
|
56
|
-
(float): The duration of the video in seconds if successful, None if there's an error.
|
|
57
|
-
"""
|
|
58
|
-
|
|
59
|
-
try:
|
|
60
|
-
ffprobe_cmd = [FFPROB_PATH, '-v', 'error', '-show_format', '-print_format', 'json', file_path]
|
|
61
|
-
logging.info(f"FFmpeg command: {ffprobe_cmd}")
|
|
62
|
-
|
|
63
|
-
# Use a with statement to ensure the subprocess is cleaned up properly
|
|
64
|
-
with subprocess.Popen(ffprobe_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) as proc:
|
|
65
|
-
stdout, stderr = proc.communicate()
|
|
66
|
-
|
|
67
|
-
if proc.returncode != 0:
|
|
68
|
-
logging.error(f"Error: {stderr}")
|
|
69
|
-
return None
|
|
70
|
-
|
|
71
|
-
# Parse JSON output
|
|
72
|
-
probe_result = json.loads(stdout)
|
|
73
|
-
|
|
74
|
-
# Extract duration from the video information
|
|
75
|
-
try:
|
|
76
|
-
return float(probe_result['format']['duration'])
|
|
77
|
-
|
|
78
|
-
except:
|
|
79
|
-
return 1
|
|
80
|
-
|
|
81
|
-
except Exception as e:
|
|
82
|
-
logging.error(f"Get video duration error: {e}")
|
|
83
|
-
sys.exit(0)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
def get_video_duration_s(filename):
|
|
87
|
-
"""
|
|
88
|
-
Get the duration of a video file using ffprobe.
|
|
89
|
-
|
|
90
|
-
Parameters:
|
|
91
|
-
- filename (str): Path to the video file (e.g., 'sim.mp4')
|
|
92
|
-
|
|
93
|
-
Returns:
|
|
94
|
-
- duration (float): Duration of the video in seconds, or None if an error occurs.
|
|
95
|
-
"""
|
|
96
|
-
ffprobe_cmd = ['ffprobe', '-v', 'error', '-show_entries', 'format=duration', '-of', 'default=noprint_wrappers=1:nokey=1', filename]
|
|
97
|
-
|
|
98
|
-
try:
|
|
99
|
-
|
|
100
|
-
# Run ffprobe command and capture output
|
|
101
|
-
result = subprocess.run(ffprobe_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True, text=True)
|
|
102
|
-
|
|
103
|
-
# Extract duration from the output
|
|
104
|
-
duration_str = result.stdout.strip()
|
|
105
|
-
duration = float(duration_str) # Convert duration to float
|
|
106
|
-
|
|
107
|
-
return int(duration)
|
|
108
|
-
|
|
109
|
-
except subprocess.CalledProcessError as e:
|
|
110
|
-
print(f"Error running ffprobe: {e}")
|
|
111
|
-
return None
|
|
112
|
-
except ValueError as e:
|
|
113
|
-
print(f"Error converting duration to float: {e}")
|
|
114
|
-
return None
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
def format_duration(seconds: float) -> Tuple[int, int, int]:
|
|
118
|
-
"""
|
|
119
|
-
Format duration in seconds into hours, minutes, and seconds.
|
|
120
|
-
|
|
121
|
-
Parameters:
|
|
122
|
-
- seconds (float): Duration in seconds.
|
|
123
|
-
|
|
124
|
-
Returns:
|
|
125
|
-
list[int, int, int]: List containing hours, minutes, and seconds.
|
|
126
|
-
"""
|
|
127
|
-
|
|
128
|
-
hours, remainder = divmod(seconds, 3600)
|
|
129
|
-
minutes, seconds = divmod(remainder, 60)
|
|
130
|
-
|
|
131
|
-
return int(hours), int(minutes), int(seconds)
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
def print_duration_table(file_path: str, description: str = "Duration", return_string: bool = False):
|
|
135
|
-
"""
|
|
136
|
-
Print the duration of a video file in hours, minutes, and seconds, or return it as a formatted string.
|
|
137
|
-
|
|
138
|
-
Parameters:
|
|
139
|
-
- file_path (str): The path to the video file.
|
|
140
|
-
- description (str): Optional description to be included in the output. Defaults to "Duration". If not provided, the duration will not be printed.
|
|
141
|
-
- return_string (bool): If True, returns the formatted duration string. If False, returns a dictionary with hours, minutes, and seconds.
|
|
142
|
-
|
|
143
|
-
Returns:
|
|
144
|
-
- str: The formatted duration string if return_string is True.
|
|
145
|
-
- dict: A dictionary with keys 'h', 'm', 's' representing hours, minutes, and seconds if return_string is False.
|
|
146
|
-
"""
|
|
147
|
-
video_duration = get_video_duration(file_path)
|
|
148
|
-
|
|
149
|
-
if video_duration is not None:
|
|
150
|
-
hours, minutes, seconds = format_duration(video_duration)
|
|
151
|
-
formatted_duration = f"[yellow]{int(hours)}[red]h [yellow]{int(minutes)}[red]m [yellow]{int(seconds)}[red]s"
|
|
152
|
-
duration_dict = {'h': hours, 'm': minutes, 's': seconds}
|
|
153
|
-
|
|
154
|
-
if description:
|
|
155
|
-
console.print(f"[cyan]{description} for [white]([green]{os.path.basename(file_path)}[white]): {formatted_duration}")
|
|
156
|
-
else:
|
|
157
|
-
if return_string:
|
|
158
|
-
return formatted_duration
|
|
159
|
-
else:
|
|
160
|
-
return duration_dict
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
def get_ffprobe_info(file_path):
|
|
164
|
-
"""
|
|
165
|
-
Get format and codec information for a media file using ffprobe.
|
|
166
|
-
|
|
167
|
-
Parameters:
|
|
168
|
-
- file_path (str): Path to the media file.
|
|
169
|
-
|
|
170
|
-
Returns:
|
|
171
|
-
dict: A dictionary containing the format name and a list of codec names.
|
|
172
|
-
"""
|
|
173
|
-
try:
|
|
174
|
-
result = subprocess.run(
|
|
175
|
-
[FFPROB_PATH, '-v', 'error', '-show_format', '-show_streams', '-print_format', 'json', file_path],
|
|
176
|
-
stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, check=True
|
|
177
|
-
)
|
|
178
|
-
output = result.stdout
|
|
179
|
-
info = json.loads(output)
|
|
180
|
-
|
|
181
|
-
format_name = info['format']['format_name'] if 'format' in info else None
|
|
182
|
-
codec_names = [stream['codec_name'] for stream in info['streams']] if 'streams' in info else []
|
|
183
|
-
|
|
184
|
-
return {
|
|
185
|
-
'format_name': format_name,
|
|
186
|
-
'codec_names': codec_names
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
except subprocess.CalledProcessError as e:
|
|
190
|
-
logging.error(f"ffprobe failed for file {file_path}: {e}")
|
|
191
|
-
return None
|
|
192
|
-
|
|
193
|
-
except json.JSONDecodeError as e:
|
|
194
|
-
logging.error(f"Failed to parse JSON output from ffprobe for file {file_path}: {e}")
|
|
195
|
-
return None
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
def is_png_format_or_codec(file_info):
|
|
199
|
-
"""
|
|
200
|
-
Check if the format is 'png_pipe' or if any codec is 'png'.
|
|
201
|
-
|
|
202
|
-
Parameters:
|
|
203
|
-
- file_info (dict): The dictionary containing file information.
|
|
204
|
-
|
|
205
|
-
Returns:
|
|
206
|
-
bool: True if the format is 'png_pipe' or any codec is 'png', otherwise False.
|
|
207
|
-
"""
|
|
208
|
-
if not file_info:
|
|
209
|
-
return False
|
|
210
|
-
|
|
211
|
-
#console.print(f"[yellow][FFmpeg] [cyan]Avaiable codec[white]: [red]{file_info['codec_names']}")
|
|
212
|
-
return file_info['format_name'] == 'png_pipe' or 'png' in file_info['codec_names']
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
def need_to_force_to_ts(file_path):
|
|
216
|
-
"""
|
|
217
|
-
Get if a file to TS format if it is in PNG format or contains a PNG codec.
|
|
218
|
-
|
|
219
|
-
Parameters:
|
|
220
|
-
- file_path (str): Path to the input media file.
|
|
221
|
-
"""
|
|
222
|
-
logging.info(f"Processing file: {file_path}")
|
|
223
|
-
file_info = get_ffprobe_info(file_path)
|
|
224
|
-
|
|
225
|
-
if is_png_format_or_codec(file_info):
|
|
226
|
-
return True
|
|
227
|
-
return False
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
def check_duration_v_a(video_path, audio_path):
|
|
231
|
-
"""
|
|
232
|
-
Check if the duration of the video and audio matches.
|
|
233
|
-
|
|
234
|
-
Parameters:
|
|
235
|
-
- video_path (str): Path to the video file.
|
|
236
|
-
- audio_path (str): Path to the audio file.
|
|
237
|
-
|
|
238
|
-
Returns:
|
|
239
|
-
- bool: True if the duration of the video and audio matches, False otherwise.
|
|
240
|
-
"""
|
|
241
|
-
|
|
242
|
-
# Ottieni la durata del video
|
|
243
|
-
video_duration = get_video_duration(video_path)
|
|
244
|
-
|
|
245
|
-
# Ottieni la durata dell'audio
|
|
246
|
-
audio_duration = get_video_duration(audio_path)
|
|
247
|
-
|
|
248
|
-
# Verifica se le durate corrispondono
|
|
1
|
+
# 16.04.24
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import sys
|
|
5
|
+
import json
|
|
6
|
+
import subprocess
|
|
7
|
+
import logging
|
|
8
|
+
from typing import Tuple
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# Internal utilities
|
|
12
|
+
from StreamingCommunity.Util.console import console
|
|
13
|
+
from StreamingCommunity.Util.os import os_summary
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# Variable
|
|
17
|
+
FFPROB_PATH = os_summary.ffprobe_path
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def has_audio_stream(video_path: str) -> bool:
|
|
22
|
+
"""
|
|
23
|
+
Check if the input video has an audio stream.
|
|
24
|
+
|
|
25
|
+
Parameters:
|
|
26
|
+
- video_path (str): Path to the input video file.
|
|
27
|
+
|
|
28
|
+
Returns:
|
|
29
|
+
has_audio (bool): True if the input video has an audio stream, False otherwise.
|
|
30
|
+
"""
|
|
31
|
+
try:
|
|
32
|
+
ffprobe_cmd = [FFPROB_PATH, '-v', 'error', '-print_format', 'json', '-select_streams', 'a', '-show_streams', video_path]
|
|
33
|
+
logging.info(f"FFmpeg command: {ffprobe_cmd}")
|
|
34
|
+
|
|
35
|
+
with subprocess.Popen(ffprobe_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) as proc:
|
|
36
|
+
stdout, stderr = proc.communicate()
|
|
37
|
+
if stderr:
|
|
38
|
+
logging.error(f"Error: {stderr}")
|
|
39
|
+
else:
|
|
40
|
+
probe_result = json.loads(stdout)
|
|
41
|
+
return bool(probe_result.get('streams', []))
|
|
42
|
+
|
|
43
|
+
except Exception as e:
|
|
44
|
+
logging.error(f"Error: {e}")
|
|
45
|
+
return False
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def get_video_duration(file_path: str) -> float:
|
|
49
|
+
"""
|
|
50
|
+
Get the duration of a video file.
|
|
51
|
+
|
|
52
|
+
Parameters:
|
|
53
|
+
- file_path (str): The path to the video file.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
(float): The duration of the video in seconds if successful, None if there's an error.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
try:
|
|
60
|
+
ffprobe_cmd = [FFPROB_PATH, '-v', 'error', '-show_format', '-print_format', 'json', file_path]
|
|
61
|
+
logging.info(f"FFmpeg command: {ffprobe_cmd}")
|
|
62
|
+
|
|
63
|
+
# Use a with statement to ensure the subprocess is cleaned up properly
|
|
64
|
+
with subprocess.Popen(ffprobe_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) as proc:
|
|
65
|
+
stdout, stderr = proc.communicate()
|
|
66
|
+
|
|
67
|
+
if proc.returncode != 0:
|
|
68
|
+
logging.error(f"Error: {stderr}")
|
|
69
|
+
return None
|
|
70
|
+
|
|
71
|
+
# Parse JSON output
|
|
72
|
+
probe_result = json.loads(stdout)
|
|
73
|
+
|
|
74
|
+
# Extract duration from the video information
|
|
75
|
+
try:
|
|
76
|
+
return float(probe_result['format']['duration'])
|
|
77
|
+
|
|
78
|
+
except:
|
|
79
|
+
return 1
|
|
80
|
+
|
|
81
|
+
except Exception as e:
|
|
82
|
+
logging.error(f"Get video duration error: {e}")
|
|
83
|
+
sys.exit(0)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def get_video_duration_s(filename):
|
|
87
|
+
"""
|
|
88
|
+
Get the duration of a video file using ffprobe.
|
|
89
|
+
|
|
90
|
+
Parameters:
|
|
91
|
+
- filename (str): Path to the video file (e.g., 'sim.mp4')
|
|
92
|
+
|
|
93
|
+
Returns:
|
|
94
|
+
- duration (float): Duration of the video in seconds, or None if an error occurs.
|
|
95
|
+
"""
|
|
96
|
+
ffprobe_cmd = ['ffprobe', '-v', 'error', '-show_entries', 'format=duration', '-of', 'default=noprint_wrappers=1:nokey=1', filename]
|
|
97
|
+
|
|
98
|
+
try:
|
|
99
|
+
|
|
100
|
+
# Run ffprobe command and capture output
|
|
101
|
+
result = subprocess.run(ffprobe_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True, text=True)
|
|
102
|
+
|
|
103
|
+
# Extract duration from the output
|
|
104
|
+
duration_str = result.stdout.strip()
|
|
105
|
+
duration = float(duration_str) # Convert duration to float
|
|
106
|
+
|
|
107
|
+
return int(duration)
|
|
108
|
+
|
|
109
|
+
except subprocess.CalledProcessError as e:
|
|
110
|
+
print(f"Error running ffprobe: {e}")
|
|
111
|
+
return None
|
|
112
|
+
except ValueError as e:
|
|
113
|
+
print(f"Error converting duration to float: {e}")
|
|
114
|
+
return None
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def format_duration(seconds: float) -> Tuple[int, int, int]:
|
|
118
|
+
"""
|
|
119
|
+
Format duration in seconds into hours, minutes, and seconds.
|
|
120
|
+
|
|
121
|
+
Parameters:
|
|
122
|
+
- seconds (float): Duration in seconds.
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
list[int, int, int]: List containing hours, minutes, and seconds.
|
|
126
|
+
"""
|
|
127
|
+
|
|
128
|
+
hours, remainder = divmod(seconds, 3600)
|
|
129
|
+
minutes, seconds = divmod(remainder, 60)
|
|
130
|
+
|
|
131
|
+
return int(hours), int(minutes), int(seconds)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def print_duration_table(file_path: str, description: str = "Duration", return_string: bool = False):
|
|
135
|
+
"""
|
|
136
|
+
Print the duration of a video file in hours, minutes, and seconds, or return it as a formatted string.
|
|
137
|
+
|
|
138
|
+
Parameters:
|
|
139
|
+
- file_path (str): The path to the video file.
|
|
140
|
+
- description (str): Optional description to be included in the output. Defaults to "Duration". If not provided, the duration will not be printed.
|
|
141
|
+
- return_string (bool): If True, returns the formatted duration string. If False, returns a dictionary with hours, minutes, and seconds.
|
|
142
|
+
|
|
143
|
+
Returns:
|
|
144
|
+
- str: The formatted duration string if return_string is True.
|
|
145
|
+
- dict: A dictionary with keys 'h', 'm', 's' representing hours, minutes, and seconds if return_string is False.
|
|
146
|
+
"""
|
|
147
|
+
video_duration = get_video_duration(file_path)
|
|
148
|
+
|
|
149
|
+
if video_duration is not None:
|
|
150
|
+
hours, minutes, seconds = format_duration(video_duration)
|
|
151
|
+
formatted_duration = f"[yellow]{int(hours)}[red]h [yellow]{int(minutes)}[red]m [yellow]{int(seconds)}[red]s"
|
|
152
|
+
duration_dict = {'h': hours, 'm': minutes, 's': seconds}
|
|
153
|
+
|
|
154
|
+
if description:
|
|
155
|
+
console.print(f"[cyan]{description} for [white]([green]{os.path.basename(file_path)}[white]): {formatted_duration}")
|
|
156
|
+
else:
|
|
157
|
+
if return_string:
|
|
158
|
+
return formatted_duration
|
|
159
|
+
else:
|
|
160
|
+
return duration_dict
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def get_ffprobe_info(file_path):
|
|
164
|
+
"""
|
|
165
|
+
Get format and codec information for a media file using ffprobe.
|
|
166
|
+
|
|
167
|
+
Parameters:
|
|
168
|
+
- file_path (str): Path to the media file.
|
|
169
|
+
|
|
170
|
+
Returns:
|
|
171
|
+
dict: A dictionary containing the format name and a list of codec names.
|
|
172
|
+
"""
|
|
173
|
+
try:
|
|
174
|
+
result = subprocess.run(
|
|
175
|
+
[FFPROB_PATH, '-v', 'error', '-show_format', '-show_streams', '-print_format', 'json', file_path],
|
|
176
|
+
stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, check=True
|
|
177
|
+
)
|
|
178
|
+
output = result.stdout
|
|
179
|
+
info = json.loads(output)
|
|
180
|
+
|
|
181
|
+
format_name = info['format']['format_name'] if 'format' in info else None
|
|
182
|
+
codec_names = [stream['codec_name'] for stream in info['streams']] if 'streams' in info else []
|
|
183
|
+
|
|
184
|
+
return {
|
|
185
|
+
'format_name': format_name,
|
|
186
|
+
'codec_names': codec_names
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
except subprocess.CalledProcessError as e:
|
|
190
|
+
logging.error(f"ffprobe failed for file {file_path}: {e}")
|
|
191
|
+
return None
|
|
192
|
+
|
|
193
|
+
except json.JSONDecodeError as e:
|
|
194
|
+
logging.error(f"Failed to parse JSON output from ffprobe for file {file_path}: {e}")
|
|
195
|
+
return None
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def is_png_format_or_codec(file_info):
|
|
199
|
+
"""
|
|
200
|
+
Check if the format is 'png_pipe' or if any codec is 'png'.
|
|
201
|
+
|
|
202
|
+
Parameters:
|
|
203
|
+
- file_info (dict): The dictionary containing file information.
|
|
204
|
+
|
|
205
|
+
Returns:
|
|
206
|
+
bool: True if the format is 'png_pipe' or any codec is 'png', otherwise False.
|
|
207
|
+
"""
|
|
208
|
+
if not file_info:
|
|
209
|
+
return False
|
|
210
|
+
|
|
211
|
+
#console.print(f"[yellow][FFmpeg] [cyan]Avaiable codec[white]: [red]{file_info['codec_names']}")
|
|
212
|
+
return file_info['format_name'] == 'png_pipe' or 'png' in file_info['codec_names']
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def need_to_force_to_ts(file_path):
|
|
216
|
+
"""
|
|
217
|
+
Get if a file to TS format if it is in PNG format or contains a PNG codec.
|
|
218
|
+
|
|
219
|
+
Parameters:
|
|
220
|
+
- file_path (str): Path to the input media file.
|
|
221
|
+
"""
|
|
222
|
+
logging.info(f"Processing file: {file_path}")
|
|
223
|
+
file_info = get_ffprobe_info(file_path)
|
|
224
|
+
|
|
225
|
+
if is_png_format_or_codec(file_info):
|
|
226
|
+
return True
|
|
227
|
+
return False
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
def check_duration_v_a(video_path, audio_path):
|
|
231
|
+
"""
|
|
232
|
+
Check if the duration of the video and audio matches.
|
|
233
|
+
|
|
234
|
+
Parameters:
|
|
235
|
+
- video_path (str): Path to the video file.
|
|
236
|
+
- audio_path (str): Path to the audio file.
|
|
237
|
+
|
|
238
|
+
Returns:
|
|
239
|
+
- bool: True if the duration of the video and audio matches, False otherwise.
|
|
240
|
+
"""
|
|
241
|
+
|
|
242
|
+
# Ottieni la durata del video
|
|
243
|
+
video_duration = get_video_duration(video_path)
|
|
244
|
+
|
|
245
|
+
# Ottieni la durata dell'audio
|
|
246
|
+
audio_duration = get_video_duration(audio_path)
|
|
247
|
+
|
|
248
|
+
# Verifica se le durate corrispondono
|
|
249
249
|
return video_duration == audio_duration
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# 02.04.24
|
|
2
|
-
|
|
3
|
-
from .decryptor import M3U8_Decryption
|
|
4
|
-
from .estimator import M3U8_Ts_Estimator
|
|
5
|
-
from .parser import M3U8_Parser, M3U8_Codec
|
|
1
|
+
# 02.04.24
|
|
2
|
+
|
|
3
|
+
from .decryptor import M3U8_Decryption
|
|
4
|
+
from .estimator import M3U8_Ts_Estimator
|
|
5
|
+
from .parser import M3U8_Parser, M3U8_Codec
|
|
6
6
|
from .url_fixer import M3U8_UrlFix
|