ffmpeg不会复制自定义元数据

时间:2013-02-19 15:14:51

标签: video ffmpeg transcoding

我正在尝试修复一些使用iDevice制作的视频。视频在元数据中有一个轮换,只有Apple及其软件才能理解,但其他人无法理解。解决这个问题非常简单,但我也希望将其他元数据保留在文件中,例如地理位置。

我尝试了几个版本,都有相同的结果,例如:

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不会改变任何东西。

是否有添加非标准元数据的技巧?我该如何获得该位置?

提前感谢能够对此提供一些见解的任何人。

2 个答案:

答案 0 :(得分:2)

FFmpeg mp4 muxer仅写入已知元数据类型的选择列表。一些复用器(如AVI)将使用自定义标签编写所有元数据字段(部分用于允许此类复用用例),但movenc.c尚未执行此操作(请参阅第2911或3064行中的代码块)。你可以自己实现它。

答案 1 :(得分:2)

显然,FFMPEG有关于此问题的文档错误:

https://trac.ffmpeg.org/ticket/4209