← Blog

No Mocap Suit: AI Watches a Video, the Character Dances the Whole Song

· 13 min read · 8 views
3D Motion Capture VRM MMD AI Videos Camera Movement
3D mocap test

No mocap suit:

AI watches a video and gets the character through a whole song

In two weeks, my 3D character Hina danced to motion from two sources: community-shared MMD motion and a phone video of a real dancer. The second route used no mocap suit. AI estimated the skeleton from the video, and the character could dance the full 60 seconds.

How it started

It started with an MMD Short

The experiment ran from October 4 to 16, 2026; I added the 360° videos and interactive stage on October 17–19. I chose the material, contacted the dancers, and reviewed the videos before deciding what to keep. AI (Claude Opus 5.5) wrote the conversion, measurement, and shot-planning code. Models change quickly, so these findings apply to the versions I used on those dates.

On October 4, 2026, I saw an MMD Short of hololive's 〈Go Wild〉. Community creator Taro² had made the motion file and shared it publicly. I happened to already have a 3D character: Hina.

The starting point: dekopon's 〈Go Wild〉 MMD Short · Open on YouTube ↗

Once she was dancing, I thought back to the conclusion of my previous post, 〈Can AI Fix a Dance Gone Wrong?〉: if something needs fixing, fix the motion data. What if I read that data straight from a video of a real dancer?

From phone video to 3D character: AI estimates the skeleton, saves motion for each frame, then applies it to the character
From phone video to 3D character: AI estimates the skeleton, saves motion for each frame, then applies it to the character

I found three videos of 〈くじら〉 on YouTube to test. Only after the results became stable did I write to the dancers. The surprise was that a phone video and AI, with no mocap suit, produced usable dance motion.

〈Go Wild〉: shared MMD motion, 12 moving camera shots · Open on YouTube ↗
〈くじら〉 side by side: 美弦's original above, Hina below · Open on YouTube ↗
Overview

Two routes in one table

Two routes—an existing motion file or motion read from video—both end up on the same character
Two routes—an existing motion file or motion read from video—both end up on the same character
Shared MMD motionReal-person video + AI
Where the motion comes fromA motion file made by a community creatorOne dance video; AI estimates the skeleton frame by frame
PermissionRead the Readme and credit three layersAsk the dancer before posting
What can breakLeg IK; the player overwrites motionSkeleton mismatch, character deformation, foot sliding, twitching
Expressions and lip shapes7 shapes entered by the creatorNone; I had to make them
Scale this time14 songs in one eveningOne 60-second dance, corrected in five rounds

MMD was fast, but its rules were in the Readme. Video mocap gave me more freedom, but it needed corrections and a conversation with the dancer first.

MMD

MMD: 14 songs in one evening; problems before and after conversion

The same Hina dancing 6 of the 14 songs shared by Taro²
The same Hina dancing 6 of the 14 songs shared by Taro²

The motion was ready-made. I had to mind the terms before conversion and the player after conversion.

StageWhat happensWhat I did
TermsConverted VRM motion files also count as redistribution; crediting only the motion creator leaves people outI do not publish the motion files. The interactive stage sends encrypted motion in segments, with no download offered. Credits name the original song, the original dancer, and the motion creator.
Leg IKAfter 40 MMD iterations, the ankle was still off by about 3% of leg lengthCalculate until convergence; stop if the error exceeds 0.5%
PlayerIt writes expressions every frame, pushes hands away from the hips, and pins the character back to the originTurn all three off when playing someone else's dance
ExpressionsOnly 7 match (blink, smile, five vowels)Use the lip shapes entered by the creator, not ones derived from the singing

Conversion and playback are separate stages. I measured both.

Camera

Camera: adjectives have no units; test clips do

The same 16.6-second dance with five camera versions, v1 through v5 from left to right
The same 16.6-second dance with five camera versions, v1 through v5 from left to right
VersionApproachWhat I learned
v1Fixed cameraThe motion was fine, but the image looked flat
v2Tracking shot, title-card background“Intense” was capped at the safe limit found in research
v3The motion drove the cameraI said “change angle”; AI took that as a camera being shoved off axis
v4Cut to another camera on each waveThe cameras clustered in front
v512 shots from multiple cameras, all movingCamera positions spread behind and directly above her

v5 is the 〈Go Wild〉 video at the top. v1 through v4 are unlisted videos: v1, v2, v3, v4; each version's video and notes are in the 〈Five Camera Versions〉 note.

v5's 3D camera map: drag to rotate, pinch to zoom. Tap a shot in the row below to fly its path from that camera at real speed. Colored lines are each camera's path in its shot; the small dot is the start, the arrow and camera are the end; the rings on the floor are 1, 2 and 3 m from her. The map's labels are in Chinese.

For camera direction, I had to specify three things: intensity, movement within a shot versus a cut, and where the cameras are placed. If I could not specify them, I asked AI for 3-second test clips and chose from those.

Camera direction

Camera direction as data: a shot vocabulary and a checker

The 31 shots automatically arranged for the 〈くじら〉 stage version, each cell showing its shot's middle frame
The 31 shots automatically arranged for the 〈くじら〉 stage version, each cell showing its shot's middle frame

