Когда я пытаюсь извлечь aac из webm, будут несоответствия продолжительности. aac на десять минут меньше. Разные webm видео, разрыв не тот.
webm видео создано chrome extensionchrome.tabCapture.capture
код:
chrome.tabCapture.capture({
video: true,
audio: true,
videoConstraints: {
mandatory: {
minWidth: 1920,
minHeight: 1080,
maxWidth: 1920,
maxHeight: 1080,
maxFrameRate: 30,
minFrameRate: 30,
}
}
})
Приведенный выше код вернет поток, я буду использовать метод JS МедиаРекордер для обработки этого потока и, наконец, сохраню его как файл webm.
код:
new MediaRecorder(stream, {
audioBitsPerSecond: 128000,
videoBitsPerSecond: 2500000,
mimeType: 'video/webm;codecs=vp9'
})
Если вы не знаете значение приведенного выше кода, не беда, поясню основную информацию:
19201080301280002500000video/webm;codecs=vp9Я пробовал много методов, например, следующие:
# 1
ffmpeg -i ./source.webm -y -fflags +genpts -max_muxing_queue_size 99999 -r 15 -crf 30 -filter:v crop=750:560:0:0 ./x.mp4
ffmpeg -i ./x.mp4 -y -vn -acodec libfdk_aac -b:a 200k ./x.aac
# 2
ffmpeg -i ./source.webm -y -vn -acodec libfdk_aac -b:a 200k ./x.aac
# 3
ffmpeg -i ./source.webm -y -vn -acodec libfdk_aac -b:a 200k -map 0 ./x.aac
# 4
ffmpeg -i ./source.webm -y -max_muxing_queue_size 99999 -r 15 -crf 30 -filter:v crop=750:560:0:0 ./x.mp4
ffmpeg -i ./source.webm -y -vn -acodec aac -b:a 200k ./x.aac
# etc.
Но все без исключения провалились. Мучаюсь с этой проблемой 4 дня.
URL-адрес загрузки веб-файла: https://drive.google.com/file/d/1m4fC1hU-tXFPOZayrYCs-yteSTxw_TaW/view?usp=sharing
Вы не можете извлечь необработанный битовый поток из контейнера и ожидать, что временные метки останутся.





То, что делают многие приложения для конференций или веб-записи, не сохраняют тишину, когда аудиовход отсутствует или молчит (как определено некоторым порогом громкости). WebM и MP4 являются контейнерами с временной индексацией, поэтому медиаданные имеют правильные временные метки для целей воспроизведения или редактирования. .mp3 или .aac нет, поэтому без временных меток продолжительность соответствует фактическому количеству записанного и сохраненного звука. Дополнительная проблема заключается в том, что продолжительность, которую вы видите с помощью ffmpeg -i in.aac, является оценкой, основанной на размере файла и условном битрейте. Для потока VBR эта оценка может быть ошибочной.
Либо храните и работайте со звуком в контейнере с временными метками, такими как MP4, MKV и т. д.
ffmpeg -i ./x.mp4 -y -vn -acodec libfdk_aac -b:a 200k ./x.mp4
или заполните пробелы временных меток звуковой тишиной,
ffmpeg -i ./x.mp4 -y -vn -af aresample=async=1:first_pts=0:min_hard_comp=0.01 -acodec libfdk_aac -b:a 200k ./x.aac
Эта последняя команда может по-прежнему отображать неправильную расчетную продолжительность, но редактор после генерации пиков покажет правильную продолжительность.
ты спас меня.. Большое спасибо.
Я проверил и обнаружил, что первый не имеет никакого эффекта, а второй не вызывает проблем.
Когда я использовал второй метод для извлечения aac, проблем с длительностью не было. Но звук внутри будет прерывистым. Это еще один файл aac, который я извлек: drive.google.com/file/d/1W9QW_NHN-CXJ5CWV9edQL3LNbwdFv5Ga/… (начиная с 5 минут 14 секунд)
Хорошо, я посмотрел на source.webm, и аудиопоток в порядке, но временные метки для аудио и видео неверны. Воспроизведение видео происходит быстрее, чем в реальном времени. ffmpeg также жалуется на метаданные файла: Length 5 indicated by an EBML number's first byte 0x0c at pos 15688587 (0xef638b) exceeds max length 4 и Invalid length 0x149d > 0x8 for element with ID 0xE7 at 0x1872992
Есть ли способ решить эту проблему? Потому что звук теперь имеет заметное прерывистое ощущение
Промежутки временных меток аудио не должны быть заполнены (что делает моя вторая команда), потому что временные метки неверны. Видео нужно исправить. Я посмотрю на это позже сегодня.
Большое спасибо за Вашу помощь. Если вам понадобится какая-либо дополнительная информация от меня, я предоставлю ее немедленно.
Продолжительность видео по наложенным часам выглядит правильно. Но воспроизведение слишком быстрое. Я бы посчитал это ошибкой с плагином и должен быть исправлен там.
Хорошо спасибо большое. Другими словами, FFmpeg не может решить эту проблему?
Если бы характер искажения метки времени/шкалы времени был известен, его можно было бы исправить. Поднимите вопрос с автором расширения.
Хорошо, большое спасибо. Я решил проблему неправильного размещения аудио и видео webm. В настоящее время второй метод может использоваться для выравнивания без каких-либо других побочных эффектов. Несовпадение аудио и видео WebM вызвано одновременной записью нескольких файлов.
@Gyan Метод 2. также работает для моего дела, но я также получил много вырезок. Даже на неповрежденных частях моего видео. В любом случае спасибо большое! Моя тема: stackoverflow.com/questions/64606142/…
Изменить async=1 на async=3072
Похоже на ошибку в Chrome, о которой вы можете сообщить crbug.com.