Задать вопрос
@DWZ

Как исправить без перекодировки?

Есть 2 mp4-файла. В одном видео без звука, в другом - звук к нему. Требуется без перекодировки объединить их в один mp4-файл. Проблема в том, что у файла с видео не совсем корректный заголовок, в результате VLC и MP Classic играют его без проблем, а вот ffmpeg (и AviDemux) открывают только первый сегмент из 39.

Файл с видео разбит на сегменты по 26 кадров (логичнее было бы по 25, но уж как есть), причём длительность (duration) указана только для первого и последнего сегментов, для остальных она равна нулю.

spoiler
6387d3b9df9a3238057971.png

spoiler
6387d3faba54f987609017.png
В moov->mvex->trex указана длительность по умолчанию 3600, но ffmpeg, видимо, её игнорирует.
spoiler
6387d4f14b4c2649784483.png
В moov таблицы stts, stsc и т.д. пустые. Что мне не понравилось - в moov -> trak -> mdhd указано time scale=90 000
spoiler
6387d65aa78a2812740770.png
а в moov -> mvhd указано time scale=1 000
spoiler
6387d6a302ee9019229258.png
но длительность чуть ниже с учётом этого масштаба получается правильная - 39 сек
spoiler
6387d7110fb62274894846.png
ffmpeg видит только первый сегмент (чуть больше 1 сек). Пытался перенумеровать кадры через
ffmpeg -i video.mp4 -vcodec copy -bsf:v h264_mp4toannexb out.h264
ffmpeg -fflags +genpts -r 25 -i out.h264 -c copy out.mp4

все равно на выходе только первая секунда.

Как заставить ffmpeg увидеть весь файл? Или проставить duration=3600? Или как объединить видео и звук без перекодировки каким-либо другим методом?
  • Вопрос задан
  • 215 просмотров
Подписаться 2 Средний 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы