1

Я начинающий пользователь ffmpeg, пытающийся мультиплексировать видео h.264 со вторым треком комментариев .wav, без перекодирования чего-либо на стороне видео. Аудио видео находится в формате .aac.

Я использую Bandicam для записи отснятого материала; есть настройка для записи отдельного файла .wav (комментарий) одновременно.

Когда я сначала попытался понять это, я открыл ветку (ссылка внизу) и был очень взволнован полезностью ответившего пользователя. Ответ, казалось, полностью удовлетворил мой вопрос. Однако теперь у меня появилась новая проблема, и поэтому я хотел бы открыто об этом спросить.

Некоторые записи возвращают ошибку, о которой я упоминал в заголовке, когда я пытаюсь вернуть комментарий к видео. «Входной буфер исчерпан до того, как найден элемент END» - ошибка. Файлы заканчивают мультиплексировать, но если ошибка происходит достаточно много раз, в видео происходит заметная десинхронизация видео / аудио. Я обновил свои исполняемые файлы FFMPEG до последних сборок, и предыдущая полезная душа указала, что у меня могут быть "искаженные аудиопотоки".

Но опять же, (1) это не все из них, только некоторые, и (2) оба аудиопотока (оригинальная запись аудио и комментарии) звучат безупречно, когда я загружаю .mp4 в Movie Studio. Поэтому я испытываю желание сказать, что виновником является ffmpeg/avanti.

Несмотря на это, я понятия не имею, каким может быть решение. Пожалуйста, помогите, если у вас есть идеи.

Вот оригинальная тема, для вашей справки.

1 ответ1

3

Аудио AAC состоит из кадров. Каждый кадр содержит различные типы элементов. Последний элемент в каждом кадре является элементом END. Полученное сообщение об ошибке указывает на то, что FFmpeg просмотрел кадр, но не нашел элемент END. Таким образом, он пропускает этот кадр во время remux, и это в конечном итоге нарушает синхронизацию, если происходит слишком много таких событий. Вот несколько попыток обойти это.

# 1 Сохранить оригинальные метки времени

ffmpeg -copyts -i video.mp4 -i audio.wav -map 0 -map 1:a -c:v copy -c:a:0 copy -c:a:1 aac video-new.mp4

# 2 Игнорировать ошибки потока и сохранять оригинальные метки времени

ffmpeg -copyts -err_detect ignore_err -i video.mp4 -i audio.wav -map 0 -map 1:a -c:v copy -c:a:0 copy -c:a:1 aac video-new.mp4

# 3 Кодирует аудио видео, но сохраняет пробелы из-за поврежденных кадров

ffmpeg -i video.mp4 -i audio.wav -filter_complex "[0:a]aresample=async=1:min_comp=0.02[a]" -map 0:v -map "[a]" -map 1:a -c:v copy -c:a:0 aac -c:a:1 aac video-new.mp4

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .