For some time now, I’ve been working on a video project which is sort of a mini-trailer for a TF2 server I play on quite regularly called castaway.tf. This is how it was made.
Just in case the video is taken down by Janny-Tube for any reason, here’s a backup:
Also available as a WebM.
Yeah, I know it’s not the most impressive editing in the world or anything like that, but I worked hard on it and so I’m doing a damn article about it! Wow, some people are judgemental…
The Toolkit
The entirety of this video was created using Blender 4.2.0, ffmpeg, Gimp, Imagemagick and the TF2 Replay Editor.
It’s not very common knowledge, but Blender actually contains an entire basic editing suite inside of itself! You just have to click on “Video Editor” in the top tab row!
I’ve been using Blender for various small tasks for many years and I was delighted to see that it scaled quite well to the complexity I threw at it. Unlike any other video editor I’ve ever used (including other free options such as DaVinci Resolve), I did not experience a single - no not even one - crash. Take that, Adobe!
The only complaint I would have about Blender’s VSE is that it seems to handle non-mpeg video streams badly. I had some horrible issues with mkv files being imported at the wrong framerate and extremely strange decoding errors. At times, I would scrub forwards using the cursor, then scrub back to where I was, only for a completely different frame to be where I was before. Also, the preview and the final render would not match in the slightest. I just solved this by re-encoding everything to mp4.
All the other tools were just auxiliary tools to help out with the media already inside Blender. For instance, any stills or freeze-frames were either produced by making a hard cut in Blender or by editing the frame by hand inside Gimp.
The Intro
The intro section (that is to say before the music starts) actually took almost the longest to make. I really wanted to make this video in the TF2 replay editor. In case you aren’t aware, TF2 contains its own integrated tool for moving around saved demo files which lets you make some little home movies of your gameplay. Sadly, the tool has long since become unmaintained and doesn’t work properly. This intro sequence was the culmination of many hours of effort getting the replay editor to replay nice.
The Replay Editor
When you open the replay editor, you get a screen looking something like this:
Now, because no servers really have replays enabled any more (mainly because of spontaneous crashes), the next best thing is to record a local demo. The only problem with this is that the demo is tied to your point of view, which contains camera data from your raw camera movements and HUD state. That means that any HUD elements you have on display will keep popping up unless you disable the HUD. It also means that the freecam and third person spectate modes don’t work - or at least not as expected.
The workaround for this was enough for my purposes:
- Open up the demo editor UI by typing
demoui
into console, or by pressing Shift+F2 - Press freecam in the bottom right hand corner
- Press drive in the demo editor UI
- Position your camera where you want it
- Select third person mode
- Unselect drive
If you do all of this in perfect sequence, your demos will normally come out without issues. If not, the fix is usually either to reload the replay editor, or to open console and enter:
sv_cheats 1
thirdperson
There are a couple of other things that I learnt that I think are worth mentioning. First off, never click on any of the player icons in the bottom corner especially if you are saving your changes! This will screw up whatever replay or clip file you’re using unless you discard the current edit and start from scratch. The reason being is that this will set the active spectate target to that player, which leads to the camera following them in third person mode, which breaks the method above.
In addition, always turn off the demo recorder between map loads. The engine will automatically do this for you and restart the recorder on map change, but the demo files this produces for subsequent maps can’t be saved in the replay editor. You can load them fine, but saving your work will give an error upon attempting to reload them. I think it’s something to do with an event on the first game tick (probably - I have no idea). You can’t fix the issue by setting the in point to past the first few game ticks either. Just remember to stop and re-record, ok?
Moving Freecam
The moving freecam effect was only possible because I actually wasn’t in the frame at the time. If my character actually were in the frame at the time, he would appear invisible, owing to the fact that the drive function I relied upon to override the demo’s camera angles also moves the character around in a sort or noclip-style movement.
I only did this to make it so that the start of the video wasn’t entirely static with voiceover.
Getting voices in the replay
This one was pretty simple:
replay_voice_during_playback 1
Fake HUD Elements
I don’t know if it’s too obvious, but the voice chat indicator HUD elements are actually faked. This is due to the limitation I mentioned before about having to disable the HUD in the replay editor. So, I took a screenshot, blew it up to scale and removed any transparency before changing the names in Gimp. Luckily, the font used is just a free version of Arial and the voice icon could be painted around.
Rendering
I spend several hours trying to get the replay to render, only to realise that it is, in fact, impossible on Linux and has never, in fact, been possible. To render, TF2 relies upon an ancient version of QuickTime which was never ported to Linux and never will be.
My workaround was to just record my screen using ffmpeg’s x11grab input format and cut the results in Blender.
All gameplay footage was actually recorded at 1080p and downscaled to 720p on the fly. This didn’t really make the recording slower because I was using ffmpeg’s Nvidia CUDA accelerator for video encoding, so CPU time wasn’t really a bottleneck. I also recorded at 30 FPS at all times. The reasoning behind this was mainly to save disk space.
Imperfections
Even with all this, the outcome wasn’t quite perfect - as you will likely see later on. There are a few instances of missing animations or people popping out of nowhere when they cross a visleaf boundary. Oh well!
In any case, all of this culminated in the ten second clip of Booger and Gabber having a fascinating conversation at the start of the video about the true meaning of RD. Well worth it.
Post Intro
That is to say, the section after the music has begun but before the main video starts.
Steam online bit
This was entirely created using screenshots, keyframes in Blender and inspect element. I basically just loaded up the Castaway group chat and found the latest message from somebody trying to organise a session. I just found the node that matched the message most closely and deleted it. I then resized the window so that the messages fit nicely to my screen and took a full-screen screenshot. This was nice because it meant it was already 1080p without scaling.
I then reloaded to get the message back and I had by first couple of sections. Then, I went through and changed the now playing text in Steam to everybody playing TF2. This took a little while but I hope you’ll agree the end effect was worth it.
Gameplay clips
After this, I applied what I already learnt about the replay editor to create some “in the moment” feeling gameplay clips (at least I thought so).
This is the first bit where we can see some demo replay breakage. At around 0:21, a shutter opens to show me walking out with no body but still holding a weapon!
This was also the first bit where I had a bit of a proper play around with different camera angles and syncing stuff up to the beat.
“Is your IQ over 20?”
Sadly, this section was not filmed on location at the server but was actually filmed on a Skial Dustbowl server. I just wanted a clip that showed me doing really badly at the game. My original idea was to have footage of me dying to an obvious sticky trap around a corner, but I think this was close enough.
Chorus
Demonstrative Clips
I sort of wanted some clips that summed up the fun of vanilla TF2 quite well to be forefront. I think that the opening clip on cp_badlands and the two later clips on tc_hydro did this job best.
Wanting to demonstrate each feature of the server, I tried to find a clip of me encountering this exact scenario. Random bullet spread, however, proved very difficult to find any substantial clip for. It’s pretty much insignificant anyway, so I decided that the only clear way to demonstrate it was to just show it on a wall. I relied upon stuff overlaid upon the clip to make it interesting rather than the clip itself for this one.
“No 2 Round Limit!”
To make this section, I just screenshotted myself sat in spawn on Dustbowl with the scoreboard open. I opened the screenshot in Gimp and painted over some sections we didn’t need - including the text which showed the round counter. If you look very closely, you can see the fact that some parts of the scoreboard have slightly higher opacity than others.
“No Class Limits”
I was very proud of this bit. I basically set up a replay with the camera pointed at the spawn room door and then ran past it myself multiple times, using noclip to fly back out of the camera’s shot each time and quick-swapping loadouts from inside, before repeating.
This screenshot shows me noclipping back through the side door, not quite staying out of the camera’s view:
Other than that, I just cut out the lag time between the scouts running out and applied a 3x speed up in Blender and we were golden!
Screenshots collage
The collage of screenshots was created by literally just cleaning out my Steam screenshots folder. Every screenshot in this section was actually taken while playing on the server. I felt that was important :)
Server Bans
The section on server bans was meant to poke fun at how easy it is to get rage banned on a lot of community servers nowadays. Uncle Dane’s “Uncletopia” has a long list of things you can’t do - and some plugins to make sure that you don’t! For example, class limits, which to me are more just fun limits. If the other team stacks heavy and you lose, maybe you should try playing sniper? If that doesn’t work, call a team scramble? I don’t know, I’m not very good at the game anyway, but I am good at having fun.
Anyway, just in case some seething, red-faced server administrator is reading this yes the ban messages are fake you moron!
I took real ban messages that some people on my Steam friends list received and edited them using Gimp to make then “better”.
As for the section on the Uncletopia rules - yes, that is Dane speaking in the background about which individuals he dislikes enough to banish from his public TF2 servers. I just thought we’d get a testimonial from him to show that I’m not making this stuff up. Banned for a “dog whistle” avatar? Yeah…
The Skial trolling ban message is modified, but not by much. I removed the person’s Steam ID and removed the word ‘Persistent’ from the reason. I get that this might feel to some like it changes the meaning, but to me, it doesn’t really. TF2 is a silly game where trolling ought to be allowed. The fact that he did it ‘Persistently’ should be no more relevant than if he did it well or not.
Casual queue footage
I feel the need to impress upon people that the casual queue footage is not modified. When it sped up earlier in the video, that did not take you to the end of the footage. The footage in this section of the casual queue is also unmodified - in that if I had overlaid the casual queue to the rest of the video between this point (at around 2:20), the footage would still have been running up until this point. That was how long I sat in the queue for.
Not that it matters, but when I finally joined, the match was almost over and only five people were playing. Nice.
“Meet The Regulars”
This is my favourite section from the video.
This “Meet The Team”-style title card was made by opening the Expiration Date title card in Gimp and painting over the text using the pencil tool. I had to manually paint within the lines to keep the shapes the same, but I think I just about got away with my terrible freehand mouse drawing. I then just added the text I wanted back on top in the same font. I tried to keep the text alignment the same, but in the end just abandoned trying when it looked terrible. I couldn’t get Gimp to wrap the text the way I wanted to, so I actually made two text objects and manually wrapped them over the line. Oh Gimp - how green my peppers are…
I got the freeze cams by finding footage of somebody visible in a replay and positioning the camera to give me a nice action shot of them. This was a bit of a pain because the demo editor kept mangling the camera angle every time I jumped back to the last set point (don’t ask), so I had to use setpos
and setang
to position it correctly. By far the hardest to get right was the Gabber clip, because I wanted him after he shot the heavy (ideally with the heavy still on screen) but while still airborne and with a head-on shot. In the end, I pretty much got there, but it took quite a while.
Once the replay had been recorded, I just used the hard cut tool in Blender to create a freeze frame and used a lerp keyframe to give the subtle dramatic zoom effect I was going for.
Apologies to anybody who felt a bit left out for not being in here. Genuinely, the people in here were either people who killed me in a specific match of Hydro, or the group administrators I’d played with in the past.
Outro
I created the outro scene in Garry’s Mod on pl_hoodoo at the side of the cart track on the first stage. In this image, the exact location is on the opposite side of the track near the rock (or hoodoo!). The spray on the wall is one that got passed around in the group chat a while back. I can’t remember exactly who created it but I know many people now spray it. If you too wish to spray it, here you go.
Lary Steve’s eating habit
The final outro bit where everybody’s favourite salt king “B4nny” tells Larry Steve what he thinks of him was actually only in there because I thought it’d be funny to leave the footage from the original music video there. This was partly because the fade out on the guitars wouldn’t feel right if I cut it but the pig sounds had already started by that point, leaving me with a dilemma. Eventually, I just thought I’d run with it. The original video actually didn’t have enough footage of Larry eating for good comedic effect so I actually repeated a few frames of audio and looped them for the last few seconds. The jumps in the track are pretty much hidden by the loud voice response from the other “users”.
Summary
I’ve had a great time making this video and hopefully my purely selfish intention of having more people playing on my favourite server will be successful!
Big thanks to Booger and Spikedballofdoom for the advice and help while making the video, and to Calvin for many ideas and reviews.
Thanks for reading through this giant wall of text and, if you’ve made it this far, you have literally no excuse to not Join Castaway.tf!