# Cron Job: 法国vs塞内加尔新闻视频

**Job ID:** d9ae4bc38054
**Run Time:** 2026-06-17 05:13:10
**Schedule:** once at 2026-06-17 05:00

## Prompt

[IMPORTANT: The user has invoked the "sports-news-video-production" skill, indicating they want you to follow its instructions. The full skill content is loaded below.]

---
name: sports-news-video-production
description: 张哥的世界杯新闻视频制作流程——从下载比赛录像到输出中文配音新闻视频
version: 2.0
author: 星璇
tags: [news, video, sports, ffmpeg, world-cup, chinese]
---

# 体育新闻视频制作流程

## 适用场景
制作世界杯/体育比赛新闻视频，要求：
- 真实比赛画面（从中国可访问的网站下载）
- 去掉源网站水印
- 替换原声为中文解说配音
- 每球加比分字幕
- 只取进球+庆祝+开闭幕等精华片段

## 触发条件
用户要做体育新闻视频，特别是世界杯相关。

## ⚠️ 输出规则（用户反复强调）
- **只发结果，不发过程** — 每个字都浪费钱
- **不要解释步骤** — 直接做，做完发链接
- **不要问确认** — 直接做
- **文案直接做** — 不用等用户确认
- **回复极短** — 一句话能说清的不写三段
- **不要列大段说明** — 只发链接和一句话总结

## 制作流程

### 第一步：寻找比赛录像源
用Yahoo Japan搜索（不用Google/YouTube）：
```
https://search.yahoo.co.jp/search?p=<关键词>&ei=UTF-8
```

可用 `site:v.qq.com` 或 `site:dailymotion.com` 限定搜索范围。

优先尝试的网站：
1. **腾讯视频 (v.qq.com)** — yt-dlp可下载，16:9横屏，效果最好
2. **央视网 (worldcup.cctv.com)** — 官方集锦，但CDN有海外封锁（见陷阱1）
3. **Dailymotion (dailymotion.com)** — ✅ **yt-dlp可以直接下载，无需impersonation**（2026-06-15验证）。curl搜索页面`/video/ID`格式提取视频ID，然后用`yt-dlp "https://www.dailymotion.com/video/ID"`下载。视频多为848x480或480x360竖屏/方形，不是真9:16。搜索结果页面固定返回约20个视频ID，翻页结果相同。

### 第二步：下载比赛录像（核心——要能从任何网站下）

按优先级依次尝试：

**1. yt-dlp（首选，支持上千个网站）**
```bash
yt-dlp "URL" -o "/tmp/match_raw.mp4"
```

**2. you-get（中国网站专用）**
```bash
you-get "URL" -o /tmp/
```

**3. ffmpeg直下（有mp4/m3u8直链时）**
```bash
ffmpeg -headers "Referer: https://来源网站" -i "视频URL" -c copy /tmp/download.mp4
```

**4. Python爬页面（小网站/博客）**
```bash
curl -sL "URL" | python3 -c "
import sys, re
html = sys.stdin.read()
for v in re.findall(r'(https?://[^\"\\\'<>]+\.(?:mp4|m3u8|flv)[^\"\\\'<>]*)', html): print(v)
for v in re.findall(r'<video[^>]*src=\"([^\"]+)\"', html): print(v)
"
```

**5. 浏览器嗅探（终极方案）**
浏览器打开 → Network面板 → 筛选Media → 找视频请求URL

**小网站/博客视频下载技巧：**
- 个人博客视频常是mp4直链，curl/ffmpeg直接下
- iframe外链看src里的真实链接
- 社交媒体（Twitter/X, Instagram等）用yt-dlp

#### 下载失败排查
```bash
curl -sI "URL" | head -5                           # 网站可访问？
yt-dlp --force-generic-extractor -v "URL"           # 强通用模式
```

### 第三步：分析视频结构
```bash
ffmpeg -i input.mp4 -filter:v "select='gt(scene,0.2)',showinfo" -f null - 2>&1 | grep pts_time
```

### 第四步：裁水印 + 截取精华片段
```bash
# 先提取一帧检查水印位置
ffmpeg -y -ss 5 -i input.mp4 -vframes 1 frame.jpg
# 裁剪并截取
ffmpeg -y -ss <开始秒> -i input.mp4 -t <时长> \
  -vf "crop=<宽>:<高>:<x偏移>:<y偏移>" \
  -c:v libx264 -preset fast -crf 22 -c:a aac -b:a 96k \
  /tmp/clips/seg_X.mp4
```

典型7段结构：
1. 开场（5-8s）→ 2. 第1球（10-15s）→ 3. 第2球（10-15s）
4. 对手进球（10-15s）→ 5. 第3球（10-15s）→ 6. 第4球（10-15s）
7. 最终比分/结束（5-8s）

