Video: final edit, checks; V4–V6 done
This commit is contained in:
6 files changed
+24
-7
No files matched your search
@@ -1 +1,3 @@
|
||||
out/
|
||||
__pycache__/
|
||||
node_modules/
|
||||
+3
-3
@@ -5,6 +5,6 @@
|
||||
- [x] V1 分镜与节拍:每个镜头的起止秒数、内容与对应节拍,整片按一个节拍网格剪
|
||||
- [x] V2 配乐:按节拍网格合成原创曲,WAV,无版权问题
|
||||
- [x] V3 真实录屏:六个应用各录真实操作(打开文件、编辑、导出等),1080p 以上,英文界面 — 七段,均 1920×1080 60fps,逐帧核过
|
||||
- [ ] V4 等轴场景:用官网同一套渲染器逐帧导出(无头浏览器,固定帧时间),开场、转场与结尾
|
||||
- [ ] V5 合成:录屏贴入等轴屏幕面或全屏,字幕中英,音画按节拍对齐
|
||||
- [ ] V6 导出与核对:H.264 + AAC MP4,时长约 90 秒,逐段检查画面与声音
|
||||
- [x] V4 等轴场景:用官网同一套渲染器逐帧导出(无头浏览器,固定帧时间),开场、转场与结尾
|
||||
- [x] V5 合成:录屏贴入等轴屏幕面或全屏,字幕中英,音画按节拍对齐
|
||||
- [x] V6 导出与核对:H.264 + AAC MP4,时长约 90 秒,逐段检查画面与声音
|
||||
Binary file not shown.
Executable
+15
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
# Pulls stills at boundaries and mid-sections for review.
|
||||
set -euo pipefail
|
||||
here="$(cd "$(dirname "$0")" && pwd)"
|
||||
film="$here/../out/ElyOffice-launch.mp4"
|
||||
out="$here/../out/edit/check"
|
||||
rm -rf "$out"
|
||||
mkdir -p "$out"
|
||||
ffprobe -v error -show_entries format=duration:stream=codec_name,profile,width,height,r_frame_rate,pix_fmt -of compact "$film"
|
||||
# Frames: scene ends, plate mids, cuts, inner cuts, section ends.
|
||||
frames=(0 120 257 258 400 514 515 545 578 579 640 700 771 772 805 835 836 870 899 900 960 1028 1029 1060 1092 1093 1120 1141 1142 1180 1221 1222 1260 1285
|
||||
1286 1320 1349 1350 1400 1450 1542 1543 1575 1607 1608 1630 1655 1656 1700 1799 1800 1835 1864 1865 1950 2057 2058 2200 2315 2450 2572 2699)
|
||||
expr=$(printf "+eq(n\\,%s)" "${frames[@]}")
|
||||
ffmpeg -v error -y -i "$film" -vf "select='${expr:1}'" -fps_mode passthrough -frame_pts 1 "$out/%05d.png"
|
||||
ls "$out" | wc -l
|
||||
@@ -42,8 +42,8 @@ def piecewise(points, var):
|
||||
|
||||
|
||||
def frames_expr(values):
|
||||
"""Per-frame value by input frame count."""
|
||||
return "+".join(f"eq(in,{k})*{v:.3f}" for k, v in enumerate(values))
|
||||
"""Per-frame value; perspective counts input frames from one."""
|
||||
return "+".join(f"eq(in,{k + 1})*{v:.3f}" for k, v in enumerate(values))
|
||||
|
||||
|
||||
def piece_chain(label, piece, start, f0, f1, out):
|
||||
@@ -109,7 +109,7 @@ def plate_chain(scene, rec, k, out):
|
||||
return (
|
||||
f"{rec},scale=800:450:flags=area,scale=1912:1072:flags=bicubic,format=rgba,"
|
||||
f"pad=1920:1080:4:4:color=black@0,setsar=1,perspective={pins}:sense=destination:eval=frame:interpolation=cubic"
|
||||
f"{fades}[pin];[{k}:v]format=rgba[bg];[bg][pin]overlay=format=rgb:shortest=1,format=rgb24,setsar=1[{out}]"
|
||||
f"{fades}[pin];[{k}:v]format=rgba[bg];[bg][pin]overlay=format=rgb:eof_action=repeat,format=rgb24,setsar=1[{out}]"
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
},
|
||||
{
|
||||
"app": "tree", "title": "ElyTree", "en": "Stage. Commit. Look back.", "zh": "暂存,提交,回看历史。",
|
||||
"focus": [960, 420],
|
||||
"focus": [830, 420],
|
||||
"pieces": [
|
||||
{ "src": "tree", "anchors": [[0, 0.8], [4, 3.6], [5, 4.1], [7, 7.2]] },
|
||||
{ "src": "tree", "anchors": [[7, 10.4], [8, 11.4], [9, 13.2], [11, 15.5], [16, 19.9]] }
|
||||
|
||||
Reference in new issue
Block a user