CoolFace
Apppublic

ur5lgq/iptv-transcoder

sourceHugging Faceupdated 1mo agoView on Hugging Face
0likes
ffmpeg_cmd.txt168 linesDownload Raw Back to root
1                        # Транскодирование HLS с расширенными HTTP-заголовками для обхода блокировок HTTPS2                        ffmpeg_cmd = [3                            'ffmpeg',4                            '-user_agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',5                            '-headers', 'Accept: */*\r\nAccept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7\r\nOrigin: https://youtube.com\r\n',6                            '-analyzeduration', '10000000', '-probesize', '10000000',7                            '-reconnect', '1', '-reconnect_at_eof', '1',8                            '-reconnect_streamed', '1', '-reconnect_delay_max', '5',9                            '-re', '-i', final_url,10                            '-map', '0:v:0', '-map', '0:a:0',11                            '-vf', f'fps=25,scale={scale}',12                            '-c:v', 'libx264', '-g', '50', '-keyint_min', '50',13                            '-sc_threshold', '0', 14                            '-crf', '23', '-maxrate', bitrate, '-bufsize', bufsize,15                            '-preset', 'veryfast', '-tune', 'zerolatency', '-profile:v', 'main',16                            '-c:a', 'aac', '-b:a', '64k', '-threads', '1',17                            '-map_metadata', '-1', '-fflags', '+bitexact', '-flags', '+bitexact',18                            '-f', 'hls', '-hls_time', '2', '-hls_list_size', '5',19                            '-hls_flags', 'delete_segments+independent_segments',20                            os.path.join(HLS_DIR, 'low.m3u8')21                        ]22                        23 24 25                        # Транскодирование HLS с ультра-низкой нагрузкой на CPU и ускоренной отдачей26                        ffmpeg_cmd = [27                            'ffmpeg',28                            '-user_agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',29                            '-headers', 'Accept: */*\r\nAccept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7\r\nOrigin: https://youtube.com\r\n',30                            '-analyzeduration', '10000000', '-probesize', '10000000',31                            '-reconnect', '1', '-reconnect_at_eof', '1',32                            '-reconnect_streamed', '1', '-reconnect_delay_max', '5',33                            '-re', '-i', final_url,34                            '-map', '0:v:0', '-map', '0:a:0',35                            '-vf', f'fps=25,scale={scale}',36                            '-c:v', 'libx264', '-g', '50', '-keyint_min', '50',37                            '-sc_threshold', '0', 38                            '-crf', '28', '-maxrate', bitrate, '-bufsize', bufsize,  # Увеличен CRF (меньше нагрузка на CPU)39                            '-preset', 'ultrafast', '-tune', 'zerolatency',         # Изменено на ultrafast для минимального CPU40                            '-profile:v', 'baseline',                                # Облегченный профиль h264 для экономии ресурсов41                            '-c:a', 'aac', '-b:a', '64k', '-threads', '2',           # Выделено 2 потока на обработку42                            '-map_metadata', '-1', '-fflags', '+bitexact', '-flags', '+bitexact',43                            '-f', 'hls', '-hls_time', '2', '-hls_list_size', '5',44                            '-hls_flags', 'delete_segments+independent_segments',45                            os.path.join(HLS_DIR, 'low.m3u8')46                        ]47ffmpeg_cmd = [48    'ffmpeg',49    '-hide_banner',50    '-loglevel', 'warning',51 52    # HTTP53    '-user_agent', 'Mozilla/5.0',54 55    # Входной буфер56    '-thread_queue_size', '512',57 58    # Автопереподключение59    '-reconnect', '1',60    '-reconnect_streamed', '1',61    '-reconnect_at_eof', '1',62    '-reconnect_delay_max', '5',63 64    # Вход65    '-i', final_url,66 67    # Корректные временные метки68    '-fflags', '+genpts',69 70    # Видео71    '-map', '0:v:0',72    '-vf', f'scale={scale}:flags=fast_bilinear',73 74    '-r', '25',75 76    '-c:v', 'libx264',77    '-preset', 'ultrafast',78    '-profile:v', 'main',79    '-level', '3.1',80    '-pix_fmt', 'yuv420p',81 82    # Постоянный битрейт83    '-b:v', bitrate,84    '-minrate', bitrate,85    '-maxrate', bitrate,86    '-bufsize', bufsize,87 88    # GOP89    '-g', '50',90    '-keyint_min', '50',91    '-sc_threshold', '0',92 93    # Настройки x26494    '-x264-params', 'nal-hrd=cbr:force-cfr=1',95 96    # Аудио97    '-map', '0:a:0?',98    '-c:a', 'aac',99    '-b:a', '96k',100    '-ar', '48000',101    '-ac', '2',102    '-af', 'aresample=async=1000',103 104    # HLS105    '-max_muxing_queue_size', '2048',106 107    '-f', 'hls',108    '-hls_time', '4',109    '-hls_list_size', '4',110    '-hls_flags', 'delete_segments+independent_segments',111    '-hls_allow_cache', '0',112 113    os.path.join(HLS_DIR, 'low.m3u8')114]115 116Что изменилось и почему это важно:-preset ultrafast — Перевод энкодера в самый быстрый режим.117Качество картинки станет незначительно хуже, но использование CPU упадет критически,118освободив ресурсы для работы Flask.-profile:v baseline — Отключает сложные алгоритмы сжатия 119(такие как B-кадры), которые требуют огромных вычислительных мощностей при декодировании и 120кодировании.-crf 28 — Снижает битрейт на динамических сценах, предотвращая перегрузку буфера121обмена данными внутри контейнера.-threads 2 — Явно разрешает FFmpeg задействовать второе ядро122процессора (если оно доступно в контейнере),123разделяя задачи декодирования mp2 и кодирования h264.124 125 12612_08_26 рабочий вариант127----------------------------------------------------------------128                    else:129                        # Настраиваем scale, bitrate, bufsize и CRF под каждый профиль индивидуально130                        if profile == '720': 131                            scale, bitrate, bufsize, crf_val = '1280:720', '2500k', '5000k', '20'  # Выше четкость для HD132                        elif profile == '480': 133                            scale, bitrate, bufsize, crf_val = '854:480', '1000k', '2000k', '21'   # Стандартный баланс134                        else: 135                            scale, bitrate, bufsize, crf_val = '640:360', '500k', '1000k', '22'    # Максимальное сжатие для экономии136 137                        138                        ffmpeg_cmd = [139                            "ffmpeg",140                            "-hide_banner",141                            "-loglevel", "debug",142 143                            "-user_agent", "Lavf/61.7.103",144 145                            "-i", final_url,146 147                            "-vf", f"scale={scale}",148 149                            "-c:v", "libx264",150                            "-preset", "veryfast",151                            "-tune", "zerolatency",152                            "-crf", crf_val,153 154                            "-c:a", "aac",155                            "-b:a", "64k",156 157                            "-f", "hls",158                            "-hls_time", "4",159                            "-hls_list_size", "5",160                            "-hls_flags", "delete_segments",161                            "-hls_segment_filename", os.path.join(HLS_DIR, "seg_%d.ts"),162 163                            os.path.join(HLS_DIR, "low.m3u8")164                        ]165                        ffmpeg_process = subprocess.Popen(ffmpeg_cmd)166                        stream_status = True167------------------------------------------------------------------------168