从 mp4 中删除旋转元数据

Posted

技术标签:

【中文标题】从 mp4 中删除旋转元数据【英文标题】:Remove Rotate metadata from mp4 【发布时间】:2014-01-07 00:05:54 【问题描述】:

我正在尝试使用 ffmpeg 从我的 mp4 文件中删除或修改 rotate 参数。根据一些谷歌结果,我最终得到了这样的命令(我尝试了更多但没有一个有效):

$ ffmpeg -i ./source.mp4 -metadata rotate=0 ./output.mp4

但它根本不起作用。 rotate=270 元数据参数仍然存在于输出文件中。你能告诉我应该怎么做吗?

我正在使用

ffmpeg version 1.2.4 Copyright (c) 2000-2013 the FFmpeg developers
  built on Dec  9 2013 20:00:03 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/1.2.4 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=cc --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid

输出:

ffmpeg version 1.2.4 Copyright (c) 2000-2013 the FFmpeg developers
  built on Dec  9 2013 20:00:03 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/1.2.4 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=cc --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
  libavutil      52. 18.100 / 52. 18.100
  libavcodec     54. 92.100 / 54. 92.100
  libavformat    54. 63.104 / 54. 63.104
  libavdevice    54.  3.103 / 54.  3.103
  libavfilter     3. 42.103 /  3. 42.103
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/michal/Downloads/mp4_c8ffe9a587b126f152ed3d89a146b445.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf54.63.104
  Duration: 00:00:13.80, start: 0.021333, bitrate: 437 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 313 kb/s, 7.50 fps, 7.50 tbr, 15360 tbn, 15 tbc
    Metadata:
      rotate          : 270
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 134 kb/s
    Metadata:
      handler_name    : SoundHandler
File '/Users/michal/Desktop/mp4.mp4' already exists. Overwrite ? [y/N] y 
using SAR=1/1
[libx264 @ 0x7fb17b01ec00] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2
[libx264 @ 0x7fb17b01ec00] profile High, level 2.2
[libx264 @ 0x7fb17b01ec00] 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=7 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 '/Users/michal/Desktop/mp4.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    rotate          : 0
    encoder         : Lavf54.63.104
    Stream #0:0(eng): Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 640x480 [SAR 1:1 DAR 4:3], q=-1--1, 15360 tbn, 7.50 tbc
    Metadata:
      rotate          : 270
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac ([64][0][0][0] / 0x0040), 48000 Hz, stereo, s16, 128 kb/s
    Metadata:
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libx264)
  Stream #0:1 -> #0:1 (aac -> libfaac)
Press [q] to stop, [?] for help
frame=   99 fps= 39 q=32766.0 Lsize=     730kB time=00:00:13.80 bitrate= 433.1kbits/s    
video:497kB audio:226kB subtitle:0 global headers:0kB muxing overhead 0.821272%
[libx264 @ 0x7fb17b01ec00] frame I:8     Avg QP:14.85  size: 11183
[libx264 @ 0x7fb17b01ec00] frame P:68    Avg QP:17.68  size:  5348
[libx264 @ 0x7fb17b01ec00] frame B:23    Avg QP:18.26  size:  2419
[libx264 @ 0x7fb17b01ec00] consecutive B-frames: 53.5% 46.5%  0.0%  0.0%
[libx264 @ 0x7fb17b01ec00] mb I  I16..4: 31.9% 55.9% 12.1%
[libx264 @ 0x7fb17b01ec00] mb P  I16..4:  8.2%  9.1%  0.3%  P16..4: 54.3% 13.0%  7.6%  0.0%  0.0%    skip: 7.4%
[libx264 @ 0x7fb17b01ec00] mb B  I16..4:  0.2%  0.2%  0.0%  B16..8: 49.9%  4.0%  0.3%  direct: 8.6%  skip:36.8%  L0:45.5% L1:50.9% BI: 3.6%
[libx264 @ 0x7fb17b01ec00] 8x8 transform intra:53.3% inter:90.4%
[libx264 @ 0x7fb17b01ec00] coded y,uvDC,uvAC intra: 41.7% 90.1% 55.3% inter: 23.9% 56.7% 7.1%
[libx264 @ 0x7fb17b01ec00] i16 v,h,dc,p: 12% 20% 10% 59%
[libx264 @ 0x7fb17b01ec00] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 20% 28%  8%  8%  4%  8%  5%  5%
[libx264 @ 0x7fb17b01ec00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 24% 23% 18%  6% 11%  5%  8%  3%  3%
[libx264 @ 0x7fb17b01ec00] i8c dc,h,v,p: 57% 22% 18%  4%
[libx264 @ 0x7fb17b01ec00] Weighted P-Frames: Y:5.9% UV:0.0%
[libx264 @ 0x7fb17b01ec00] ref P L0: 61.2%  2.2% 23.5% 12.5%  0.6%
[libx264 @ 0x7fb17b01ec00] ref B L0: 74.2% 25.8%
[libx264 @ 0x7fb17b01ec00] kb/s:308.34

【问题讨论】:

是的,看起来是合法的。添加了输出:) 【参考方案1】:

尝试以下方法:

-metadata:s:v:0 rotate=0(见https://***.com/a/15336581/954643)

如果你想实际转置位:

-vf 'transpose=1' -metadata:s:v:0 rotate=0(见https://***.com/a/9570992/954643) 这会根据您的转置值正确转置视频,并仅为视频流擦除元数据。

请注意,视频过滤器rotate(例如-vf 'rotate=PI/2')将旋转视频流中的像素,但不会改变视频尺寸。 (https://***.com/a/23004567/954643)


根据 Brun Duyé 的评论,完整的命令是

ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=0 output=0 output.mp4

【讨论】:

所以,完整的命令是:ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=0 output.mp4。我需要一些努力才能找到完整的 ffmpeg 命令行。 答案末尾提供的链接现在已损坏,而是指向广告网站。 感谢@cr7pt0gr4ph7,我已经通过一个具体示例更新了指向 SO 资源的链接。 我不确定 output=0 是如何进入“完整命令”的,但它似乎只会导致 ffmpeg 4.2.4 出现问题。【参考方案2】:

为了澄清 brunetton 所说的:单独使用的选项 -metadata:s:v:0 rotate=0 似乎不会删除元数据,因为以这种方式处理并使用 Firefox 播放的垂直视频仍将直立显示。 -c copy 选项也必须用于仅影响元数据。

【讨论】:

【参考方案3】:

根据文档将 -noautorotate 添加到要禁用的命令中。

-自动旋转 根据文件元数据自动旋转视频。默认启用,使用 -noautorotate 禁用它。

【讨论】:

以上是关于从 mp4 中删除旋转元数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从 MP4 文件中提取元数据轨道

C#MP4文件.mp4元数据标签编辑

是否有使用 Scala 或 Java 编辑 MP4 元数据的库? [关闭]

视频转码成mp4格式,添加关键帧,添加元数据,把元数据放在第一帧

视频转码成mp4格式,添加关键帧,添加元数据,把元数据放在第一帧,可拖动

如何根据方向元数据旋转 JPEG 图像?