You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

exiftool -v命令下Rotation属性缺失,FFmpeg转码元数据同步异常

解决方案

一、修正FFmpeg转码命令,同步元数据并保留视频方向

你的FFmpeg命令存在几个问题,导致元数据丢失和方向错误:

  1. -c copy放在视频编码器之前,会被后续的-c:v hevc_qsv覆盖,虽然音频的-c:a copy有效,但参数顺序需要调整;
  2. FFmpeg默认会自动应用旋转元数据将画面转成横屏,但不会保留旋转标签,导致输出文件丢失方向信息;
  3. movflags use_metadata_tags仅同步部分基础元数据,GPS等复杂元数据需要额外参数支持。

修正后的命令:

ffmpeg -hwaccel qsv -i "VID_20220629_201116.mp4" \
  -crf 27 -c:v hevc_qsv -global_quality 25 -vf "scale_qsv=1920:1080" \
  -c:a copy -preset slow \
  -map_metadata 0 -movflags use_metadata_tags+write_colr \
  -autorotate 0 -metadata:s:v rotate="90" \
  "VID_20220629_201116_h265 (2).mp4"

参数说明:

  • -map_metadata 0:完整同步源文件的所有元数据(包括GPS);
  • -movflags use_metadata_tags+write_colr:增强元数据写入支持,覆盖更多标签类型;
  • -autorotate 0:禁止FFmpeg自动旋转画面,保留原始方向标签让播放器识别;
  • -metadata:s:v rotate="90":手动写入旋转元数据(对应源文件的90度竖屏)。

如果希望直接输出竖屏画面而非依赖播放器旋转,可去掉-autorotate 0,在滤镜后添加transpose=clock(对应90度顺时针旋转)。

二、解决PyExifTool无法捕获Rotation的问题

你手动执行exiftool看到的Rotation是工具计算生成的虚拟标签,并非文件中存储的原始标签。MP4视频的方向信息实际存在于QuickTime的Orientation标签中,取值与旋转角度的映射关系为:

  • 1 = 正常(0度)
  • 6 = 顺时针90度
  • 8 = 逆时针90度
  • 3 = 180度

在PyExifTool中,需要读取Orientation标签来获取方向信息,示例代码:

import exiftool

with exiftool.ExifTool() as et:
    source_meta = et.get_metadata("VID_20220629_201116.mp4")
    # 获取原始Orientation值
    orientation = source_meta.get("QuickTime:Orientation")
    # 映射为旋转角度
    rotation_map = {1:0, 6:90, 8:270, 3:180}
    rotation = rotation_map.get(orientation, 0)

通过这种方式就能正确获取旋转角度,再将其写入目标文件的元数据中。

三、更优的元数据同步方案

如果FFmpeg的元数据同步仍有缺失,推荐用exiftool直接全量同步元数据,步骤如下:

  1. 先用FFmpeg完成转码(无需处理元数据,简化命令):
ffmpeg -hwaccel qsv -i "VID_20220629_201116.mp4" \
  -crf 27 -c:v hevc_qsv -global_quality 25 -vf scale_qsv=1920:1080 \
  -c:a copy -preset slow \
  "VID_20220629_201116_h265 (2).mp4"
  1. 用exiftool将源文件的所有元数据复制到目标文件:
exiftool -TagsFromFile "VID_20220629_201116.mp4" -all:all "VID_20220629_201116_h265 (2).mp4"

该命令会完整复制源文件的GPS、方向、时间戳等所有元数据,覆盖目标文件的对应标签。如果需要保留转码后视频的编码信息,可添加-overwrite_original_in_place并排除特定标签:

exiftool -TagsFromFile "VID_20220629_201116.mp4" -all:all -exclude:VideoCodec -exclude:AudioCodec -overwrite_original_in_place "VID_20220629_201116_h265 (2).mp4"

内容的提问来源于stack exchange,提问作者SShah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 07:55:19