![使用 ffmpeg 将元数据从一个文件复制到另一个文件](https://linux22.com/image/1472308/%E4%BD%BF%E7%94%A8%20ffmpeg%20%E5%B0%86%E5%85%83%E6%95%B0%E6%8D%AE%E4%BB%8E%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%8D%E5%88%B6%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6.png)
我想使用 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