### 第五步：拼接所有片段
```bash
for i in 0 1 2 3 4 5 6; do echo "file '/tmp/clips/seg_${i}.mp4'"; done > /tmp/clips/list.txt
ffmpeg -y -f concat -safe 0 -i /tmp/clips/list.txt -c copy /tmp/combined.mp4
```

### 第六步：写中文新闻稿文案
结构：开场问候 + 比赛信息 → 每个进球过程 + 比分 → 最终比分 + 总结

注意：用户习惯是"先写文案，直接做，不用等我确认"。

### 第七步：生成TTS中文配音
```bash
edge-tts --voice zh-CN-YunxiNeural --rate=+5% --text "<文案>" --write-media /tmp/commentary.mp3
```

### 第八步：加字幕 + 混音输出
```bash
ffmpeg -y -i /tmp/combined.mp4 -i /tmp/commentary.mp3 \
  -filter_complex "
    [0:v]drawtext=text='标题':fontcolor=#FFD700:fontsize=36:box=1:boxcolor=black@0.6:x=(w-text_w)/2:y=40:enable='between(t,0,5)',
           drawtext=text='1-0':fontcolor=#00FF00:fontsize=48:box=1:boxcolor=black@0.7:x=(w-text_w)/2:y=(h/2)-50:enable='between(t,<开始>,<结束>)'[v];
    [0:a]volume=0.1[a1];[1:a]adelay=500|500[a2];[a1][a2]amix=inputs=2:duration=first:dropout_transition=2[a]
  " -map "[v]" -map "[a]" -c:v libx264 -preset fast -crf 23 -c:a aac -b:a 128k /tmp/tech_video.mp4
```

### 第九步：发布
访问 http://<服务器IP>:8080/tech_video.mp4

## 注意事项
1. **不用Google/YouTube** — 只用Yahoo Japan搜索
2. **必须去水印** — crop滤镜裁剪掉源网站logo。Coverr视频水印可能在画面正中间（占70%画面），需要裁掉中间部分只留上下边缘
3. **替换原声** — 原声保留10-15%作为背景
4. **文案先写直接做** — 不要等用户确认
5. **只取进球片段** — 不要用整个集锦
6. **每球加比分字幕**
7. **多源验证比分** — 用ESPN或Yahoo Sports确认最终结果
8. **只发结果不发过程** — 张哥极度在意token消耗，不要描述操作步骤，只发链接和简短说明
9. **回复必须极短** — 一句话能说清的不写三段

## 已知陷阱

### 陷阱1：CCTV CDN海外封锁
CCTV的网宿CDN(WSSEA认证)对海外IP返回403。
- 换源到腾讯视频或Dailymotion
- 或通过国内代理中转
参考文件：`references/cctv-cdn-geoblocking-and-apis.md`

### 陷阱5：Dailymotion视频可能竖屏
Dailymotion的足球集锦有时是480x848竖屏。用ffmpeg加黑边补成16:9：
```bash
ffmpeg -i input.mp4 -vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2:black" output.mp4
```

### 陷阱6：雨燕直播等中文直播站可达性复杂
雨燕直播系(yuyanzb4.net等)用Cloudflare CDN。**注意：该站是国内打不开、国外能打开**（与直觉相反）。但本服务器(印度Hostinger)的IP仍被Cloudflare封锁，无法访问。详见 `references/chinese-streaming-sites-2026-06-13.md`

### 陷阱8：Coverr视频水印在画面中央
Coverr视频的水印可能在画面正中间，占70%高度。不能用简单的边缘裁剪。
需要裁掉中间部分，只保留上下各15%画面，然后拼接。
详见 `references/coverr-download-and-watermark.md`

### 陷阱9：Mixkit部分类别无法下载
Mixkit的news/nature类别URL返回HTTP 200但0字节。只有funny类别能正常下载。

### 陷阱12：竖屏转9:16格式（2026-06-15需求）

张哥要的9:16竖屏（1080x1920）手机视频，免费素材网站很少提供真正的9:16源。
解决方案：用ffmpeg把低分辨率竖屏视频（如848x480、640x360）放大到1080x1920：

```bash
# 方法1：竖屏视频→9:16（两边加黑边）
ffmpeg -i input.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:color=black" \
  -c:v libx264 -preset ultrafast -crf 30 -c:a aac -b:a 96k \
  output.mp4

# 方法2：只在片头30秒
ffmpeg -y -i input.mp4 -t 30 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2" \
  -c:v libx264 -preset ultrafast -crf 35 -c:a aac -b:a 64k \
  output.mp4
```

**参数说明：**
- `scale=1080:1920:force_original_aspect_ratio=decrease`：按比例缩放不超限
- `pad=1080:1920:(ow-iw)/2:(oh-ih)/2`：不足部分加黑边居中
- `-preset ultrafast`：最快编码（比fast快5倍，质量略降）
- `-crf 30~35`：低码率，搞笑视频不需要高清

