Есть ли способ использовать FFMPEG для разложения видео на отдельные файлы изображений, а затем повторно собрать эти файлы изображений в видео со звуком из исходного видео в синхронизации с новой видеодорожкой?
Я считаю, что одним из ключевых элементов может быть правильная установка частоты кадров, но все комбинации, которые я пробовал, не сработали.
Я попробовал следующие комбинации:
ffmpeg -i "/InputVideoFilePath" "/OutputImageFilePath"
(Эта команда возвращает одинаковое количество файлов выходных изображений независимо от того, помещена ли спецификация частоты кадров во входной файл, выходной файл или в оба.)
Затем я также извлекаю аудио в отдельный файл, выполняя следующую команду:
ffmpeg -i "/InputVideoFilePath" "/OutputAudioFilePath"
Затем я собираю изображения в другой видеофайл, набрав одно из следующих:
ffmpeg -i "/OutputImageFilePath" "/OutputVideoFilePath"
ffmpeg -i "/OutputImageFilePath" -r 23.98 "/OutputVideoFilePath"
ffmpeg -r 23.98 -i "/OutputImageFilePath" -r 23.98 "/OutputVideoFilePath"
(23,98 была исходная частота кадров видео)
До сих пор как 1, так и 2 создают видео, которое короче исходного видео, а 3 создает видео одинаковой длины. Я не понимаю, как установка частоты кадров для ввода может иметь какое-либо значение, поскольку вход представляет собой просто серию изображений (т. Е. Как может серия кадров иметь частоту кадров?). В документации FFmpeg говорится, что установка частоты кадров на входе приводит к игнорированию меток времени, но как изображения могут иметь метки времени, если они не являются частью видео?
После использования метода 3 я накладываю аудиофайл mp3 на вновь созданный видеофайл с помощью команды:
ffmpeg -i "/PathToVideoFile" -i "/PathToAudioFile" "/PathOfFinalVideoOutput"
Конечный продукт только немного не синхронизирован, но все же заметно. Я могу показать вывод FFmpeg для каждого из этих шагов, если это необходимо (хотя, конечно, много выходных данных).