2013-02-19 133 views
9

我試圖修復一些使用iDevice製作的視頻。這些視頻在元數據中進行了輪換,只有Apple和其軟件能夠理解這些視頻,而不是其他人。解決這個問題非常簡單,但我也想將其他元數據保存在地理位置等文件中。ffmpeg不復制自定義元數據

我試了幾個版本,都具有相同的結果,例如:

ffmpeg -i input.mov -vf vflip,hflip -map_metadata 0 -metadata:s:v:0 rotate=0 -acodec copy output.mp4 

這應該工作,它已經給了元數據的正確預覽:

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) 

但生成的文件僅保留這些元數據標籤中的一部分:

ffmpeg -i output.mp4 

顯示:

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 

我還試圖通過手

-metadata:g location=+48.2683+007.7205+172.710/ 

與結果沒有變化添加一個標籤,我感興趣的東西。

輸出爲.mov也不會改變任何內容。

添加非標準元數據有什麼竅門嗎?我如何將位置返回到那裏?

在此先感謝任何能夠提供一些見解的人。

+0

你修剪ffmpeg的控制檯輸出其潛在削減了有用的信息。 – LordNeckbeard 2013-02-19 19:01:32

+0

我現在增加了所有的輸出,希望它有助於找到問題 – e110c0 2013-02-20 14:06:22

回答

1

FFmpeg mp4複用器只寫入已知元數據類型的選擇列表。一些複用器,如AVI,將使用自定義標籤寫入所有元數據字段(部分允許這樣的複用用例),但movenc.c尚未完成(參見第2911或3064行的代碼塊)。你可以自己實現它。