From Fraps to MeGUI
By Kung-Fu Jesus
If you're capturing a PC game, chances are you're using Fraps. It costs money and requires a good computer, but it owns. I'm going to show you how I get from Fraps to finished product. I don't use MediaCoder because it's a piece of shit, I use MeGUI because it owns if you know what you're doing.
Programs:
=========
Fraps - http://fraps.com/
AviSynth - http://sourceforge.net/projects/avisynth2/
VirtualDubMod - http://sourceforge.net/projects/virtualdubmod/files/
MeGUI - http://sourceforge.net/projects/megui/
Prologue
========
Here is the rough order of the workflow:
Capture -> Edit -> Subtitle/Post Commentary -> Encode
Step 1 - Fraps
==============
Fraps is a program that costs money and records games that use OpenGL and DirectX. Its features are constantly growing to accomodate a larger number of games, but basically if it's 3D, it should work. So before starting my game, I start Fraps and configure it:
Important things to note, I am saving my video on a hard drive that isn't my system drive, has plenty of free space, and is not fragmented. I have chosen 60fps because Fraps will automatically force the game to run at the frame rate you choose and since I have my monitor at 60Hz with vsync on, 60 is what I want the game to run at. I have also chosen to capture at full size, not half. This is very important especially for in-game text. You should record at the size you want to ultimately distribute.
(Fraps released an update yesterday as of this writing that allows you to capture at a lower framerate and play at a higher one. This is awesome and it does away with some of the steps in this tutorial)
Now all I have to do is boot the game and press my record button then play for a bit and...
Holy shit thats huge. Fraps captures losslessly, this means the files will be very large. The files I captured are 1280x720, 60FPS which means for 9 minutes of video I need 17GB of space. Fraps also splits files into 4GB chunks and theres no way to change that. No one fucking has FAT32 any more it makes no sense, get your head in the game Beepa! Let me repeat:
Fraps files are huge. They are lossless. Prepare many gigabytes of free space.
Step 2 - The AviSynth Script
============================
AviSynth is a scripting language for video processing. It is mind-bogglingly powerful but has a very steep learning curve. AviSynth allows you to manipulate video without changing the source files! This is so very important especially working with lossless video. You don't want to have to copy huge video files around, it takes time and disk space. The basics of AviSynth are very simple and we only need very basic functionality.
My first step is to combine all those AVIs into one script, so I create a new text file in the same directory and call it MassEffect2.avs and then type stuff into it in Notepad:
code:
AVISource("MassEffect2 2010-02-09 22-51-42-61.avi") +\
AVISource("MassEffect2 2010-02-09 22-53-40-11.avi") +\
AVISource("MassEffect2 2010-02-09 22-55-41-63.avi") +\
AVISource("MassEffect2 2010-02-09 22-57-42-37.avi") +\
AVISource("MassEffect2 2010-02-09 22-59-40-23.avi")
Now if you open that in a video player you will see it is like having joined all those videos. There is a performance hit on playback, but that's the price you pay.
Step 3 - The Chop Shop
======================
Why am I using VirtualDubMod? It hasn't been updated since 2003! Well, all I'm going to be doing is deleting stuff, so I don't need super advanced features. VDubMod has one feature that I very much want to use, the Script Editor.
So let's say that I want to cut out this stupid conversation I had with Joker. I select the conversation with those buttons I highlighted on the toobar and press Delete. For your videos if you want to delete loading screens and the like, go through and delete all of them. Then I go to Tools->Script Editor
That Owns. I have positioned my cursor at the end of the file. Now I go to Edit->Import Frameset as Trims and it adds the following to the end of my file:
code:
Trim(0,27647) ++ Trim(31102,31639)
Lovely, it is adding together everything we didn't delete, all without reencoding. The AviSynth script up to now should look like this:
code:
AVISource("MassEffect2 2010-02-09 22-51-42-61.avi") +\
AVISource("MassEffect2 2010-02-09 22-53-40-11.avi") +\
AVISource("MassEffect2 2010-02-09 22-55-41-63.avi") +\
AVISource("MassEffect2 2010-02-09 22-57-42-37.avi") +\
AVISource("MassEffect2 2010-02-09 22-59-40-23.avi")
Trim(0,27647) ++ Trim(31102,31639)
ChangeFPS(30)
I added the ChangeFPS(30) line to the very end because I want to output at 30fps, but I didn't want VDubMod to use the wrong frame numbers.
Now I can File->Save and then close VDubMod, we're done here.
Step 4 - Commentary, Subtitles
==============================
This tutorial is not going to tell you how to record commentary, auto-duck, sync, or create subs in aegisub or whatever. I can give you some pointers to get you started though.
The Shitty Proxy Video
An important concept is the shitty proxy video. You can't send really nice files to people or use your AviSynth script in aegisub, so you create a really low bitrate, low quality version of your video. I'd recommend a single-pass xvid (800kbps) with mp3 audio (96kbps). You can even do this in VirtualDub(Mod).
Commentary
Don't close VDubMod quite yet or reopen your AviSynth script again if you did. Go to Streams->Stream List and then click Save WAV on the right. Then do your thing with commentary in Audacity or whatever. When you finally have audio that contains your lovely voice(s), you can change your AviSynth script to look something like this:
code:
video = AVISource("MassEffect2 2010-02-09 22-51-42-61.avi") +\
AVISource("MassEffect2 2010-02-09 22-53-40-11.avi") +\
AVISource("MassEffect2 2010-02-09 22-55-41-63.avi") +\
AVISource("MassEffect2 2010-02-09 22-57-42-37.avi") +\
AVISource("MassEffect2 2010-02-09 22-59-40-23.avi")
video = video.Trim(0,27647) ++ video.Trim(31102,31639)
video = video.ChangeFPS(30)
audio = WavSource("me2-commentary.wav")
AudioDub(video, audio)
If you ever programmed anything in your life this should make some sense to you. Instead of relying on a global implicit variable that is modified on every line, we are explicitly assigning our inputs to a variable called 'video' and then manipulating it. This is so that we can have a separate audio variable to import.
Subtitles
I don't really want to get into this a whole lot because I'm not very experienced, but you make your SSA or ASS subtitle file and then add this line to your AviSynth script:
code:
TextSub("your_file.ass")
It's dead simple, but the hard part is making the subtitle file.
Step 5 - Encoding
=================
Here we go at last. To recap, my AVS file looks like this:
code:
video = AVISource("MassEffect2 2010-02-09 22-51-42-61.avi") +\
AVISource("MassEffect2 2010-02-09 22-53-40-11.avi") +\
AVISource("MassEffect2 2010-02-09 22-55-41-63.avi") +\
AVISource("MassEffect2 2010-02-09 22-57-42-37.avi") +\
AVISource("MassEffect2 2010-02-09 22-59-40-23.avi")
video = video.Trim(0,27647) ++ video.Trim(31102,31639)
video = video.ChangeFPS(30)
audio = WavSource("me2-commentary.wav")
AudioDub(video, audio)
Now I'm going to open MeGUI and load up that AVS file I've been working on.
I've chosen the AVCHD preset because it's pretty standard. The 2-pass preset will let you choose a bit rate if you press the Config button. You can follow these general guidelines for video bitrates:
SNES, NES, Genesis, etc: 500-800kbps
SD Console: 800-1000kbps
720p: 1500-2000kbps
1080p: 3000-4500kbps
Also on the config screen, check the Turbo box on the left side.
Press the Enqueue buttons on both the audio and video sections. If it gives you any lip about changing the color to YV12 or something click Yes. Now you can go to the Queue tab and click Start at the bottom left.
*a sandwich is made, tv is watched, encoding takes some time*
You should have a .264 file and a .aac file now. These are going to be combined into an MP4 container which will be your final product. To do this, go to Tools->Muxer->MP4 Muxer.
Select the files, click Queue, go back to the Queue tab and click Start again. This shouldn't take as long, it's just copying data for the most part.
Epilogue
========
Now you have a file called whatever.mp4. This file can be uploaded to video hosts or hosted on someone's custom hosting like grimfiend or discoshiny. You may find the video I made for this tutorial on Discoshiny or YouTube
This guide was long, but once you gain an understanding of the steps involved, it does not take very long to execute. AviSynth in particular is not really that difficult if you're a programmer. Most of the learning curve is understanding the technical aspects of video. I admit I am but a hobbyist with an intermediate-level understanding of these things. There's a world of crazy enthusiasts out there with levels of know-how that are beyond reasonable limits. If you find any of this interesting and wish to tap their knowledge, you may visit
http://forum.doom9.org/
http://avisynth.org/mediawiki/Main_Page