В то время как Гайану дали ответ, я собираюсь обсудить, как я заставил это работать.
Поскольку шансы на то, что я смогу соответствовать точной продолжительности и частоте кадров фильма и, таким образом, получим идеальное наложение двух видео, в лучшем случае маловероятны, а в худшем невозможны, я решил использовать альтернативный подход.
Идеальное наложение кадра может быть достигнуто путем деконструкции целевого видео на отдельные кадры:
exec.Command("ffmpeg", "-i", fmt.Sprintf("%s%s", CCME.PathsToUse[0], CCME.UnderlayVideo), "-start_number", "0", "-qscale:v", "2", fmt.Sprintf("%s%s%%d.jpg", TempDirPath[0], VideoName))
Наложение кадров по отдельности:
for x:=0; x<len(files)-2; x++ { overlayFile := exec.Command("ffmpeg", "-i", fmt.Sprintf("%s%s%d.jpg", TempDirPath[0], VideoName, x), "-i", fmt.Sprintf("%s%s%d.png", CCME.PathsToUse[1], CCME.VideoName, x), "-filter_complex", "overlay", "-y", fmt.Sprintf("%s%s%d.jpg", TempDirPath[1], VideoName, x))
(Примечание: в большинстве случаев не нужно было бы указывать -2. TempDir, в котором это делается, содержит подкаталог и аудиофайл, который необходимо учитывать.)
Затем Реконструкция видео на основе частоты кадров и видеотипа, полученная путем анализа выходных данных файла ffmpeg -i:
cmdConstruct := exec.Command("ffmpeg", "-framerate", AudioFS[1], "-i", fmt.Sprintf("%s%s%%d.jpg", TempDirPath[1], VideoName), "-c:v", "libx264", "-crf", "18", "-pix_fmt", "yuv420p", "-y", "-vsync", "0", "-strict", "-2", fmt.Sprintf("%s%s.%s", CCME.PathsToUse[2], CCME.FinalVideoName, VideoFormat))
Используя этот метод, аудио также необходимо было повторно добавить. В моем случае мне просто помогло скопировать аудио из основного файла и слить его поверх нового видео.