From 69179ff7093d0f2a865aaa53f331cccfd06445ed Mon Sep 17 00:00:00 2001 From: eric Date: Sun, 28 Dec 2025 10:18:51 -0600 Subject: [PATCH] 'grok-1080p' --- config/URL_config.ini | 3 +- main.py | 209 ++++++++++++++++++++++-------------------- 2 files changed, 112 insertions(+), 100 deletions(-) diff --git a/config/URL_config.ini b/config/URL_config.ini index 814b7d1..3513272 100644 --- a/config/URL_config.ini +++ b/config/URL_config.ini @@ -1,3 +1,4 @@ https://live.douyin.com/372551154040 https://live.douyin.com/203476627795 -https://live.douyin.com/825627287092 \ No newline at end of file +https://live.douyin.com/825627287092 +https://live.douyin.com/61481392633 \ No newline at end of file diff --git a/main.py b/main.py index 1f4bb6b..3dc20d4 100644 --- a/main.py +++ b/main.py @@ -1842,27 +1842,103 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None: # "-f", "flv", srs_rtmp # ] - - - - # ffplay 预览命令(全屏显示到 HDMI) + # ffplay 预览命令(极致低延迟 + 全屏 HDMI,已非常完美,再加两项) ffplay_cmd = [ "ffplay", - "-f", "flv", # 输入格式必须匹配 ffmpeg 的 -f flv - "-fflags", "nobuffer", + "-f", "flv", + "-fflags", "nobuffer+flush_packets", "-flags", "low_delay", - "-framedrop", - "-vf", "transpose=2,colorspace=all=bt709:iall=bt709," - "eq=gamma_r=0.95:gamma_g=1.0:gamma_b=1.05:" - "brightness=0.03:saturation=0.85:contrast=1.05", # 您喜欢的调色滤镜 - "-fs", # 全屏 - "-autoexit", # 流结束自动退出 - "-threads", "6", - "-" # 从标准输入(管道)读取 + "-framedrop", # 关键:网络抖动时掉帧保流畅 + "-infbuf", # 防止输入端卡住 + "-probesize", "32", + "-analyzeduration", "0", + "-sync", "ext", + "-vf", "transpose=2," + "colorspace=all=bt709:iall=bt709:fast=1," # 加 fast=1 轻微加速颜色转换 + "eq=gamma_r=0.95:gamma_g=1.0:gamma_b=1.05:" + "brightness=0.03:saturation=0.85:contrast=1.05", + "-fs", + "-autoexit", + "-threads", "8", # A733 8核,用满没问题 + "-nodisp", "no", # 确保显示(某些环境需要显式) + "-" ] - # 1080p 输出到 HDMI - # 主 FFmpeg 命令 —— 仅负责拉流、转码、输出到 pipe(供 ffplay HDMI 显示) + # 主 ffmpeg 命令(1080p 最优平衡版,小改动) + ffmpeg_command = [ + "ffmpeg", + "-y", + "-loglevel", "info", + "-nostdin", + "-re", + "-stats", "-stats_period", "2", # 改成 2 秒一次,减少日志刷屏,略省 CPU + # 重连参数 + "-rw_timeout", "30000000", + "-reconnect", "1", + "-reconnect_at_eof", "1", + "-reconnect_streamed", "1", + "-reconnect_delay_max", "15", # 稍长一点,更稳 + # 极致低延迟输入 + "-fflags", "+genpts+discardcorrupt+nobuffer+flush_packets", + "-flags", "low_delay", + "-err_detect", "ignore_err", + "-headers", douyin_headers, + "-i", real_url, + + # 视频处理:1080p 竖屏(lanczos 画质好,A733 完全吃得住) + "-vf", "fps=30," + "scale=1080:1920:force_original_aspect_ratio=decrease:flags=lanczos," + "pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black", + + # 编码:veryfast + zerolatency 是当前最佳平衡 + "-c:v", "libx264", + "-preset", "veryfast", # A733 上 veryfast 比 ultrafast 画质明显更好,CPU 占用仅高 5-10% + "-tune", "zerolatency", + "-profile:v", "high", + "-b:v", "5200k", + "-maxrate", "5800k", + "-bufsize", "10400k", + "-g", "60", + "-keyint_min", "30", + "-r", "30", + "-vsync", "cfr", + "-bf", "0", + "-sc_threshold", "0", + "-x264-params", "force-cfr=1:scenecut=0:open_gop=0:sync-lookahead=0", + "-pix_fmt", "yuv420p", + + # 音频(保持不变,完美) + "-c:a", "aac", + "-b:a", "128k", + "-ar", "44100", + "-ac", "2", + "-af", "aresample=async=1:first_pts=0", + + # 输出 + "-flags", "+global_header", + "-flvflags", "no_duration_filesize", + "-f", "flv", + "pipe:1" + ] + + ## 720p ffplay 预览命令(全屏显示到 HDMI) + # ffplay_cmd = [ + # "ffplay", + # "-f", "flv", # 输入格式必须匹配 ffmpeg 的 -f flv + # "-fflags", "nobuffer", + # "-flags", "low_delay", + # "-framedrop", + # "-vf", "transpose=2,colorspace=all=bt709:iall=bt709," + # "eq=gamma_r=0.95:gamma_g=1.0:gamma_b=1.05:" + # "brightness=0.03:saturation=0.85:contrast=1.05", # 您喜欢的调色滤镜 + # "-fs", # 全屏 + # "-autoexit", # 流结束自动退出 + # "-threads", "6", + # "-" # 从标准输入(管道)读取 + # ] + + + # # 720p 输出到 HDMI(优化版,适合 Orange Pi Zero 2W) # ffmpeg_command = [ # "ffmpeg", # "-y", @@ -1888,22 +1964,23 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None: # "-headers", douyin_headers, # "-i", real_url, - # # ==================== 视频处理 ==================== - # # 强制 30fps + 1080p(竖屏居中补黑边) - # "-vf", "fps=30,scale=1080:1920:force_original_aspect_ratio=decrease:flags=lanczos," - # "pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black", - - # # ==================== 编码参数 ==================== - # "-c:v", codec_v, # libx264 或 h264_nvenc(已在前文检测) - # "-preset", preset_v, # veryfast 或 p5 - # *tune_param, # zerolatency 或 NVENC 参数 + # # ==================== 视频处理:720p 竖屏 ==================== + # "-vf", "fps=30," + # "scale=720:1280:force_original_aspect_ratio=decrease:flags=lanczos," + # "pad=720:1280:(ow-iw)/2:(oh-ih)/2:black", + # # ==================== 编码参数(轻量优化) ==================== + # "-c:v", codec_v, # libx264(板子无硬件加速) + # "-preset", "ultrafast", # 关键:极大降低 CPU 负载(比 veryfast 更快) + # "-tune", "zerolatency", # 低延迟 # "-profile:v", "high", - # "-b:v", "5200k", - # "-maxrate", "5800k", - # "-bufsize", "10400k", - # "-g", "60", - # "-keyint_min", "60", + + # "-b:v", "2600k", # 720p 推荐比特率,清晰又省资源 + # "-maxrate", "3000k", + # "-bufsize", "6000k", + + # "-g", "60", # GOP = 2 秒(30fps 时每 60 帧一个 I 帧) + # "-keyint_min", "30", # "-r", "30", # "-vsync", "cfr", # "-bf", "0", @@ -1911,7 +1988,7 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None: # "-x264-params", "force-cfr=1:scenecut=0:open_gop=0:sync-lookahead=0", # "-pix_fmt", "yuv420p", - # # ==================== 音频 ==================== + # # ==================== 音频(保持不变) ==================== # "-c:a", "aac", # "-b:a", "128k", # "-ar", "44100", @@ -1922,76 +1999,10 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None: # "-flags", "+global_header", # "-flvflags", "no_duration_filesize", - # "-f", "flv", # 格式必须是 flv,ffplay 读取最稳定 - # "pipe:1" # 直接输出到标准输出(管道),供 ffplay 读取 + # "-f", "flv", + # "pipe:1" # ] - - # 720p 输出到 HDMI(优化版,适合 Orange Pi Zero 2W) - ffmpeg_command = [ - "ffmpeg", - "-y", - "-loglevel", "info", - "-nostdin", - "-re", - - "-stats", "-stats_period", "1", - - # 抖音源重连参数 - "-rw_timeout", "30000000", - "-reconnect", "1", - "-reconnect_at_eof", "1", - "-reconnect_streamed", "1", - "-reconnect_delay_max", "10", - - # 低延迟输入 flags - "-fflags", "+genpts+discardcorrupt+nobuffer+flush_packets", - "-flags", "low_delay", - "-err_detect", "ignore_err", - - # 输入 headers(抖音必备) - "-headers", douyin_headers, - "-i", real_url, - - # ==================== 视频处理:720p 竖屏 ==================== - "-vf", "fps=30," - "scale=720:1280:force_original_aspect_ratio=decrease:flags=lanczos," - "pad=720:1280:(ow-iw)/2:(oh-ih)/2:black", - - # ==================== 编码参数(轻量优化) ==================== - "-c:v", codec_v, # libx264(板子无硬件加速) - "-preset", "ultrafast", # 关键:极大降低 CPU 负载(比 veryfast 更快) - "-tune", "zerolatency", # 低延迟 - "-profile:v", "high", - - "-b:v", "2600k", # 720p 推荐比特率,清晰又省资源 - "-maxrate", "3000k", - "-bufsize", "6000k", - - "-g", "60", # GOP = 2 秒(30fps 时每 60 帧一个 I 帧) - "-keyint_min", "30", - "-r", "30", - "-vsync", "cfr", - "-bf", "0", - "-sc_threshold", "0", - "-x264-params", "force-cfr=1:scenecut=0:open_gop=0:sync-lookahead=0", - "-pix_fmt", "yuv420p", - - # ==================== 音频(保持不变) ==================== - "-c:a", "aac", - "-b:a", "128k", - "-ar", "44100", - "-ac", "2", - "-af", "aresample=async=1:first_pts=0", - - # ==================== 输出格式 ==================== - "-flags", "+global_header", - "-flvflags", "no_duration_filesize", - - "-f", "flv", - "pipe:1" - ] - # ---- 单层重试循环(清晰可控) ---- proc = None ffplay_proc = None # <--- 新增这一行