У меня есть приложение, которое обрабатывает и нормализует аудио и видео файлы из разных источников.
Все входящее аудио нормализуется следующим образом:
ffmpeg.exe -i "PathToIncommingAudioFile" -acodec aac -ac 2 -ar 44100 -ab 128k -strict experimental ""outputFile.aac"
Все входящие видео нормализуются следующим образом:
ffmpeg.exe -i "PathToIncommingAudioFile" -s 852x480 -r 30 -aspect 1.775 -b:v 2000000 -vcodec mpeg4 -vf ""scale=iw*min(852/iw\,480 /ih):ih*min(852/iw\,480 /ih),pad=852:480 :(852-iw)/2:(480 -ih)/2"" -acodec aac -ac 2 -b:a 128k -ar 44100 -strict experimental "outputFile.mp4"
Каждая из этих команд (прошу прощения за любые плохие практики, это не моя область знаний) работает для нормализации мультимедиа, чтобы его можно было воспроизводить на разных устройствах.
Другой код позволяет нам успешно объединять аудио и аудио и видео в видео. Однако, когда я пытаюсь объединить их, звук не синхронизируется.
Вот что я делаю:
Сначала аудио преобразуется в видеофайл с использованием простого изображения PNG в качестве плаката.
ffmpeg.exe -loop 1 -shortest -i "image.png" -i "normalized.aac" -s 852x450 -r 30 -aspect 1.775 -b:v 2000000 -vcodec mpeg4 -acodec aac -ac 2 -b:a 128k -ar 44100 -strict experimental "audioAsVideo.mp4"
Затем видео пытаются объединить так же, как обычно. (Решение с ffmpeg не было найдено, и это то, что в настоящее время работает, в большинстве случаев)
mp4box.exe -cat "audioAsVideo.mp4" -cat "normalizedVideo.mp4" -new "CombinedVideo.mp4"
Далее для обработки некоторых видео, которые имеют только один канал аудио (например, веб-камеры), было добавлено следующее исправление. Он работает на всех видео в видео объединяет и обычно работает
ffmpeg.exe -i "CombinedVideo.mp4" -c copy -ac 1 "SingleChannelCombinedVideo.mp4"
Если этот процесс выполняется с аудио и видео, синхронизация аудио второго файла отключена. Если это звук над плакатом, это не имеет большого значения. Но если это видео, это очень отвлекает.
- Кто-нибудь видит что-нибудь, что я сделал, что может вызвать это?
- Идея на что поменять?
- Может быть, это способ вставить буфер между этими двумя, что заставит синхронизацию вернуться?
- Лучший способ сделать это?