I split camera direction into a library of templates for the program to sample, check, and replace when a shot failed. The checks used numbers: where a cut lands mid-motion, enough angular difference between adjacent shots, and keeping the subject in frame. I used the same rules for all 14 MMD songs. For the 〈くじら〉 stage version, I switched to a vocabulary compiled from Melies's camera index and arranged 31 shots from 64 standard camera moves.

The generator can sample freely. The checker is what catches bad shots before rendering.

Video mocap

Another route: AI reads motion from phone video

In short: SAM 3D Body estimates the person's 3D skeleton in each video frame, converts it into a motion file, and applies it to Hina. I made five rounds of corrections and kept a video of each round.

RoundWhat I correctedMeasured change
Direct captureBefore correction: hunched back, raised toes, twisted pelvisFull-song skeleton estimation: 806 seconds (one RTX 3090)
Rounds one and twoThe two skeletons' rest poses and Hina's joint limitsFrames with feet through the floor: 651 → 0; frames over joint limits: 0
Round threeFoot drift: lock each planted foot to its landing pointPlanted-foot sliding: 0.82 → 0 cm/frame; airborne frames: 13 → 0
Round fourTwitching: smooth each bone over timeFoot acceleration p99: 27.8 → 6.1 cm/frame²
Round fiveLeg shape; skip frames with unreliable fade-in or fade-out estimatesSkipped 28 frames at the start and 10 at the end
Direct capture: before correction · Open on YouTube ↗
Rounds one and two: rest poses and joint limits · Open on YouTube ↗
Round three: foot locking · Open on YouTube ↗
Round four: remove twitching · Open on YouTube ↗
Round five: leg shape (final) · Open on YouTube ↗

The first direct-capture video surprised me: even before correction, I could tell it was the same dance.

Choosing footage

Choosing footage: the cheapest correction

The three test videos had very different conditions:

VideoResolutionBitrateAverage brightness (0–255)Estimated forearm jitter (median)
A (美弦)1440×14401.2 Mbps623.4°/frame²
B1080×19205.4 Mbps1222.5°/frame²
C720×12641.0 Mbps11610.4°/frame²

C, the lowest-resolution video, had three to four times as much arm jitter as the other two. A was the darkest but did not jitter; darkness affected only the fade-in frames.

ConditionWhy
Fixed cameraA shaky camera makes the feet drift too
One person, full body in frameWhen feet leave the frame, ground contact cannot be estimated
Around 1080p, with enough bitrateLow resolution makes the arms jitter
No fade-in at the startI could only skip the darkest first 28 frames

I could not fix unsuitable footage downstream.

Skeleton

Skeletons and joints: different rest poses, a character that cannot hold the pose

Original footage above; corrected Hina below, at the same moment
Original footage above; corrected Hina below, at the same moment

Directly matching bone directions forced the difference between the skeletons' standing poses onto Hina. Copying how far each bone rotated from its rest pose made her stand upright. Legs were the exception: there I went back to matching directions.

Thigh lifted forward from 0° to 100°: too high, and the leg pokes through the skirt
Thigh lifted forward from 0° to 100°: too high, and the leg pokes through the skirt

The other half was what the character could physically hold. I moved one joint at a time, found the angle where the mesh began to break, and kept the motion inside that limit. The cost: her crouches and leg lifts were smaller than the dancer's.

The limits table describes the character, not a mistake in the motion.

Finished work

From a working test to a finished video

〈くじら〉 stage version: idol outfit, princess hairstyle, 31 automatically planned shots
〈くじら〉 stage version: idol outfit, princess hairstyle, 31 automatically planned shots
What was missingApproach
Full songI rendered only the first 20 seconds to check it; the motion file already covered the whole song, so extending the video only required another render
Lip syncSeparate the vocal track; closed, half-open, and open each take about one-third (554/611/629 frames)
BlinkingBlink once every 2.5–5.5 seconds of video time; using computer time makes her blink constantly
CameraKeep the camera at least 1 m high and use only full-body shots from behind. The first version had 7 low-angle shots, so I wrote a check to reject them
360°Viewers may turn to look behind them: I added audience members at the back and sides, trusses, and a halo, then rendered two 8K (7680×4096) videos, one from the front and one from the side
〈くじら〉 stage version: idol outfit, princess hairstyle, 31 automatically planned shots · Open on YouTube ↗

The 360° item in the table became two 8K videos, with a camera in front of her and another at her side. On a computer, you can drag the player to look around the whole stage. In the YouTube App on a phone, you can turn the phone; a VR headset works too.

〈くじら〉 360°: camera in front · Open on YouTube ↗
〈くじら〉 360°: camera at the side · Open on YouTube ↗

When rendering is slower than playback, anything tied to time must use video time. Camera problems have to be caught before rendering.

Interactive stage

Look around yourself: switch among 14 MMD songs

A video only shows the shots I chose. I also made an interactive stage for the 14 MMD dances in the 〈Go Wild〉 batch. The YouTube Short plays at the lower right while Hina dances the same motion onstage, synchronized to the video's time. You can pause at any time, change songs from the lower-left menu, drag to orbit around her, and zoom in or out.

Taro²'s terms prohibit redistribution of the motion files, so the stage sends encrypted motion in segments and offers no download. The music plays through the YouTube player; the page itself contains no audio.

On a phone, the YouTube player at the lower right covers her legs. The view is more complete on a computer.

Permission

Ask before posting; trim before uploading

Side-by-side version: 美弦's original above, Hina below
Side-by-side version: 美弦's original above, Hina below

This is someone else's dance. I asked three dancers before posting: one agreed, one did not want it published, and one did not reply. I published only the dance whose dancer agreed.

There was another hurdle before upload: a Short claimed by Content ID is blocked worldwide if it runs over 1 minute. One MMD video in the batch was restored only after I cut it to 58 seconds; I cut 〈くじら〉 from 60.6 to 59.8 seconds.

Side paths

Things I also tried

What I triedWhyResult
JIZURA title-card backgroundThe MMD background looked too plainThe cards needed to sit behind her and share the camera's perspective before the camera movement showed
AI-built stageI wanted a concert feelThe lights, LED wall, and cold sparks were all built in code; that is the stage version above
FlowerDance music-to-dance modelI wanted to see if AI could choreograph on its ownNext to the traced dance, it still fell short. The model had no license terms, so I kept it locally
Motion exaggerationA mocap performer suggested amplifying the motionIt was too exaggerated and uncomfortable to watch, so I set it aside

I tried these side paths once. Two questions remained in the main work: where the motion came from and how I arranged the shots.

Current state

What works, and what is still missing

DoneStill missing
14 MMD songs in one eveningJumps: hip height still follows the lower foot
Full 60-second video mocapFingers remain fixed
Foot locking, lip sync, blinkingNo separate mouth shapes for the five Japanese vowels
Framing rules implemented as checksThe skirt tears when a thigh lifts forward and moves outward at the same time
Interactive stage with 14 selectable songsOn phones, the YouTube player covers her legs

As of October 2026, one phone video shot under good conditions, plus AI, was enough to make a 3D character dance a whole song.

Take this part

Copy this for your AI agent

If you have a dance video you want your character to follow, paste the following into your AI.

First read this article: https://blog.joneshong.com/zh/blog/hina-dance-video-mocap/ Then help me make my 3D character dance the same dance as the person in a video: 1. Assess whether the video is suitable: fixed camera, one person fully in frame, resolution, bitrate, and whether it fades in. Report each item and give numbers wherever measurable. 2. Estimate the 3D skeleton from the video and convert it into a motion file for my character. After conversion, measure foot sliding per frame during ground contact and check whether the motion exceeds the character's joint limits. 3. Remind me to ask the dancer before posting. Use an existing tool if you can find one; do not rewrite it yourself.
References

Further reading

ResourceWhy it matters
dekopon 〈Go Wild〉 MMD ShortThis started the whole thing; seeing it made me want Hina to dance
Taro² (BowlRoll)Creator of the 14 dances; his Readme was my model for reading the terms and listing the three layers of credit
JIZURAGenerates lyric-timed title cards (MIT licensed); it showed me that a flat background does not reveal camera movement
Melies: Cinematic TechniquesSource for the shot vocabulary; it replaced “intense camera movement” with named, defined moves
SAM 3D BodyEstimates a 3D skeleton from one video—the start of the second route. Meta's SAM License (2025-11-19 version) allows free use, modification, and redistribution; published work made with SAM must acknowledge its use
FlowerDanceA music-to-dance model (ECCV 2026); trying it showed me how far music-generated dance still is from a traced dance
〈Can AI Fix a Dance Gone Wrong?〉That post's conclusion, “fix the motion data,” led me to try a video of a real dancer
〈Sharing My Customizable Doll: From One Design to 3D〉How I made Hina
Three notes: Five Camera Versions, 14 MMD Songs in One Evening, Motion CaptureThe videos and measurements for each version are there

Rights to music, dance, and motion

The songs, dances, and motion in this post belong to their respective rights holders. I include them only to explain the experiment's results. Rights holders who want something removed can leave a comment.

TypeWork and rights holderWhere it appears
MusicYaffle 〈くじら (feat. Sahnya)〉The audio in the 〈くじら〉 side-by-side and stage versions, two 360° videos, and five process videos plays on YouTube
Choreography and original video美弦 (@mitsuru_SelfChoreograph)The motion source for video mocap and the side-by-side screenshot; I obtained permission before posting
Music and choreography轟はじめ 〈Go Wild〉 (hololive)The audio and dance in the five 〈Go Wild〉 camera versions; Taro² traced the MMD motion from 轟はじめ's own Short
MMD motionTaro² (shared on BowlRoll)14 MMD dances; motion on the interactive stage is encrypted and sent in segments, with no download offered
Songs on the interactive stageEach of the 14 songs belongs to its respective rights holderOnly my uploaded Short plays through the YouTube player; the stage page itself contains no audio
✦ Copy Prompt