Takeout JSON

Convert Old AVI, WMV and 3GP Videos to MP4

Camcorder AVI, WMV and early phone 3GP files will not play on modern devices. When a lossless re-wrap is enough and when re-encoding is needed.

You have a folder of videos from a 2006 camcorder, a 2009 phone and a Windows PC that ran Movie Maker. Half of them will not play on your TV. Your phone shows a blank thumbnail. Google Photos played them, but the Takeout export handed them back exactly as they went in.

What "plays everywhere" means

A video file is two things: a container and the codecs inside it. The container is the box, the extension you see: .avi, .wmv, .mkv, .3gp, .mpg, .mp4. The codecs are how the picture and sound are compressed inside the box: DivX, Xvid, MPEG-2, WMV3, H.263, H.264, AAC, MP3.

"Plays everywhere" in 2026 means one specific combination: an MP4 container with H.264 video and AAC audio. Every phone, TV, browser and photo app decodes that in hardware. Anything else is a gamble.

Old files fail on either count. A .avi with Xvid inside fails on the container and the codec. A .mkv with H.264 inside fails only on the container. A .3gp from a 2008 phone has H.263 video and AMR audio, both dead.

Re-wrap or re-encode

This distinction decides whether you lose quality.

Re-wrapping, also called remuxing, moves the existing video stream into a new container without touching it. If the video is already H.264, you can put it in an MP4 in a second, with zero quality loss, because the pixels are not decoded. An MKV or MOV with H.264 inside becomes an MP4 this way.

Re-encoding decodes the video and compresses it again with a new codec. It is the only option when the codec itself is the problem: Xvid, MPEG-2, WMV, H.263. It takes real time, roughly real time or slower on a laptop, and each encode loses a little. Done once at a decent bitrate, from a source that is already low quality, the loss is not visible. Done repeatedly, it is.

The rule: re-wrap when you can, re-encode when you must, and never re-encode something that is already H.264.

Doing it by hand with ffmpeg

ffmpeg is free, runs on every platform, and is what almost every converter uses underneath. Check what is inside a file first:

ffprobe video.avi

Look for the video codec line. If it says h264, re-wrap:

ffmpeg -i video.mkv -c copy video.mp4

If the video is h264 but the audio is something odd, copy the video and re-encode only the sound:

ffmpeg -i video.mkv -c:v copy -c:a aac -b:a 192k video.mp4

Otherwise re-encode both:

ffmpeg -i video.avi -c:v libx264 -crf 20 -preset medium -c:a aac -b:a 192k video.mp4

CRF 20 is a good quality for old standard-definition footage. Lower numbers mean higher quality and bigger files. A folder takes a loop:

for f in *.avi; do ffmpeg -i "$f" -c:v libx264 -crf 20 -c:a aac "${f%.avi}.mp4"; done

HandBrake is the graphical option on all three platforms if you prefer not to type. It re-encodes everything and cannot re-wrap, so use it only for files that need a new codec.

Do not lose the date

Old camcorder files often have a creation date in the container, and the file's modified date is often the only other record of when it was shot. ffmpeg does not copy the creation date into the new MP4 by default. Add it by hand:

ffmpeg -i video.avi ... -metadata creation_time="2006-08-14T15:30:00" video.mp4

Or copy the file's modified date across afterwards with touch -r video.avi video.mp4 on Linux and macOS. If you skip this, every converted video is dated today, and /blog/takeout-videos-wrong-date becomes your next problem.

Doing it with the app

Takeout JSON Metadata Fixer converts old videos to MP4 as part of the same run that fixes photo dates, and it makes the re-wrap or re-encode decision for you.

It looks inside each AVI, WMV, MKV, 3GP, MPG and similar file. If the video is already H.264 it re-wraps into MP4 losslessly, fixing the audio if needed. If the codec is old it re-encodes to H.264 and AAC. Files that are already good MP4s are left alone. Conversion uses ffmpeg underneath.

The date is kept. If the video came from Google Takeout, its .json sidecar gives the real date and the app writes it into the MP4. If there is no sidecar, the video's own creation time is used. Either way the file sorts into the right year, and the naming and folder templates apply to videos just as they do to photos.

Runs offline on macOS, Windows and Linux. Free for 500 files, $9.99 one-time for unlimited.

Frequently asked questions

Will re-encoding make my old videos look worse?

At CRF 18 to 22 from a standard-definition source, no visible difference. The source is usually far lower quality than the new encode can capture. Keep the originals in an archive folder anyway.

Why is my MP4 still not playing on the TV?

Check the codec, not the extension. An MP4 can contain H.265, AV1 or MPEG-4 Part 2, none of which older TVs decode. ffprobe tells you. If it says h264 and aac and it still fails, the TV may not like the resolution or the file may be on a drive format the TV does not read.

Should I convert MOV files from an iPhone?

Usually not. iPhone MOVs contain H.264 or H.265 and play on most things. If a device rejects them, a re-wrap to MP4 is enough for H.264 ones. H.265 ones need a re-encode for old devices.

How long does it take?

Re-wrapping is seconds per file. Re-encoding standard-definition footage runs at several times real time on a modern laptop, so an hour of camcorder footage takes ten to twenty minutes. HD takes longer.