]> git.sesse.net Git - nageru-docs/blob - futatabi.rst
Bump version number.
[nageru-docs] / futatabi.rst
1 Futatabi: Real-time instant replay with slow motion
2 ===================================================
3
4 Futatabi (after the Japanese word *futatabi*, 再び, meaning “again” or
5 “for the second time”) is a system for instant replay. Even though Futatabi
6 is meant to be used with Nageru, shares some code with it and is built from
7 the same source distribution, it is a separate
8 application. Futatabi is meant for slow motion for e.g. sports broadcasts, but
9 can also be used as a more generic multitrack recorder for later editing.
10
11 Futatabi supports *interpolated* slow motion, meaning you do not need to buy
12 a high-speed 120 fps camera to get smooth 60 fps output after slowdown—Futatabi
13 will automatically synthesize in-between frames for you during playback.
14 Good interpolation, especially in realtime, is a difficult problem, and not all
15 content will do equally well. Most content should do quite acceptably, especially
16 considering that half of the frames will actually be originals, but you
17 will need to see in practice what actually works for you. Interpolation can
18 also be used for frame rate conversion (e.g. 50 to 59.94 fps).
19
20 Futatabi currently uses a GPU reimplementation of
21 `Fast Optical Flow using Dense Inverse Search (DIS) <https://github.com/tikroeger/OF_DIS>`_
22 by Kroeger et al, together with about half of the algorithm from
23 `Occlusion Reasoning for Temporal Interpolation Using Optical Flow <https://www.microsoft.com/en-us/research/publication/occlusion-reasoning-for-temporal-interpolation-using-optical-flow/>`_
24 (to do the actual interpolation based on the estimated
25 optical flow), although this may change in the future.
26
27 Since Futatabi is part of the Nageru source distribution, its version number
28 mirrors Nageru. Thus, the first version of Futatabi is version 1.8.0,
29 which is the Nageru version when it was first introduced.
30
31
32 System requirements
33 -------------------
34
35 It is strongly recommended to run Futatabi on a separate machine from Nageru,
36 not the least because you probably want a different person to operate the replay
37 while the producer is operating Nageru. (See :ref:`coop`.)
38
39 Like Nageru, Futatabi uses your GPU for nearly all image processing.
40 However, unlike Nageru, Futatabi requires a powerful GPU for interpolation;
41 a GTX 1080 or similar is recommended for interpolated 720p60. (Futatabi
42 was initially developed on a GTX 950, which is passable, but has little
43 performance margin.) If you have a slower GPU and are happy with worse
44 quality, or just wish to test, you can use a faster preset, or turn off
45 interpolation entirely. Futatabi requires OpenGL 4.5 or newer.
46
47 For other required libraries, see :ref:`compile`; when you build Nageru,
48 you also build Futatabi.
49
50
51 Getting started
52 ---------------
53
54 Futatabi always pulls data from Nageru over the network; it doesn't support SDI
55 input or output. Assuming you have a recent version of Nageru (typically one
56 that comes with Futatabi), it is capable of sending all of its cameras as one
57 video stream (see :ref:`futatabiformat`), so you can start Futatabi with
58
59   ./futatabi http://nageru-server.example.org/multicam.mp4
60
61 If you do not have a running Nageru installation, see :ref:`sampledata`.
62
63 Once you are up and connected, Futatabi will start recording all of the frames
64 to disk. This process happens continuously for as long as you have disk space,
65 even if you are playing something back or editing clips, and the streams are
66 displayed in real time in mini-display as they come in. You make replays in
67 the form of *clips* (the top list is the clip list), which are then queued into
68 the *playlist* (the bottom list). Your end result is a live HTTP stream that
69 can be fed back into Nageru as a video input; by default, Futatabi listens
70 on port 9096.
71
72 Futatabi has the concept of a *workspace*, which defaults to your current
73 directory (you can change it with the -d option). This holds all of the
74 recorded frames, all metadata about clips, and preferences set from the menus
75 (interpolation quality and cue point padding).  If you quit Futatabi and
76 restart it (or you go down as the result of a power failure or the likes),
77 it will remember all the state and frames for you. As a special case,
78 if you give */dev/null* in place of an input URL or file, you can keep using
79 your workspace without getting any new frames added.
80
81 .. _basicui:
82
83 Basic UI operations
84 '''''''''''''''''''
85
86 Nageru can be operated using either the keyboard and mouse, or using a MIDI
87 controller with some help of the mouse. In this section, we will be discussing
88 the keyboard and mouse only; see :ref:`midi-futatabi` for details on using MIDI
89 controllers.
90
91 A clip in the clip list consists simply of an in and an out point; it represents
92 an interval of physical time (although timed to the video clock). A clip in the
93 playlist contains the same information plus some playback parameters, in particular
94 which camera (stream) to play back.
95
96 Clicking the ”Cue in” button, or pressing the A key, will start a new clip in
97 the clip list that begins at the current time. Similarly, clicking the ”Cue
98 out” button, or pressing the S key, will set the end point for said clip.
99 (If you click a button twice, it will overwrite the previous result.)
100 Now it is in a state where you can queue it to the play list (mark the camera
101 you want to use and click the “Queue” button, or Q on the keyboard—you can queue
102 a clip multiple times with different cameras) for
103 playing, or you can preview them using the “Preview” button (W on the
104 keyboard). Previewing can be done either from the clip list the clip list or
105 the playlist; they will not be interpolated or faded, but will be played back
106 in the right
107
108 You can edit cue points, both in the clip and the playlist, in two ways:
109 Either use the scroll wheel on the mouse, or hold down the left mouse button
110 and scrub left or right. (You can hold down Shift to change ten times as fast,
111 or Alt to change at one-tenth the speed.) You'll see the new cue points as you
112 change them in the preview window. You can also give clips names; these don't
113 mean anything, but can be good references to locate a specific kind of clip
114 for later use. Once you're happy with a playlist, and your producer is ready
115 to cut to your channel, click on the first clip you want to play back and
116 click the “Play” button (space on the keyboard); the result will both be
117 visible in the top screen and go out live over the network to Nageru.
118
119 .. _speed:
120
121 Controlling the playback speed
122 ''''''''''''''''''''''''''''''
123
124 Most slow motion is at 0.5x speed (or equivalently, “2x slow motion”),
125 and when you queue a clip from the clip list to the playlist, this is what
126 it gets by default. However, you are free to change it to whatever you wish,
127 like 0.333x, 0.25x (both are fairly common “super slow” standards) or even 1.0x.
128 As long as you are reasonably close to a rational number with low integers
129 (e.g. 1/2, 2/3, etc.), Futatabi will do its best to try to reuse as many
130 original frames as possible, keeping quality and performance at their highest
131 levels.
132
133 In addition to the per-clip speed, it is often interesting to change the
134 speed *during* playback of a clip. For instance, you could keep normal
135 slow motion (0.5x) speed in the run-up to a shot, ramp down to 0.1x to get
136 a good look at the actual shot, and then ramp back once it's done.
137 When done right and not overused, this can create a dramatic effect that's
138 hard to replicate using constant slowdown.
139
140 To this effect, Futatabi supports a *master speed* control. It is found at
141 the bottom of the window (or you can :ref:`control it using a MIDI device <midi-futatabi>`);
142 note that by default, it is locked at 100% until you click the lock button
143 to unlock it. (This is particularly important when using a MIDI device, where it is very easy
144 to touch a slider inadvertedly, and very hard to set it back exactly at 100%.)
145 The master speed control is multiplied in on top of all other speed factors,
146 so if you have e.g. a clip at 0.5x and the master speed is set to 70%,
147 the clip will effectively play back at 0.35x. The master speed can be set between
148 10% and 200%, inclusive.
149
150 Note that the master speed control governs the speed of the *output* clock,
151 unlike any other speed control in Futatabi. In particular, this means that unlike
152 the regular clip speeds, it affects fade times; if fade time is at 0.5 seconds
153 and master speed is set to 70%, the fade will take approximately 0.714 seconds
154 (0.5 divided by 0.7). It also means that the “remaining time” displays will be
155 wrong if master speed is not at 100%. This is because the master speed
156 is by nature unpredictable (the user can change it at any time); one cannot
157 e.g. delay fades when the master speed is reduced, since turning it back up
158 would mean the start of the fade were simply missed. Similarly, it is impossible
159 to give a proper estimate of time remaining that takes master speed into account;
160 it would be overestimating time significantly, given that the operator is likely
161 to turn it back up to 100% again soon.
162
163 Finally, note that when changing master speed, the speed is no longer at a
164 rational, so most frames will be interpolated frames. If your GPU is not fast
165 enough to interpolate every frame (ie., it is reliant on Futatabi's usual
166 reuse of original frames), it will drop output frames. Normal behavior will
167 resume from the next clip, when the clocks will again go in lockstep (assuming the master
168 speed is at 100% at that point). If you're not ramping, or if you're done ramping,
169 it's recommended to keep the speed lock on to avoid inadvertedly changing the speed.
170
171 .. _coop:
172
173 Working with your producer
174 ''''''''''''''''''''''''''
175
176 Generally, we recommend that the producer (Nageru operator) and slow motion
177 operator (Futatabi operator) sit closely together and can communicate verbally.
178 Good cooperation between the two is essential to get a good final product;
179 especially the switches to and from the replays can be a critical point.
180
181 The general rule for working together is fairly obvious: The producer should
182 switch to a replay when there's something to show, and switch away when there's
183 nothing more to show (or, less ideally, when something live takes priority).
184 Generally, when you have a playlist ready, inform your producer; they will
185 count you in (three, two, one, go). At one, start playing so that you have some
186 margin. If the Nageru theme is set up correctly (see :ref:`talkback`), they will
187 know how much is queued up so that they can switch back before the replay runs
188 out, but it doesn't hurt to give a warning up-front. The producer might also
189 be able to request replays of specific events, or ask you to save something
190 for later if they can't show it right now (e.g. a foul situation that wasn't called).
191
192 Audio support
193 '''''''''''''
194
195 Since version 1.8.5, Futatabi has limited audio support. It is recorded
196 (assuming Nageru is also at version 1.8.5 or newer) and saved for all inputs,
197 and played back when showing a replay, but only when the replay speed is at
198 100%, or very close to it. (At other speeds, you will get silence.)
199 Furthermore, there is no local audio output; the Futatabi operator will not
200 hear any audio, unless they use a video player into the Futatabi stream locally
201 (with associated delay). All of this may change in the future.
202
203
204 Replay workflows
205 ----------------
206
207 On top of the basics outlined in :ref:`basicui`, there are many possible
208 workflows; we'll discuss only two. Try out a few and see which ones fit your
209 style and type of event.
210
211 Repeated cue-in
212 '''''''''''''''
213
214 In many sports, you don't necessarily know when a replay-worthy event has happened
215 before it's already happened. However, you may reasonably know when something is
216 *not* happening, and it would be a good time to start a clip if something is happening
217 immediately afterwards. At these points, you can make repeated cue-ins, ie., start
218 a clip without finishing it. As long as you keep making cue-ins, the previous one
219 will be discarded. Once you see that something *is* happening, you can wait until
220 it's done, and then do a cue-out, which gives you a good clip immediately.
221
222 For instance, in a basketball game, you could be seeing a series of uninteresting
223 passes, clicking cue-in on each of them. However, once it looks like there's an
224 opportunity for a score, you can hold and see what happens; if the shot happens,
225 you can click cue-out, and if not, you can go back.
226
227 Before playing the clip, you can make adjustments to the in and out points
228 as detailed above. This will help you trim away any uninteresting lead-ups,
229 or add more margins for fades. If you consistently find that you have too
230 little margin, you can use the *cue point padding* feature (either from the
231 command line using *--cue-in-point-padding* and *--cue-out-point-padding*, or set from the menu). If you set
232 cue in point padding to e.g. two seconds, the cue-in point will automatically be set
233 two seconds ago when you cue-in, and similarly, if you set cue out point padding,
234 the cue-out point will be set two seconds
235 into the future when you cue-out. (Cue-in and cue-out point padding were one
236 joint setting before Futatabi 1.8.3.)
237
238
239 Instant clips
240 '''''''''''''
241
242 Like the previous section explained how you generally would know the *start*
243 of an interesting event (at least if discarding most of the candidates),
244 you would be even more sure about the *end* of one. Thus, you can simply wait
245 until something interesting has happened, and then click cue-in immediately
246 followed by cue-out. This will give you a clip of near zero length, ending
247 at the right point. Then, edit this clip to set the starting point as needed,
248 and it's ready to play.
249
250 Again, you can use the cue point padding feature to your advantage; if so,
251 your clips will not be of zero length, but rather of some predefined length
252 given by your chosen cue point padding.
253
254
255 .. _sampledata:
256
257 Sample multicamera data
258 '''''''''''''''''''''''
259
260 Good multicamera sample video is hard to come by, so it can be hard to
261 test or train before an actual event. To alleviate this, I've uploaded some
262 real-world video from the very first event where an early version of Futatabi
263 was tested. (There are some issues with the JPEG quality, but it should
264 largely be unproblematic.) You are free to use these for training or
265 demonstration purposes. Do note that they will not be displayed entirely
266 correctly in most video players (see :ref:`futatabiformat`), although
267 they will certainly be watchable.
268
269 There are two files:
270
271  * `Trøndisk 2018, final only (MJPEG, 126 GB) <https://storage.sesse.net/trondisk2018-final-multicam-mjpeg.mkv>`_:
272    The final match, in MJPEG format (about 73 minutes). This can be downloaded
273    and then fed directly to Futatabi as if it were a real camera stream
274    (remember the --slow-down-input option).
275  * `Trøndisk 2018, entire tournament (H.264, 74 GB) <https://storage.sesse.net/trondisk2018-multicam-h264.mp4>`_:
276    The entire first part of the tournament,
277    with no cuts (about 12 hours). However, due to space and bandwidth
278    constraints, it has been transcoded to H.264 (with some associated
279    quality loss), and needs to be transcoded to MJPEG before Nageru can use it.
280
281 Both files are mixed-resolution, with some cameras at 1080p59.94 and some
282 at 720p59.94 (one even switches between matches, as the camera was replaced).
283 They contain four different camera angles (overview camera on crane, detail camera
284 in tripod, two fixed endzone overhead cameras) with differing quality depending
285 on the camera operators. In short, they should be realistic input material
286 to practice with.
287
288
289 .. _futatabiformat:
290
291 Internal video format details
292 -----------------------------
293
294 Futatabi expects to get data in MJPEG format only; though MJPEG is old,
295 it yields fairly good quality per bit for an intraframe format, supports
296 4:2:2 without too many issues, and has hardware support through VA-API
297 for both decode (since Ivy Bridge) and encode (since Skylake). The latter
298 is especially important for Futatabi, since there are so many high-resolution
299 streams; software encode/decode of several 1080p60 streams at the same time
300 is fairly taxing on the CPU if done in software. This means we can easily
301 send 4:2:2 camera streams back and forth between Nageru and Futatabi without having
302 to scale or do other lossy processing (except of course the compression itself).
303
304 However, JPEG as such does not have any way of specifying things like color
305 spaces and chroma placement. JFIF, the *de facto* JPEG standard container,
306 specifies conventions that are widely followed, but they do not match what
307 comes out of a capture card. Nageru's multicam export _does_ set the appropriate
308 fields in the output Matroska mux (which is pretty much the only mux that can
309 hold such information), but there are few if any programs that read them and give
310 them priority over JFIF's defaults. Thus, if you want to use the multicam stream
311 for something other than Futatabi, or feed Futatabi with data not from Nageru,
312 there are a few subtle issues to keep in mind.
313
314 In particular:
315
316   * Capture cards typically send limited-range Y'CbCr (luma between 16..235
317     and chroma between 16..240); JFIF is traditionally full-range (0..255
318     for both). (See also :ref:`synthetictests`.) Note that there is a special
319     private JPEG comment added to signal this, which FFmpeg understands.
320   * JFIF, like MPEG, assumes center chroma placement; capture cards and most
321     modern video standards assume left.
322   * JFIF assumes Rec. 601 Y'CbCr coefficients, while all modern HD processing
323     uses Rec. 709 Y'CbCr coefficients. (Futatabi does not care much about
324     the actual RGB color space; Nageru assumes it is Rec. 709, like for capture
325     cards, but the differences between 601 and 709 here are small. sRGB gamma
326     is assumed throughout, like in JFIF.)
327
328 Many players may also be confused by the fact that the resolution can change
329 from frame to frame; this is because for original (uninterpolated) frames,
330 Futatabi will simply output the received JPEG frame directly to the output
331 stream, which can be a different resolution from the interpolated frames.
332
333 Also, even though Futatabi exists to make a fixed-framerate stream out of
334 something that's not, the output stream can be variable-framerate (VFR) due to
335 pauses and frame drops. In particular, when the stream is paused, frames are
336 only output about every 100 milliseconds.
337
338 Finally, the subtitle track with status information (see :ref:`talkback`) is
339 not marked as metadata due to FFmpeg limitations, and as such will show up
340 raw in subtitle-enabled players.
341
342
343 .. _midi-futatabi:
344
345 Using MIDI controllers
346 ----------------------
347
348 This section assumes you have already read the section about
349 `MIDI controllers in Nageru <audio.html#midi-controllers>`__. MIDI controllers
350 in Futatabi are fairly similar, but there are also some important differences,
351 since they control replay and not audio:
352
353   * There is no concept of a bus (there is only one video output channel).
354     Thus, the concept of guessing also is obsolete.
355   * Since there are no buses, there are also usually plenty of buttons
356     and controls, rendering the bank concept less useful. It *is* supported,
357     but activity highlights (to show which bank is active) are not.
358   * Finally, outputs (controller lights and button lights) frequently have
359     more than one state depending on the velocity sent, e.g. 1 for on and 2 for
360     blinking. Thus, the Futatabi MIDI mapping editor allows you to change the
361     note velocities from the default 1.
362
363 Futatabi has been tested with the `Behringer CMD PL-1 <https://www.musictribe.com/Categories/Behringer/Computer-Audio/DJ-Controllers/CMD-PL-1/p/P0AJF>`_;
364 it is not originally designed for slow motion (it is a DJ controller), but provides everything you
365 need (a jog wheel, a slider that works as a T bar for master speed, and plenty
366 of buttons) at a fraction of the price of a “real” slow motion remote.
367 A sample MIDI mapping is included with Futatabi.
368
369 Futatabi currently does not support classic RS-422 controllers, only MIDI
370 controllers.
371
372
373 Monitoring
374 ----------
375
376 .. _talkback:
377
378 Tally and status talkback
379 '''''''''''''''''''''''''
380
381 In addition to the verbal communication between the two operators
382 (see :ref:`coop`), it is also useful to have automatic communication
383 between Nageru and Futatabi. This goes both ways.
384
385 First, Futatabi can consume :ref:`Nageru's tally data <tally>` like any camera
386 can; give the correct channel URL to *--tally-url* on the Futatabi command line,
387 and the color around the live view will show up when you are ready or playing
388 (e.g. *--tally-url http://nageru-server.example.org:9096/channels/2*).
389
390 Second, Futatabi can export its current status in two ways. The simplest is
391 through a REST call; the HTTP server that exposes the stream also exposes
392 the endpoint */queue_status* (e.g. http://futatabi-server.example.org:9096/queue_status).
393 This contains the same text as is below the live window, ie., how much time
394 is queued or left.
395
396 The same status is also exported programmatically in the video output from
397 Futatabi, as a subtitle track. This allows the Nageru theme not only to display
398 it if desired, but even to act automatically to switch to a different channel
399 when the playlist is nearing its end. (See :ref:`subtitle-ingest` for information
400 on how to digest such information from the Nageru side.)
401
402 Each subtitle entry is displayed momentarily before the frame it belongs to,
403 and has the following format:
404
405   Futatabi 1.8.2;PLAYING;6.995;0:06.995 left
406
407 The semicolon-separated columns are as follows:
408
409   * The first column is the identifier for the Futatabi version in use; if the format
410     should ever diverge between versions, it can serve as a way to distinguish between
411     them if needed. (The version may also change without the format changing.)
412     For now, however, you can ignore it.
413   * The second column is either PLAYING or PAUSED, depending on the current status.
414   * The third column is how many seconds is queued up (PAUSED) or remaining (PLAYING).
415     It is always in C locale, no matter what the user has set (ie., the decimal point
416     will always be a period). Note that this does not take into account the master
417     speed (see :ref:`speed`).
418   * Finally, the fourth column is a human-readable string, the same as is exposed
419     on the /queue_status endpoint above.
420
421 Prometheus metrics
422 ''''''''''''''''''
423
424 Like Nageru, Futatabi supports a series of Prometheus metrics for monitoring;
425 see :doc:`monitoring` for general information. Futatabi provides entirely different
426 metrics, though, mostly related to performance. There is no predefined Grafana
427 dashboard available at the current time.