简体   繁体   English

ffmpeg不会复制自定义元数据

[英]ffmpeg does not copy custom metadata

I'm trying to fix some videos made with an iDevice. 我正在尝试修复一些使用iDevice制作的视频。 The videos have a rotation in the metadata which is only understood by Apple and its software but noone else. 视频在元数据中有一个轮换,只有Apple及其软件才能理解,但其他人无法理解。 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, eg: 我尝试了几个版本,都有相同的结果,例如:

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. 输出为.mov不会改变任何东西。

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

Apparently FFMPEG has a documented bug about this issue: 显然,FFMPEG有关于此问题的文档错误:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM