我看过一些关于如何使用 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"
警告:我没有运行任何这些脚本。