From 313d705ce932da47162c484de76a7f579465a79a Mon Sep 17 00:00:00 2001 From: eric Date: Tue, 27 Jan 2026 03:24:04 -0600 Subject: [PATCH] 's' --- douyin_youtube_ffplay.py | 70 ++++++++++++++++++++++++++++++++-------- mpv.sh | 17 ---------- obs1.sh | 23 ------------- 3 files changed, 57 insertions(+), 53 deletions(-) delete mode 100644 mpv.sh delete mode 100644 obs1.sh diff --git a/douyin_youtube_ffplay.py b/douyin_youtube_ffplay.py index 76bfa40..c3e0707 100644 --- a/douyin_youtube_ffplay.py +++ b/douyin_youtube_ffplay.py @@ -151,7 +151,50 @@ def start_douyin_youtube_ffplay( except Exception as e: print(f"[WARN] NVENC 检测失败,回退软件编码: {e}") - # ====================== FFmpeg 命令(1080p 单路推流,原样保留) ====================== + # 720p + # 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", "5", + # "-fflags", "+genpts+discardcorrupt+nobuffer+flush_packets", + # "-flags", "low_delay", + # "-err_detect", "ignore_err", + # "-max_delay", "80000", + # "-thread_queue_size", "2048", + + # "-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", "libx264", + # "-preset", "fast", + # # "-tune", "zerolatency", + # "-profile:v", "high", + # # 720p + # # "-minrate", "3200k","-b:v", "3200k", "-maxrate", "3200k", "-bufsize", "6400k", # bufsize = 2× bitrate,保持真 CBR + # "-b:v", "2600k","-maxrate", "3000k","-bufsize", "5200k", + # "-vsync", "cfr", + # "-g", "60", "-keyint_min", "60", + # "-r", "30", + # "-bf", "0", + # "-sc_threshold", "0", + # # "-nal-hrd", "cbr", # 改2:强制 CBR + # # 720p + # # "-x264-params", "nal-hrd=cbr:force-cfr=1:scenecut=0:filler=1", # 改3:简化 params,锁死 CBR + # "-x264-params", "force-cfr=1:scenecut=0:open_gop=0:sync-lookahead=0", + # "-pix_fmt", "yuv420p", + # "-c:a", "aac", "-b:a", "128k", "-ar", "48000", "-ac", "2", # 改4:1080p可音频上 128k(YouTube 推荐) + # "-af", "aresample=async=1:first_pts=0", + + # "-flags", "+global_header", + # "-flvflags", "no_duration_filesize", + # "-f", "flv", youtube_rtmp + # ] + + + # 1080p ffmpeg_command = [ "ffmpeg", "-y", "-loglevel", "info", "-nostdin", "-re", "-stats", "-stats_period", "1", @@ -166,25 +209,24 @@ def start_douyin_youtube_ffplay( "-headers", douyin_headers, "-i", real_url, - - "-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, - "-preset", preset_v, - *tune_param, + # 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", "libx264", + "-preset", "veryfast", + "-tune", "zerolatency", "-profile:v", "high", - - "-b:v", "5200k", "-maxrate", "5800k", "-bufsize", "10400k", + # 1080p + "-b:v", "5200k", "-maxrate", "5800k", "-bufsize", "10400k", # 改1:2× bufsize,真 CBR "-vsync", "cfr", "-g", "60", "-keyint_min", "60", "-r", "30", "-bf", "0", "-sc_threshold", "0", - "-x264-params", "force-cfr=1:scenecut=0:open_gop=0:sync-lookahead=0", + # "-nal-hrd", "cbr", # 改2:强制 CBR + # 1080p + "-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", + "-c:a", "aac", "-b:a", "128k", "-ar", "44100", "-ac", "2", "-af", "aresample=async=1:first_pts=0", "-flags", "+global_header", @@ -192,6 +234,8 @@ def start_douyin_youtube_ffplay( "-f", "flv", youtube_rtmp ] + + # ====================== 主重试循环(原样保留) ====================== proc = None stderr_q = None diff --git a/mpv.sh b/mpv.sh deleted file mode 100644 index 8269d53..0000000 --- a/mpv.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -mpv \ - --fs \ - --no-border \ - --vo=drm \ - --drm-device=/dev/dri/card0 \ - --hwdec=auto \ - --video-sync=display-resample \ - --untimed \ - --cache=no \ - --demuxer-lavf-o=ffflags=nobuffer \ - --demuxer-lavf-probesize=32 \ - --demuxer-lavf-analyzeduration=0 \ - --vf=setpts=PTS-STARTPTS \ - --no-audio \ - --loop=inf \ - 'srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=request&latency=10' diff --git a/obs1.sh b/obs1.sh deleted file mode 100644 index 7d54e81..0000000 --- a/obs1.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -# 先确保有推流!(pm2 start tiktok/youtube 等,让 ffmpeg 推到 SRS 的 live/livestream) - -export SDL_VIDEODRIVER=kmsdrm # 尝试 SDL 的 DRM 驱动(直接 HDMI 输出,无需 DISPLAY) - -mpv \ - --fs \ - --no-border \ - --vo=drm \ - --drm-device=/dev/dri/card0 \ # 如果 card0 不对,改 card1(ls /dev/dri/ 查看) - --hwdec=auto \ - --video-sync=display-resample \ - --untimed \ - --cache=no \ - --demuxer-lavf-o=ffflags=nobuffer \ - --demuxer-lavf-probesize=32 \ - --demuxer-lavf-analyzeduration=0 \ - --vf=setpts=PTS-STARTPTS \ - --no-audio \ - --loop=inf \ - http://127.0.0.1:8081/live/livestream.flv # 先用 HTTP-FLV 测试(稳定,不依赖 SRT) - # 如果 HTTP-FLV 正常,再切回 SRT: - # 'srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=request&latency=10'