MP4 metadata (2025): inspect, edit, remove β safely
Understand MP4 metadata (atoms/boxes), audit what your camera/editor writes, then ship privacy-safe deliverables without re-encoding. Includes ffmpeg/ffprobe, ExifTool, AtomicParsley, MP4Box, and automation.
Privacy Risk
GPS, device, dates
No Re-encode
Stream copy
Automation
CLI friendly
What is MP4 metadata?
MP4 is an ISO Base Media File Format. Most human-readable tags sit under moov β udta/ilst (iTunes-style), plus optional cover art and chapters. Streams (video/audio/subs) may carry their own tags; cameras can embed GPS, make/model, or XMP.
Inspect metadata (GUI/CLI)
MediaInfo
Quick overview
mediainfo "input.mp4"
Great first pass for container/codec/tags/chapters.
Edit common tags (title, artist, cover, chapters)
Set title/artist
Stream copy
ffmpeg -i in.mp4 -c copy -metadata title="Demo" -metadata artist="Studio X" out.mp4
Adds simple tags without re-encoding.
Attach cover art
Poster/thumbnail
ffmpeg -i in.mp4 -i cover.jpg -map 0 -map 1 -c copy -disposition:v:1 attached_pic out.mp4
Remove metadata without re-encoding
# 1) Remove global/container tags; keep audio/video unchanged ffmpeg -i in.mp4 -map 0 -c copy -map_metadata -1 -movflags +faststart out_clean.mp4 # 2) Drop chapters and attached pictures (if present) ffmpeg -i in.mp4 -map 0 -c copy -map_metadata -1 -map_chapters -1 -disposition:v:1 -attached_pic out_clean.mp4 # 3) Nuclear option with ExifTool (wipes many tags incl. XMP/GPS) exiftool -all= -overwrite_original "out_clean.mp4"
mediainfo out_clean.mp4 & exiftool -G -a -s out_clean.mp4.FFmpeg specifics (per-stream, faststart)
Per-stream metadata
Video/audio/subs
# Clear video stream metadata ffmpeg -i in.mp4 -map 0 -c copy -metadata:s:v:0 title= -metadata:s:v:0 handler_name= out.mp4 # Clear audio language & title ffmpeg -i in.mp4 -map 0 -c copy -metadata:s:a:0 language=und -metadata:s:a:0 title= out.mp4
Faststart
Player compatibility
ffmpeg -i in.mp4 -map 0 -c copy -movflags +faststart out.mp4
Moves moov atom to the front for faster streaming start.
ExifTool: deep audit & wipe
# List everything with groups and duplicate tags exiftool -G -a -s "input.mp4" # Wipe all tags (keeps audio/video streams) exiftool -all= -overwrite_original "input.mp4" # Remove only GPS/date if needed exiftool -GPS*= -CreateDate= -ModifyDate= -MediaCreateDate= -MediaModifyDate= "input.mp4"
AtomicParsley & MP4Box
AtomicParsley
iTunes-style tags (ilst)
# Read ilst tags AtomicParsley input.mp4 -t # Remove all tags & artwork AtomicParsley input.mp4 --metaEnema --overWrite
MP4Box (GPAC)
Atoms/chapters
# Dump structure MP4Box -info input.mp4 # Remove a chapters track (example id 2) MP4Box -rem 2 input.mp4 -out out_nochap.mp4
Tool comparison (2025)
| Tool | Best for | Pros | Cons |
|---|---|---|---|
| MediaInfo | Quick read | Fast overview, GUI/CLI | Not for editing |
| ffmpeg/ffprobe | Re-mux & tags | Everywhere, no re-encode | Complex flags |
| ExifTool | Deep audit/wipe | Sees GPS/XMP/custom | CLI only |
| AtomicParsley | iTunes tags | Simple ilst ops | Narrow scope |
| MP4Box | Structure/chapters | Low-level atom control | Learning curve |
CI/Batch workflows (GitHub Actions example)
name: sanitize-mp4
on:
push:
paths: ["media/**/*.mp4"]
jobs:
clean:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Inspect
run: |
for f in media/**/*.mp4; do
ffprobe -v quiet -print_format json -show_format -show_streams "$f" > "${f%.mp4}.json"
done
- name: Strip metadata
run: |
mkdir -p clean
for f in media/**/*.mp4; do
ffmpeg -i "$f" -map 0 -c copy -map_metadata -1 -map_chapters -1 -movflags +faststart "clean/${f##*/}"
done
- name: Verify
run: |
for f in clean/*.mp4; do
mediainfo "$f" | tee "${f%.mp4}.info"
doneThumbnails & frames: quick privacy tip
MP4s may carry attached pictures or generated thumbnails. If they originate from cameras/phones, they can inherit EXIF/GPS from the original stills. Clean or replace those assets before sharing.
FAQ
Ship clean MP4s β protect your teamβs privacy
Audit, edit, and strip MP4 metadata without re-encoding. For attached images and thumbnails, scrub hidden EXIF/GPS first.