使用 ffmpeg 将元数据从一个文件复制到另一个文件

使用 ffmpeg 将元数据从一个文件复制到另一个文件

我想使用 ffmpeg 将与视频核心方面(帧速率、分辨率)无关的所有元数据从一个视频复制到另一个视频。有没有一种简单的方法可以用单个命令完成此操作?

答案1

使用-map_metadata

在此示例中,全局和流元数据将从 复制in0.mkv。视频和音频流将从 流复制in1.mkv

ffmpeg -i in0.mkv -i in1.mkv -map 1 -c copy \
# copies all global metadata from in0.mkv to out.mkv  
-map_metadata 0 \
# copies video stream metadata from in0.mkv to out.mkv
-map_metadata:s:v 0:s:v \
# copies audio stream metadata from in0.mkv to out.mkv
-map_metadata:s:a 0:s:a \
out.mkv

这将导致类似这样的结果:

Output #0, matroska, to 'out.mkv':
  Metadata:
    title           : Global Title
    AUTHOR          : Global Author
    Stream #0:0: Video: h264
    Metadata:
      title           : Stream 0 Title
    Stream #0:1: Audio: vorbis
    Metadata:
      title           : Stream 1 Title

默认情况下,全局元数据是从第一个输入文件复制的,因此-map_metadata 0可能会被省略。

答案2

从答案中的评论如何让 Handbrake 保留捕获时间/创建时间?

添加复制特殊标签选项的完整命令行将是:

ffmpeg -i in.mp4 -i out.mp4 -map 1 -map_metadata 0 -c copy -movflags use_metadata_tags fixed.mp4

答案3

为了将 Flac 解码为 AIFF 同时保留元数据,这个答案对我来说效果更好:将 FLAC 转换为 AIFF,同时保存标签/元数据

答案4

如果你需要的只是基本信息(创建日期等),那么 touch -r FILE1 FILE2 将像一个超级按钮一样将元数据从 FILE1 复制到 FILE2

相关内容