有没有办法在 ffmpeg 中更改文件的元数据而无需复制(不重新编码!)

有没有办法在 ffmpeg 中更改文件的元数据而无需复制(不重新编码!)

如标题所示。我见过很多帖子讨论在没有重新编码,但我正在尝试批量输出文件以重置其旋转值。有没有办法做到这一点,而不需要将位复制到另一个文件;而只是更改文件的元数据?

我尝试了以下方法:

ffmpeg -i 0003.MP4 -c copy -metadata:s:v:0 rotate=0 0003_fixed.MP4

虽然这大多适用于我的用例,我试图以比重新复制整个文件更快的速度执行此操作。

此外,在比较这个固定文件的输出文件与我不需要旋转的文件的输出文件时,元数据存在一些差异:

未改变的文件:

  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '0002.MP4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf60.3.100
  Duration: 00:41:41.62, start: 0.000000, bitrate: 45201 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 45000 kb/s, 59.94 fps, 59.94 tbr, 60k tbn, 119.88 tbc (default)
    Metadata:
      handler_name    : GoPro AVC
      encoder         : GoPro AVC encoder
      timecode        : 17:01:09:16
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 189 kb/s (default)
    Metadata:
      handler_name    : GoPro AAC
    Stream #0:2(eng): Data: none (tmcd / 0x64636D74)
    Metadata:
      handler_name    : GoPro AVC
      timecode        : 17:01:09:16

更改的文件:

  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '0003_fixed.MP4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.29.100
  Duration: 00:35:23.14, start: 0.000000, bitrate: 45201 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 45000 kb/s, 59.94 fps, 59.94 tbr, 60k tbn, 119.88 tbc (default)
    Metadata:
      handler_name    : GoPro AVC
      timecode        : 17:43:43:04
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 189 kb/s (default)
    Metadata:
      handler_name    : GoPro AAC
    Stream #0:2(eng): Data: none (tmcd / 0x64636D74)
    Metadata:
      handler_name    : GoPro AVC
      timecode        : 17:43:43:04

请注意,它似乎删除了encoder: GoPro AVC encoder元数据片段。有人能给我一种方法来使用此实用程序,既不会删除除旋转标志之外的任何其他元数据,也不需要整个副本(即它在原地)吗?谢谢大家!

我希望找到一个解决方案

相关内容