Calabi Labs · Guide · 2026-05-26
iPhone 14 Pro videos already carry metadata the moment they're recorded — serial numbers, color profiles, HDR flags, gyroscope data, and more. "Adding" that metadata really means one of three things:
Your iPhone 14 Pro records in HEVC (H.265) by default, with optional Dolby Vision HDR and ProRes on the256 GB+ models. Each file carries:
iPhone15,2 (that's the iPhone 14 Pro identifier)``bash brew install mediainfo mediainfo "your_video.mov" ``
Most transcoding operations strip metadata by default. Keep it with a simple flag:
``bash ffmpeg -i input.mov -c:v copy -c:a copy -map_metadata 0 output.mov ``
To inject custom metadata fields while preserving originals:
``bash ffmpeg -i input.mov \ -metadata title="Slow Motion B-Roll" \ -metadata artist="Your Name" \ -metadata copyright="© 2025 Your Company" \ -metadata comment="Shot on iPhone 14 Pro @ 240fps" \ -c:v copy -c:a copy \ output_with_metadata.mov ``
To explicitly set iPhone 14 Pro model metadata (useful when repurposing footage):
``bash ffmpeg -i input.mov \ -metadata make="Apple" \ -metadata model="iPhone14,2" \ -c:v copy -c:a copy \ output_iphone_tagged.mov ``
If Dolby Vision HDR is being lost, re-inject it explicitly:
``bash ffmpeg -i input.mov \ -c:v copy -c:a copy \ -metadata:s:v:0 hdr_dovi_preset="base" \ -map_metadata 0 \ output_dovi_tagged.mov ``
Ensure FFmpeg has --enable-libx265 so it encodes HEVC without destroying the Dolby Vision structure.
Common mistake: Applying a "Rec.709" LUT to HDR iPhone footage strips the PQ transfercharacteristics. Always toggle Export Color Space to BT.2020 / PQ before rendering.
For batch operations or custom tagging pipelines:
```python from moviepy.editor import VideoFileClip import ffmpeg import os
def tag_iphone_video(input_path, output_path, custom_fields): """ Injects custom metadata fields into an iPhone 14 Pro video using ffmpeg-python, preserving all existing technical metadata. """ stream = ffmpeg.input(input_path)
metadata_args = {} for key, value in custom_fields.items(): metadata_args[f'metadata:g'] = f'{key}={value}'
output = ffmpeg.output( stream, output_path, vcodec='copy', acodec='copy', map_metadata=0, # keep original metadata blocks **metadata_args )
ffmpeg.run(output, overwrite_output=True, quiet=True) print(f"Tagged: {input_path} → {output_path}")
'iphone_footage.mov', 'tagged_footage.mov', { 'title': 'Product Launch B-Roll', 'copyright': '© 2025 Acme Studios', 'comment': 'iPhone 14 Pro | Cinematic Mode | 4K60' } ) ```
If you edited on a non-HDR timeline and need to re-tag a flattened file as HDR:
``bash ffmpeg -i edited_flat_file.mp4 \ -c:v libx265 -crf 20 \ -pix_fmt yuv420p10le \ -color_primaries bt2020 \ -color_trc smpte2084 \ -colorspace bt2020_ncl \ -c:a copy \ output_restored_hdr.mp4 ``
The -color_primaries bt2020 and -color_trc smpte2084 flags re-inject the HDR transfer characteristics — this is what makes metadata parsers (and HDR TVs) recognize the file as HDR content.
| Metadata Key | Value for iPhone 14 Pro |
|---|---|
com.apple.quicktime.make | Apple |
com.apple.quicktime.model | iPhone14,2 |
com.apple.quicktime.software | iOS 17.x |
com.apple.quicktime.creation-date | Date/time of recording |
com.apple.quicktime.location.ISO6709 | GPS coordinates |
com.apple.quicktime.color-space | sRGB / BT.2020 (HDR) |
Note: iPhone14,2 (with the comma) or iPhone15,2 (for iPhone 14 Pro Max) are the model identifiers embedded in the codec — you can confirm by reading the com.apple.quicktime.model tag with exiftool:
``bash exiftool -com.apple.quicktime.model iphone_footage.mov ``
Try Calabi free at calabilabs.com — 3 cleans, no card.