| # Stack the five side-by-side arms into one labelled comparison video. | |
| # Each row is [pose reference | generated output], captioned with the RoPE shift applied, the dx | |
| # it predicts, and the dx actually measured by score_spatial.py. | |
| set -euo pipefail | |
| HERE=/home/xinyuy/flexvideo/LTX-2/test_spatial_offset | |
| SRC=$HERE/out_viz/with_condition | |
| FONT=/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf | |
| LABELS=( | |
| "A_base|A reference | output RoPE x +0 predicted dx 0 measured 0" | |
| "B_rope_x64|B reference | output RoPE x +64 predicted dx +64 measured +64" | |
| "C_rope_x128|C reference | output RoPE x +128 predicted dx +128 measured +128" | |
| "D_content_x128|D reference | output PIXELS +128 (control) predicted dx +128 measured +128" | |
| "E_rope_xm64|E reference | output RoPE x -64 predicted dx -64 measured -64 (reference partly off-frame)" | |
| ) | |
| inputs=() ; filters=() ; labels="" | |
| i=0 | |
| for entry in "${LABELS[@]}"; do | |
| IFS='|' read -r arm text <<<"$entry" | |
| inputs+=(-i "$SRC/$arm.mp4") | |
| # Escape the caption for drawtext, then reserve a 40px black bar above each row for it. | |
| esc=${text//:/\\:} | |
| filters+=("[$i:v]scale=960:320,pad=960:360:0:40:black,drawtext=fontfile=$FONT:text='$esc':fontcolor=white:fontsize=17:x=8:y=12[v$i]") | |
| labels+="[v$i]" | |
| i=$((i+1)) | |
| done | |
| ffmpeg -y -loglevel error "${inputs[@]}" \ | |
| -filter_complex "$(IFS=';'; echo "${filters[*]}");${labels}vstack=inputs=$i[out]" \ | |
| -map "[out]" -r 24 -c:v libx264 -crf 18 -pix_fmt yuv420p "$HERE/comparison_grid.mp4" | |
| echo "wrote $HERE/comparison_grid.mp4" | |
| ffprobe -v error -select_streams v:0 -show_entries stream=width,height,nb_frames -of csv=p=0 "$HERE/comparison_grid.mp4" | |
Xet Storage Details
- Size:
- 1.71 kB
- Xet hash:
- 3b4fd2c1a4f8c7a7a64c989755084e887584eca76c1adecb4f58d3416a687c54
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.