**Dailymotion视频批量下载：**
```bash
# 从搜索页提取视频ID
curl -sL "https://www.dailymotion.com/search/funny/videos" | grep -oP '/video/[^"\\s]+' | sort -u

# 批量下载（下载到/root/news_clips/而非/tmp）
for vid in x9aiij2 x9a5in6 x4glnb1 x7eufu4 x8ydzcq; do
  yt-dlp --no-check-certificates \
    -o "/root/news_clips/dm_${vid}.mp4" \
    "https://www.dailymotion.com/video/$vid"
done
```

**Mixkit视频ID枚举下载：**
```bash
# funny分类IDs可枚举
for id in 3346 3351 3373 4103 44877 4606 4627 4640 4647 4688 4872 4886 49058; do
  curl -sL "https://assets.mixkit.co/videos/${id}/${id}-360.mp4" \
    -o "/root/news_clips/mixkit_${id}.mp4"
done
```

### 陷阱10：/tmp磁盘空间不足
/tmp是2GB tmpfs，视频文件多了会满（No space left on device）。
视频文件应放在/root/news_clips/，HTTP服务器从/root启动。

### 陷阱11：QQ语音消息无法保存
QQ语音消息通过临时URL(.amr)传递，有短时效(rkey验证)。
网关只做语音→文字转录，不保存音频文件。
需要用户以**文件附件**形式重新发送才能保存音频。

## 声音克隆与混音（2026-06-14新增需求）

张哥想克隆雨燕直播主播的声音，并与李永乐老师的声音混合，用于视频配音。

### 当前限制
- **本服务器无GPU**，无法运行本地声音克隆模型
- **QQ语音消息不可存** — 网关只转录文字，不保存音频文件。需用户以文件形式发送
- 声音克隆的可行路径详见 `references/voice-cloning-approach.md`

### 获取主播声音的方法
1. 让用户以**文件附件**发送（不是QQ语音消息）
2. 从用户PC本地录音文件获取
3. 从公开视频中提取（如果主播在Dailymotion/B站等平台有视频）

### 声音混合思路
- 提取两人声音的频谱特征，按比例混合
- 输出介于两者之间的中间态声音
- 工具：librosa + World声码器（服务器）或 RVC（用户PC）
- 详见 `references/voice-cloning-approach.md`

### 陷阱2：垂直视频处理
Dailymotion等来源可能是竖屏(480x848)。
```bash
ffmpeg -i input.mp4 -vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2:black" output.mp4
```

### 陷阱3：比分不确定
先查权威来源：
```bash
curl -sL "https://site.api.espn.com/apis/site/v2/sports/soccer/fifa.world/scoreboard"
```

### 陷阱4：YouTube机器人检测
需要cookie文件：
```bash
yt-dlp --cookies /path/to/cookies.txt "URL"
```

The user has provided the following instruction alongside the skill invocation: [IMPORTANT: You are running as a scheduled cron job. DELIVERY: Your final response will be automatically delivered to the user — do NOT use send_message or try to deliver the output yourself. Just produce your report/output as your final response and the system handles the rest. SILENT: If there is genuinely nothing new to report, respond with exactly "[SILENT]" (nothing else) to suppress delivery. Never combine [SILENT] with content — either report your findings normally, or say [SILENT] and nothing more.]

比赛结束后的新闻视频制作任务。执行以下步骤：

1. 先检查 /root/match_result.json 是否存在。如果不存在或比赛状态不是 "post"/"Final"，等待最多20分钟（每2分钟检查一次）。

2. 比赛结束后：
   a. 读取 /root/match_result.json 获取最终比分
   b. 用Yahoo Japan搜索 "法国VS塞内加尔 世界杯2026 集锦"，找v.qq.com或dailymotion的录像链接
   c. 用yt-dlp下载比赛录像到 /root/news_clips/match_raw.mp4
   d. 用ffmpeg scene检测找进球镜头
   e. 写中文解说词：开场→每个进球→最终比分→总结
   f. edge-tts生成中文配音（zh-CN-YunxiNeural男声）
   g. ffmpeg合成视频+配音（原声保留10%背景）+比分字幕
   h. 输出到 /root/news_clips/final_news.mp4

3. 输出完成后：
   a. 确保HTTP服务器在80端口运行（如果没有就启动）
   b. 把final_news.mp4复制到 /root/ 根目录
   c. 发结果：只发下载链接，不发任何过程描述

重要规则：
- 只发结果链接，不发过程
- 回复极短
- 如果找不到比赛视频，用Getty Images照片转幻灯片替代
- 如果80端口不行，试9000端口

## Response

法国3-1塞内加尔新闻视频已做好 ☕
http://157.173.212.215:9000/final_news.mp4
