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

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

我看过一些关于如何使用 ffmpeg 将元数据从一个文件复制到另一个文件而无需重新编码的优秀文章。但我有 100 多个文件,想批量执行此操作。有什么建议吗?

附加信息:我有 2 个文件夹,一个包含具有正确元数据的视频文件,另一个包含具有不正确元数据的视频文件。这些文件具有相同的对应文件名。

答案1

我将给你一个脚本答案,可能有一个更通用的工具。

对于未来的读者,此脚本描述了如何复制元数据:使用 ffmpeg 将元数据从一个文件复制到另一个文件

以下脚本将循环遍历一个目录中的文件,在第二个目录中找到相应的文件,然后将这两个文件合并到第三个输出目录中

dir1=FIRST DIRECTORY
dir2=SECOND DIRECTORY
output=OUTPUT DIRECTORY
for file in $(ls $dir1); do
  ffmpeg -i "$dir1/$file" -i "$dir2/$file" -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 \
   "$outdir/$file"
done

元数据映射命令改编自引用的答案。

如果你想让某些东西可重复使用,你可以将其放入带有以下标题的脚本中(删除上面脚本中 dir1、dir2 和输出的分配)。然后将其调用为script.sh dir1 dir2 outdir

#!/bin/bash
set -x errexit # exit immediately on error
dir1="$1"
dir2="$2"
output="$3"

警告:我没有运行任何这些脚本。

相关内容