A MOV from a camera or an MKV download often won’t play in the app you need, even though the video inside is perfectly standard. The usual fix is a converter website that re-encodes the whole thing — slow, lossy, and it means uploading your file. Most of the time, none of that is necessary.
FFmpeg in WSL can often just repackage the video into an MP4 container in seconds, with zero quality loss, because the actual video and audio inside are already MP4-friendly. When they aren’t, it re-encodes cleanly. Either way it’s free and stays on your machine.
No WSL yet? See the WSL install guide.
Install FFmpeg
sudo apt update && sudo apt install -y ffmpeg
Confirm:
ffmpeg -version
The fast way: remux (no re-encoding)
Most MOV and MKV files already contain H.264 video and AAC audio — exactly what MP4 wants. In that case you just change the container, copying the streams as-is:
ffmpeg -i input.mkv -c copy output.mp4
-c copy means “don’t re-encode, just repackage.” It finishes in seconds even for large files and loses nothing. The same works for MOV:
ffmpeg -i input.mov -c copy output.mp4
When remux fails: re-encode
If the remux errors out or the resulting file won’t play, a stream isn’t MP4-compatible. Re-encode the video to H.264 and the audio to AAC:
ffmpeg -i input.mkv -c:v libx264 -crf 20 -preset medium -c:a aac -b:a 192k output.mp4
-c:v libx264 -crf 20re-encodes video at high quality.-c:a aac -b:a 192kre-encodes audio to AAC.
This is slower and slightly lossy, but it produces an MP4 that plays everywhere. For more on the CRF quality dial, see compress a video without losing quality.
Keep the video, fix only the audio
Sometimes the video is fine for MP4 but the audio codec isn’t. Copy the video and re-encode just the sound — fast, since video re-encoding is the slow part:
ffmpeg -i input.mkv -c:v copy -c:a aac -b:a 192k output.mp4
Which approach to use
| -c copy | Remux: fastest, lossless, needs compatible codecs |
|---|---|
| -c:v copy -c:a aac | Keep video, re-encode incompatible audio |
| -c:v libx264 -c:a aac | Full re-encode for incompatible video |
| ffprobe input.mkv | Inspect codecs before deciding |
Convert a whole folder
To remux every MKV in a folder to MP4 (fast path), into a subfolder:
mkdir -p mp4
for f in *.mkv; do ffmpeg -i "$f" -c copy "mp4/${f%.mkv}.mp4"; done
If some files fail the remux because of codecs, rerun those with the re-encode command. The same loop works for MOV by changing the pattern to *.mov.
Wrapping up
Converting MOV or MKV to MP4 on Windows is usually instant: ffmpeg -i input.mkv -c copy output.mp4 repackages the file with no quality loss when the codecs are already MP4-compatible. Check with ffprobe, and fall back to a libx264/aac re-encode only when a stream isn’t supported.
It’s free, it batches, and it runs in WSL — so nothing gets uploaded. The same FFmpeg install handles extracting audio to MP3 and trimming without re-encoding.