e68801eb593d7f14fce6fbde63f3b9ed00d9727e
3 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
e68801eb59 |
fix(ingest): 转码滤镜改按长边 1920 封顶(修复超宽屏误降级)+ 合并 ffprobe
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2m6s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m46s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 28s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m28s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m55s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 6m18s
AI Code Review / AI Code Review (pull_request) Successful in 9m20s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 13m37s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 15m54s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 21m45s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 29m4s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 20m45s
CI/CD Pipeline / CI Gate (pull_request) Successful in 1m7s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 4m14s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 4m46s
Code Review 阻塞问题修复 + 建议采纳:
1. 缩放规则与校验规则对齐(真 bug):
旧滤镜仅按短边 1080 触发缩放(横屏看 ih、竖屏看 iw),对超宽屏
(如 4000x1000)短边不超 1080 完全不缩放,产物长边 4000 超过
validate_transcode_output 的 1920 上限,转码被判定失败而降级用
原始 HEVC——浏览器仍无法播放。改为统一滤镜:
scale=w=if(gte(iw\,ih)\,min(1920\,iw)\,-2):
h=if(gt(ih\,iw)\,min(1920\,ih)\,-2),format=yuv420p
横屏限宽、竖屏限高、短边 -2 自适应,min() 保证小视频不放大;
build_transcode_vf 不再需要 is_portrait 参数(方向无关)。
ffmpeg 实测:1920x1080→1920x1080、4K竖屏→1080x1920、
4000x1000→1920x480、1080x2400→864x1920、640x360 不放大,均无 side data。
2. 合并 ffprobe(性能建议):新增 probe_video_info(path) 一次
-show_streams -of json 同时解析 width/height 与 Display Matrix
rotation(用全量 JSON 输出,规避 show_entries 嵌套 section 名在
ffmpeg 4.x/7.x 不一致的问题);主流程两次探测合并为一次。
probe_rotation/probe_dimensions 保留供测试与 validate 复用。
3. 临时文件清理:转码 try 块 finally 中 _tc_tmp.unlink() 在 #1449
即已存在(develop 基线代码),本轮 review 该条为窗口外误判,
已在 PR 评论说明。
测试:
- TestBuildTranscodeVF 重写为统一滤镜断言(逗号转义、无 transpose、
横竖双分支 min(1920)、yuv420p 后缀)。
- 新增 TestProbeVideoInfo(真实 ffprobe 320x240 无 rotation;
不存在文件返回三元 None)。
- 端到端新增 test_ultra_wide_long_edge_capped(4000x1000→1920x480
且 validate 通过);_transcode_like_production 改用 probe_video_info
+ 无参 build_transcode_vf,与生产完全一致。
- 任务级竖屏用例滤镜特征断言更新为 min(1920)。
|
||
|
|
b03d19cf32 |
fix(ingest): 方向判定改为按显示方向(物理竖屏 rotation=0 不再误判横屏)
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2m30s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m18s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 4m6s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m19s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 31s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m26s
AI Code Review / AI Code Review (pull_request) Failing after 7m44s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 8m21s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 10m34s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
Code Review 阻塞问题修复: 旧逻辑仅以 rotation side data 判定竖屏(is_portrait_rotation),对 "已物理旋转、存储即 h>w、rotation=0/None"的竖屏视频(Android 拍摄常见) 会误判为横屏:套用横屏按高缩放滤镜把 1080x1920 压成 608x1080,产物被 validate_transcode_output 拦截后降级使用原始 HEVC 文件——此类视频在 浏览器仍无法播放(HEVC 黑帧),转码链路对这类素材完全失效。 修复: - 新增 is_portrait_video(stored_w, stored_h, rotation):rotation 为 90/270/-90 时显示宽高相对存储维度互换,否则显示方向即存储维度,按 显示 h>w 判定竖屏;维度探测失败时退回仅看 rotation。 - 主流程 Step 2 同时 probe 源文件维度与 rotation,按显示方向选滤镜。 - is_portrait_rotation 保留并补充注释(仅覆盖 iOS 风格 side data)。 测试补充: - TestIsPortraitVideo:iOS 风格(1920x1080+rotation90)、物理竖屏 (1080x1920 无 rotation)、横屏、rotation=180 不互换、探测失败回退。 - 端到端新增 test_physical_portrait_hevc_no_rotation:真实 ffmpeg 造 1080x1920 无 side data 的 HEVC,断言转码后仍为 1080x1920 h264。 - 任务级新增 test_physical_portrait_no_rotation_still_transcodes: 断言物理竖屏也走转码、改写 storage_key、使用按宽缩放滤镜。 - FONT 改为多路径候选查找,缺失时 drawtext 降级(仅红条标记), 测试不再硬依赖 Debian 字体路径。 注:转码临时文件的 finally 清理逻辑在 #1449 中已存在(ingest.py 转码 try 块 finally 段 unlink _tc_tmp),本次审查该条为窗口外误判。 |
||
|
|
18aed0c34b |
fix(ingest): 修复竖屏 HEVC 转码方向错误(双重旋转/ffprobe 取错行/逗号转义)
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3m1s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m39s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m19s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m24s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 4m35s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m50s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 7m51s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 8m43s
AI Code Review / AI Code Review (pull_request) Successful in 9m14s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 17m57s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 16m37s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
竖屏 iPhone HEVC 素材转码后方向错乱(竖屏变横屏),实测定位三个根因:
1. 双重旋转:ffmpeg 默认 autorotate 已按 display matrix 物理旋转画面,
代码又显式追加 transpose=1,导致 r90 竖屏被转成 1920x1080 横屏。
旋转全部交给 autorotate,滤镜只做 scale。
2. ffprobe 取错行:探测命令同时输出 side_data=rotation 和
stream_tags=rotate 两行(r90 文件输出 270/90 两行),split("\n")[0]
取到 270,方向判定反了。改为只读 side_data 单行并 int 化。
3. scale 表达式逗号未转义:if(gt(ih,1080),...) 中的裸逗号被当作
filter 分隔,报 Invalid size。统一用 \, 转义(raw string 字面量)。
附带修复:
- 竖屏按宽、横屏按高缩放(旋转后竖屏 w<h,旧代码竖屏沿用按高缩放
会把 1080x1920 错缩为 608x1080),长边封顶 1080 只缩不放。
- 移除无效的 -metadata:s:v:0 rotate=0(实测清不掉 display matrix
side data,autorotate 方案产物本身已无 side data)。
- 转码后强制方向/维度校验 validate_transcode_output:竖屏产物必须
h>w、横屏 w>=h、长边 <=1920、无残留 rotation side data;校验失败
打 error 日志并降级使用原始文件、不上传 OSS,杜绝横屏文件覆盖。
测试:
- test_ingest_hevc_transcode.py 重写(22 用例):纯逻辑断言 +
真实 ffmpeg 端到端(r90/r270/横屏/4K 素材造 display matrix,
断言 1080x1920 / 1920x1080 / h264 / 无 side data / 缩略图竖版)。
- test_ingest_hevc_transcode_task.py 新增(4 用例):任务级 mock
验证成功改写 storage_key、校验失败降级+error 日志、ffmpeg 非零
降级、非 HEVC 不转码。
|