Table of contents
This page is dedicated to teaching the publication process, including official encoding aspects and publishing tips. If you just want to make a casual encode of a movie, visit Casual Encoding.
If you are a Publisher or an Encoder, subscribe to this thread to get updated about changes in the workflow.
Capturing lossless AVI
Dump the video
First of all, you need to dump lossless video from the emulator. Use a lossless codec that works with VideoForWindows. CamStudio and Lagarith are the best choices. The size of the lossless dump does not affect the resulting video encode size, so aim for dumping speed while choosing your codec and settings. Still use some compression to avoid 2GB+ files, which are hard to preview (some emulators allows splitting at that mark).
Downloads
Emulator settings
See Encoding Guide / Video Dumping page for how to set up emulators to capture AVI.
Codec settings
Lagarith
- Check Enable Null Frames
- Check Use Multithreading
- Select Mode: RGB (Default)
UtVideo
- Select UtVideo RGB VCM in codec list and configure it
- Set Intra-frame prediction type to Predict Median
Encoding
Set up the package
The TASVideos community has developed an all-in-one script package that does:
- audio encoding
- video encoding
- audio and video muxing
- YouTube stream uploading
Every publication needs two encodes. The first one (Standard Definition at 480p) is uploaded to Archive.org, the second one (High Definition) is for YouTube.
Downloads
- TASEncodingPackage with all encoding dependencies:
- AviSynth+ installer
- VirtualDub portable
- Notepad++ installer for adjusting the script
- AviSynth synthax highlighter (paste
%AppData%\Notepad++
in windows explorer address line and put the file there)
Your files
Extract the encoding package to any folder, put the AVI you dumped in the root package folder, name it movie.avi.
Since you will encode in several resolutions, and intended aspect ratio can change drastically between systems, the script is configured to use several files for a logo:
-
logo.png
- standard definition -
hdlogo.png
- high definition -
logonds.png
- standard definition for NDS -
logohdnds.png
- high definition for NDS -
logoGrey.png
- high definition for VirtualBoy
You might never need some of them, but it's required to use at least the first two, to prevent great loss in picture quality to resizing.
- See Encoding Guide / Logo for what should be on your logo. Note also that your logo must be approved by a Senior Publisher.
YouTube upload
Uploading to YouTube is done on YouTube itself. If you are an editor for TASVideosChannel, simply follow the following steps:
1) Switch over to TVC (Google Account profile pic -> Switch Accounts)
2) Click on Upload and drag-and-drop the YouTube encode.
3) Put in a title and, optionally, a description.
4) Click Next several times, then wait for it to be uploaded.
2) Click on Upload and drag-and-drop the YouTube encode.
3) Put in a title and, optionally, a description.
4) Click Next several times, then wait for it to be uploaded.
Adjust the AviSynth script
Open encode.avs in Notepad++, it's a text file, so you can edit it. Make sure to keep the AVS script, the BAT script, logo and movie files in the same folder. All other dependencies lie in specific folders of the package.
Preview is done by drag'n'dropping the AVS script into VirtualDub window, to pick frame numbers from the encode and to adjust the subtitles (and also to check if all is working as you wish). Each time you edit the script, save it in Notepad++ and press F2 in VirtualDub to reload the updated source file.
- If you don't have the Visual C++ Redistributable installed, one of the scripts won't load.
Multiple segments
If the dump is too huge, you will get several AVI files split near 2GB. If there are only few of them, you can import them as a single command:
AVISource("movie.avi", "movie_02.avi")
But if the amount of segments is big, it's not useful to do the above. For that, we have the AppendSegment() function. Here's a post describing how to use it.
Movie length
As you preview your encode in VirtualDub, navigate to the movie ending. The idea is to present all contents of the game in the encode, but keep it as small as possible.
- If the game restarts, select the frame right before restart
- If the music stops playing at some point, where nothing new is shown visually, pick the frame when it stops playing.
- If the music loops, and the picture does not change, find the frame when the first full loop ends
Copy the framenumber and paste it as the "trimframe" value. The script assumes you are using the preview to figure out the trimframe, and automatically subtracts the logo length.
Subtitles
Movie info
Go to the submission page and copy/paste into the corresponding script strings:
- The game name
- The branch name, if applicable (paste inside 'such quotes', so that the result looks like that "'branch'")
- The Author's name
- The completion time
- The rerecord count
If the rerecord count is broken, showing an unfairly low number, write "unknown".
- Always double-check the game names put into submissions. Always apply our standards to them.
Timing and placement
- subFF is the first frame for subtitles. Use the first frame of the first level for that (after the fade-in ends), whenever they don't cover important game elements (in particular, the player character), when a countdown has ended (usually on "Go!") or whenever they are not visible during fade transitions for the entire duration.
- subEntry is how many subtitle entries (from 2 up to 4) are going to be present in the encode.
- subYpc is in how many percent of the video height to shift the subtitles down by. Use 0 to have them on top, other positions must be figured out at previews.
- subAlign gives the alignment relative to the encode width (which is automated depending on which align you use). 8 aligns to the center, 7 - to the left, 9 - to the right.
- subXpc is used when you need to push the subtitles away from the screen edge. Leave 0 if you align at the center.
- subFF2delay, subFF2delay2 and subFF2delay3 are used when you need to have a delay between subtitle entries.
- Always make sure that your subtitles don't cover any important in-game elements, action, overscan area or internal game borders (avoiding screen transitions is also a good habit). Adjust the timing and position if you have to. If unsure, ask in tasvideos chats (IRC or Discord), or send a private message to a Senior Publisher.
LWLibavVideoSource for tricky codecs
LWLibavVideoSource is a source filter (e.g. AviSource) for AviSynth from the LSMASHSource plugin collection.
Pros:
Pros:
- Can decode anything that FFmpeg can, including sometimes-troublesome codecs like CamStudio and FFV1
- Doesn't care about bitness
Cons:
- Harder to use
- Must build an index file
- Slower than an installed codec
How to use
- Download LSMASHSource from the above link, and copy the 32- and 64- bit LSMASHSource.dll files to the appropriate plugin locations.
- Instead of writing
AviSource("file.avi")
in your AviSynth script, you would writeLWLibavVideoSource("file.avi", fpsnum=60000, fpsden=1001, format="RGB24")
.- You must supply accurate values for the
fpsnum
andfpsden
parameters, or the filter will mess up the framerate. Check the dumped video's framerate and match it. For 59.94 fps NTSC video:fpsnum=60000, fpsden=1001
. For 60.099 fps SNES video:fpsnum=60099, fpsden=1000
. For 60 fps video:fpsnum=60
(you can leave outfpsden
and it will default to 1). - VirtualDub/FFmpeg/x264 don't like LWLibavVideoSource's default format, so you will always need to supply the
format
parameter."RGB24"
is a good default to use as it will do a lossless, fast conversion.
- You must supply accurate values for the
- The first time an AVS script with a call to
LWLibavVideoSource
gets executed, it will generated an index file for the source video with the extension.lwi
.- If the script is loaded for the first time in VirtualDub, you will not see any progress meter and the program will simply appear to hang while the file is being generated. This could take an hour or more for 4K video!
- You can instead run your script for the first time with
ffprobe -hide_banner myscript.avs
and you will get a progress indicator while the file is built.
- Dub the source video's audio with
AudioDub( WavSource("file.avi") )
as LWLibavVideoSource does not read any audio data.
Troubleshooting
- This index file needs to stay with the source file or the filter will have to regenerate it each time.
- AviSynth seems to decide at random that it's time to rebuild the index file for no good reason. To avoid this, always make a backup copy of the
.lwi
file immediately, and set the original to read-only. - The index doesn't seem to like being copied between computers. If you are getting an error message stating that the video track of the file could not found, you may need to let the index file get rebuilt on the new computer.
Run global.bat
- Aspect ratio options
- If you encode for a handheld console, type 1
- If your console is intended for use with a CRT TV, type 2 (exception: Dolphin. Type 1 in this case.)
- If your console is intended for use with an LCD TV, type 3
- If you're encoding for a game that needs other aspect ratio (like multi-screen arcades), type 4 to enter the specific aspect ratio
- What encode do you want to do
- Encode all in one flow (3) or choose a single method. Be ready to wait several hours for each encode.
After all is over, get your files in the output folder
Prepare all files
Encode file names
gamenameregion-tasv#-branch-author_encodetype
- The game name should be concise, use common abbreviations (smb for Super Mario Bros.) and precedent when possible (chipdale instead of chipndale). Required.
- Add the region letter (j or e) if it is not USA (if USA version exists at all). Optional.
- Use -tas if it's a speedrun, otherwise use -playaround. Required.
- If it's not the first version of that game by the same author, add v2 (or any other appropriate number), otherwise avoid. Optional.
- Add the branch name only if it is not default. Note: when setting percentage, use p instead of %. Optional.
- Separate multiple authors names with a comma (,) or an underscore (_).
- Encode type is usually only needed if it's an alternate encode (e.g. camhack or slowed down encode)
If not sure about a token, investigate similar publications, how their files are named. Example:
battletoadsj-tasv3-1player-feos
Upload to Archive.org
Upload the downloadable 480p encode.
- Go to https://archive.org/upload/ and drag'n'drop the file you are about to upload onto the gray area.
- The titles, as well as the item link, will be autofilled.
- In the Description field, provide the submission link
- Subject Tags: some words from the submission page title, or just tas.
- Select a specific collection from the pop-down list, if allowed: Speed Runs.
- You might also need to remove the additional metadata.
Once all is done, press the Upload and Create Your Item button.
Catalogue the submission
In order to be able to publish the movie proper, the submission needs to be catalogued.
Capture the screenshot
- Drag the lossless AVI to VirtualDub
- Find the frame that has the most intense action
- Press Ctrl + 1 and paste in standard Paint program.
- Save as PNG, file name can be any.
- Drag the file onto PNGOUT.EXE
Note: For BizHawk using the Saturnus or Octo/Nymashock cores, you need to account for proper aspect ratio correction. Please check out this section for more details.
Publish the movie
Claiming
If you have started working on some submission for publication, notify other publishers you're already encoding it:
- Edit its text and select Publication Underway in the movie status drop-down list.
- Add a comment in the text under the horizontal ruler (4 minuses) like:
[user:feos]: Processing...
Alternately, hit the Claim button.
Publishing
After all files are ready, click the Publish link on the submission page.
- Always double-check the game names put into submissions. Always apply our standards to them.
- Set flags if any of them are appropriate.
- Type the movie file name, taking the name of encodes, just dropping away -tas/-playaround, and putting the author at the beginning:
feosv3-battletoadsj-1p
- Choose screenshot from your computer
- Put the direct link to downloadable encode from the Archive.org collection into the mirror site URL field.
- Put the YouTube HD stream link to the online-watching URL field.
- For the Description and categories tab, type in the movie number to be obsoleted (if it was decided by the judge), fill the description (1 paragraph about the game, 1 about how it was played in that TAS). If it obsoleted some movie, and the new time is actually shorter, you can calculate the frame difference yourself and manually create the module:
This movie beats the [1000M|previous run] by [module:frames|amount=300|fps=ntsc] seconds
- If this run has commentary, add a note about it to the movie description under a ruler
----
, telling the user their form, and how to access them. - Add tags listed by the submission author. Still, don't copy them blindly, some physics-abusing tricks do not mean it is Heavy glitch abuse, the same is with Heavy luck manipulation.
When you are sure all is done properly, click the Proceed button.
For a movie that starts from a save RAM, the verificiation movie needs to be added as an additional movie file. Simply edit the publication, and add the verification movie as an additional movie file, following the same naming convention as the publication movie file, adding
-verif
at the end of the verification movie file name. Put Verification movie
as the display name and click on Add.
More detailed information
Links
- Publisher role
- Publisher Guidelines
- Encoder Guidelines
- Encoding Checklist
- Screenshots
- Movie Tag Guidelines
For troubleshooting, use Encoder forums or live chat with our staff members and encoders.