The reason OBS hands you an MKV
OBS defaults to Matroska for recordings, and the reason is structural rather than stylistic. An MP4 keeps its index, the moov atom, at the end of the file: the recorder writes video first and the table of contents last. Kill the process, lose power, or watch the encoder fall over at minute fifty-eight, and you are left with a file that has no index, which most players read as no file at all. Matroska writes its structure as it goes, so a recording that ends badly is still a recording, just one that stops abruptly. OBS makes that trade for you, then hands you the way back: File, then Remux Recordings, rewraps the same video into an MP4 without re-encoding a frame.
You can skip that step here. Drop the .mkv in exactly as it came out of your recording folder. What decides whether a file opens is the codec inside, not the wrapper around it, and the x264 or NVENC H.264 that OBS writes by default is precisely what browsers were built to decode. If you switched your encoder to HEVC or AV1 to save disk, a remux will not help you, because the container was never the problem; a re-encode to H.264 is. The MKV page goes further into Matroska's habits.
You recorded the canvas, not the monitor
OBS does not capture your screen. It captures the canvas you composited, scaled to whatever Output (Scaled) Resolution sits in Settings, Video, at the frame rate you picked. The file is therefore a tidy 1920 by 1080 at 30 or 60 regardless of how your windows were arranged, and every source layered into that scene, the facecam, the alert box, the chat widget, the sponsor bar, is flattened into those pixels for good.
That flattening is why cropping matters more here than with a plain screen capture. Your overlay text was rendered once at canvas size, and it gets squeezed a second time when you scale down for a GIF, which is how sharp stream graphics turn to mush at 480 wide. So crop to the region carrying the point first, on a locked ratio (1:1, 9:16, 4:5, 4:3, 16:9), and scale afterward. Cropping discards pixels nobody was going to look at. Scaling discards detail from the pixels they will.
Check the frame for things that shouldn't leave the room
A stream composite is a small intelligence file. Alert boxes carry the names of people who gave you money. Chat widgets carry usernames. A Display Capture scene picks up whatever else was open on that monitor, and a Browser Source aimed at your own dashboard puts real numbers on screen. Crop them out here and the uncropped version continues to exist in exactly one place, your disk, because there is no second place in this workflow. The page stopped talking to a server the moment it finished loading, and your CPU does the encode from there.
Replay Buffer is the habit worth forming
The best OBS files for GIF work are not recordings at all. Switch on Replay Buffer and OBS keeps the last stretch of video in RAM, writing it out only when you press the hotkey, which turns "I should have been recording" into a keystroke placed after the fact. The saves land in your normal recording path with Replay in the filename, they arrive at roughly the length a GIF wants anyway, and while idle they cost memory instead of disk.
If the moment spilled across two saves, bring both. Up to ten clips sequence into a single output, each keeping its own trim and crop, in whatever order you arrange them, with hard cuts at the joins. Gameplay in particular tends to want that treatment, and the gameplay clip guide covers the frame-rate side of fast footage in more depth.
Settings for footage that was built to be watched
Stream footage shows up with its pacing already solved, so the edit is pure subtraction. Bracket the moment with the trim handles, then walk each end inward a single frame per arrow press until the loop opens on the beat instead of a breath before it. Two to five seconds is the size of a good one.
- Frame rate: 12 to 15 fps for talking, menus, and reactions. 20 to 24 when the action is genuinely quick and dropped frames would read as teleporting.
- Colors: 128 is the sensible floor whenever overlay text or a HUD is in frame, because a thin palette turns small type to porridge.
- Width: 480 to 600 for chat and threads. Wider mostly buys weight.
- Dithering: on for gradients, smoke, and dark scenes, which is where banding shows up first.
Every control you touch updates the size readout, which means you settle the question of whether it fits while you are still deciding, not after a render. When the destination enforces a real ceiling, the small-file walkthrough is the long version of that paragraph. Otherwise open the converter and start with the trim.