I'm trying to fix some videos made with an iDevice. The videos have a rotation in the metadata which is only understood by Apple and its software but noone else. Fixing this is quite simple, but I also would like to keep the other metadata in the files like the geolocation.
I tried a couple of versions, all with the same result, e.g.:
ffmpeg -i input.mov -vf vflip,hflip -map_metadata 0 -metadata:s:v:0 rotate=0 -acodec copy output.mp4
This should work, it already gives the correct preview of metadata:
ffmpeg version 1.1.2 Copyright (c) 2000-2013 the FFmpeg developers
built on Feb 8 2013 23:55:22 with Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/1.1.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --cc=cc --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
libavutil 52. 13.100 / 52. 13.100
libavcodec 54. 86.100 / 54. 86.100
libavformat 54. 59.106 / 54. 59.106
libavdevice 54. 3.102 / 54. 3.102
libavfilter 3. 32.100 / 3. 32.100
libswscale 2. 1.103 / 2. 1.103
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2013-02-17 00.39.36.mov':
Metadata:
major_brand : qt
minor_version : 0
compatible_brands: qt
creation_time : 2013-02-16 23:39:25
model : iPhone 5
model-deu : iPhone 5
encoder : 6.1
encoder-deu : 6.1
date : 2013-02-17T00:39:25+0100
date-deu : 2013-02-17T00:39:25+0100
location : +48.2683+007.7205+172.710/
location-deu : +48.2683+007.7205+172.710/
make : Apple
make-deu : Apple
Duration: 00:00:09.67, start: 0.000000, bitrate: 16764 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 16696 kb/s, 24 fps, 24 tbr, 600 tbn, 1200 tbc
Metadata:
rotate : 180
creation_time : 2013-02-16 23:39:25
handler_name : Core Media Data Handler
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 61 kb/s
Metadata:
creation_time : 2013-02-16 23:39:25
handler_name : Core Media Data Handler
w:1920 h:1080 pixfmt:yuv420p tb:1/600 fr:24/1 sar:0/1 sws_param:flags=2
[libx264 @ 0x7fc248829a00] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x7fc248829a00] profile High, level 4.0
[libx264 @ 0x7fc248829a00] 264 - core 125 - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=24 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'output.mp4':
Metadata:
major_brand : qt
minor_version : 0
compatible_brands: qt
creation_time : 2013-02-16 23:39:25
model : iPhone 5
model-deu : iPhone 5
encoder-deu : 6.1
date : 2013-02-17T00:39:25+0100
date-deu : 2013-02-17T00:39:25+0100
location : +48.2683+007.7205+172.710/
location-deu : +48.2683+007.7205+172.710/
make : Apple
make-deu : Apple
encoder : Lavf54.59.106
Stream #0:0(und): Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1920x1080, q=-1--1, 12288 tbn, 24 tbc
Metadata:
handler_name : Core Media Data Handler
creation_time : 2013-02-16 23:39:25
rotate : 0
Stream #0:1(und): Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, mono, 61 kb/s
Metadata:
creation_time : 2013-02-16 23:39:25
handler_name : Core Media Data Handler
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> libx264)
Stream #0:1 -> #0:1 (copy)
But the resulting file keeps only some of these metadata tags:
ffmpeg -i output.mp4
shows:
fmpeg version 1.1.2 Copyright (c) 2000-2013 the FFmpeg developers
built on Feb 8 2013 23:55:22 with Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/1.1.2 --enable-shared --enable-pthreads - -enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --cc=cc --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
libavutil 52. 13.100 / 52. 13.100
libavcodec 54. 86.100 / 54. 86.100
libavformat 54. 59.106 / 54. 59.106
libavdevice 54. 3.102 / 54. 3.102
libavfilter 3. 32.100 / 3. 32.100
libswscale 2. 1.103 / 2. 1.103
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
creation_time : 2013-02-16 23:39:25
date : 2013-02-17T00:39:25+0100
encoder : Lavf54.59.106
Duration: 00:00:09.67, start: 0.000000, bitrate: 3286 kb/s
Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 3219 kb/s, 24 fps, 24 tbr, 12288 tbn, 24 tbc
Metadata:
creation_time : 2013-02-16 23:39:25
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 61 kb/s
Metadata:
creation_time : 2013-02-16 23:39:25
handler_name : SoundHandler
I also tried to add the one tag I'm interested in by hand with
-metadata:g location=+48.2683+007.7205+172.710/
with no change in the result.
Output as .mov doesn't change anything, neither.
Is there any trick to add non-standard metadata? How do I get the location back in there?
Thanks in advance to anyone who can give some insight on this.
The FFmpeg mp4 muxer only writes a select list of known metadata types. Some muxers, like AVI, will write all metadata fields using custom tags (partially to allow such remuxing use cases), but movenc.c doesn't do that yet (see the code blocks in line 2911 or 3064). You could potentially implement it yourself.
Apparently FFMPEG has a documented bug about this issue:
https://trac.ffmpeg.org/ticket/4209
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With