Битый mp4
От: Aniskin  
Дата: 31.05.24 11:39
Оценка:
У меня есть mp4 файл, у которого отсутствует примерно 1Мб в начале файла. И есть хороший mp4, сделанный той же камерой, что и первый. И есть желание "восстановить" битый файл. Поправьте меня, если я ошибаюсь. В видео потоке есть ключевые кадры, и предположу, что в начале ключевого кадра есть некая сигнатура, по которой его можно найти. И я могу просто найти эту сигнатуру, отрезать все, что идет до нее, и к этим данным подставить метаданные от хорошего файла, и полученный файл можно будет просмотреть в видео-проигрывателе.
Re: Битый mp4
От: andrey.desman  
Дата: 31.05.24 13:35
Оценка:
Здравствуйте, Aniskin, Вы писали:

A>У меня есть mp4 файл, у которого отсутствует примерно 1Мб в начале файла. И есть хороший mp4, сделанный той же камерой, что и первый. И есть желание "восстановить" битый файл. Поправьте меня, если я ошибаюсь. В видео потоке есть ключевые кадры, и предположу, что в начале ключевого кадра есть некая сигнатура, по которой его можно найти. И я могу просто найти эту сигнатуру, отрезать все, что идет до нее, и к этим данным подставить метаданные от хорошего файла, и полученный файл можно будет просмотреть в видео-проигрывателе.


Аудио в нем есть?
Re: Битый mp4
От: kov_serg Россия  
Дата: 31.05.24 13:50
Оценка: 2 (1)
Здравствуйте, Aniskin, Вы писали:

A>У меня есть mp4 файл, у которого отсутствует примерно 1Мб в начале файла. И есть хороший mp4, сделанный той же камерой, что и первый. И есть желание "восстановить" битый файл. Поправьте меня, если я ошибаюсь. В видео потоке есть ключевые кадры, и предположу, что в начале ключевого кадра есть некая сигнатура, по которой его можно найти. И я могу просто найти эту сигнатуру, отрезать все, что идет до нее, и к этим данным подставить метаданные от хорошего файла, и полученный файл можно будет просмотреть в видео-проигрывателе.


Успешно делал подобное этой прогой https://github.com/ponchio/untrunc
Re[2]: Битый mp4
От: Aniskin  
Дата: 31.05.24 20:19
Оценка:
Здравствуйте, andrey.desman, Вы писали:

AD>Аудио в нем есть?


Да.
Re[3]: Битый mp4
От: andrey.desman  
Дата: 01.06.24 04:38
Оценка: 4 (1)
Здравствуйте, Aniskin, Вы писали:

AD>>Аудио в нем есть?

A>Да.

Эх, с аудио оно сложнее...

Да, я бы попробовал прогу, что kov_serg выше посоветовал. Там есть какая-то эвристика, может чего и нарулит.

В целом ситуация такая:
Если атом 'moov' в конце файла, то все относительно не сложно. Вся мета есть, потерян только начальный кусок видео. Можно взять stco/co64 атом и по его оффсетам понять, сколько пропало из начала, потом добить начало заголовком атома 'mdat' и данные нулями.
Потом уже можно попробовать скормить какому-нибудь ффмпег.

Если атом 'moov' был вначале и именно он утерян, то дела в целом плохи.
Проблем добавляет аудио. В mdat аудио и видео идут вперемешку, а оффсеты и размеры указаны в 'moov' атоме, которго нет.
Какой-нибудь h264/avc1 имеет формат данных [nalu size][nalu data]... и все фреймы в теории можно восстановить. Особенно если каждый их них по 1 nalu занимает. Но тут надо еще pts и dts восстанавливать. Если b-frame нет, то это проще. Иначе не очень. SPS/PPS можно взять из аналогичного файла и если что подправить.
Каких-то специальных явных сигнатур для аудио нет, как и для видео. В зависиомости от формата можно пробовать детектить старт/стоп чанка аудио по заголовку, тут прям вероятности и эвристика.

В общем, это вполне реально, но запарно. Надо в форматах разбираться неплохо и попрогать придется. Та прога как база ок, дальше красноглазить.
Re[4]: Битый mp4
От: Aniskin  
Дата: 01.06.24 05:08
Оценка:
Здравствуйте, andrey.desman, Вы писали:

AD>Надо в форматах разбираться


А есть какой-нибудь ресурс в сети, на котором собрана техническая информация о кодеках?
Re[5]: Битый mp4
От: kov_serg Россия  
Дата: 01.06.24 12:58
Оценка: 4 (1)
Здравствуйте, Aniskin, Вы писали:

AD>>Надо в форматах разбираться


A>А есть какой-нибудь ресурс в сети, на котором собрана техническая информация о кодеках?

https://en.wikipedia.org/wiki/MP4_file_format
https://ossrs.io/lts/zh-cn/assets/files/ISO_IEC_14496-14-MP4-2003-9a3eb04879ded495406399602ff2e587.pdf
https://web.archive.org/web/20180219054429if_/http://l.web.umkc.edu:80/lizhu/teaching/2016sp.video-communication/ref/mp4.pdf
https://raw.githubusercontent.com/OpenAnsible/rust-mp4/master/docs/ISO_IEC_14496-14_2003-11-15.pdf
https://xhelmboyx.tripod.com/formats/mp4-layout.txt

https://www.iso.org/standard/83102.html
Как ни странно эта техническая информация платная. Но если очень поискать то найти можно. Но если собрать всё в одном месте можно огрести от правоторговцев.
Вообще wireshark умеет показывать mp4 поток.

https://github.com/sannies/mp4parser
https://github.com/alfg/mp4
https://github.com/Eyevinn/mp4ff
https://github.com/amarghosh/mp4viewer
Отредактировано 01.06.2024 13:16 kov_serg . Предыдущая версия .
Re: Битый mp4
От: Videoman Россия https://hts.tv/
Дата: 02.06.24 21:43
Оценка: 2 (1)
Здравствуйте, Aniskin, Вы писали:

A>У меня есть mp4 файл, у которого отсутствует примерно 1Мб в начале файла. И есть хороший mp4, сделанный той же камерой, что и первый. И есть желание "восстановить" битый файл. Поправьте меня, если я ошибаюсь. В видео потоке есть ключевые кадры, и предположу, что в начале ключевого кадра есть некая сигнатура, по которой его можно найти. И я могу просто найти эту сигнатуру, отрезать все, что идет до нее, и к этим данным подставить метаданные от хорошего файла, и полученный файл можно будет просмотреть в видео-проигрывателе.


В принципе всё может оказаться даже проще. Eсли там видео было в H.264, а аудио в AAC, то достаточно найти сигнатуру первого любого валидного семпла и поменять avc1 заголовки на annex.b, по месту заменив длину семпла на 0x00000001. Все семплы лежать рядышком компактно в MDAT.
Re: Битый mp4
От: Darky Darkov Россия  
Дата: 11.06.24 13:58
Оценка:
Здравствуйте, Aniskin, Вы писали:

A>У меня есть mp4 файл, у которого отсутствует примерно 1Мб в начале файла. И есть хороший mp4, сделанный той же камерой, что и первый. И есть желание "восстановить" битый файл. Поправьте меня, если я ошибаюсь. В видео потоке есть ключевые кадры, и предположу, что в начале ключевого кадра есть некая сигнатура, по которой его можно найти. И я могу просто найти эту сигнатуру, отрезать все, что идет до нее, и к этим данным подставить метаданные от хорошего файла, и полученный файл можно будет просмотреть в видео-проигрывателе.


Я бы просто ради интереса попробовал бы скопировать из битого файла то, что можно прочитать, в новый файл силами ffmpeg:

ffmpeg -i bad.mp4 -c copy output.mp4


Далее в видео-редакторе обрезать и/или синхронизировать звук.
Если ffmpeg не осилит, тогда брать тяжёлую артиллерию и разбираться в форматах.
Re[4]: Битый mp4
От: Aniskin  
Дата: 16.06.24 12:42
Оценка:
Здравствуйте, andrey.desman, Вы писали:

AD>Какой-нибудь h264/avc1 имеет формат данных [nalu size][nalu data]... и все фреймы в теории можно восстановить. Особенно если каждый их них по 1 nalu занимает. Но тут надо еще pts и dts восстанавливать. Если b-frame нет, то это проще. Иначе не очень. SPS/PPS можно взять из аналогичного файла и если что подправить.


h264/avc1 — это как раз мой случай (moov целый). Читаю разную документацию и не вижу в ней упоминания терминов pts/dts/SPS/PPS. Можете ли вы сказать пару слов о них.

Я смотрю корректный mp4 файл и в нем первый Nalu имеет тип 6 "Supplemental enhancement information (SEI)", следующий имеет тип 5 "Coded slice of an IDR picture" (как я понимаю — это ключевой кадр), затем несколько имею тип 1 ("Coded slice of a non-IDR picture"), затем снова 5, затем снова несколько 1, и так до конца файла. Про тип 6 пишут, что он не обязателен. И если я все правильно понимаю, то мне нужно найти первый целый Nalu с типом 5, откинуть все Nalu до него, подправить tkhd/mdhd/stts/ctts/stsc/stsz/stco, и вроде бы должен получится корректный файла. Или я не правильно понимаю?
Re[5]: Битый mp4
От: kov_serg Россия  
Дата: 16.06.24 15:38
Оценка: 2 (1)
Здравствуйте, Aniskin, Вы писали:

A>h264/avc1 — это как раз мой случай (moov целый). Читаю разную документацию и не вижу в ней упоминания терминов pts/dts/SPS/PPS. Можете ли вы сказать пару слов о них.


Тут посмотрите 1, 2

DTS Decoding Time Stamp
PPS Picture Parameter Set (AVC, MVC and SVC)
PTS Presentation Time Stamp
SPS Sequence Parameter Set (AVC, MVC and SVC)

Отредактировано 16.06.2024 16:39 kov_serg . Предыдущая версия .
Re[6]: Битый mp4
От: Aniskin  
Дата: 06.07.24 01:59
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Как ни странно эта техническая информация платная. Но если очень поискать то найти можно.


А кто-нибудь встречал в сети ISO/IEC 14496-10:2022. Версию от 2004 года можно найти, а вот от 2022 нет, или я не там ищу. Или как купить эту спецификацию будучи жителем РФ?
Re[7]: Битый mp4
От: kov_serg Россия  
Дата: 06.07.24 07:12
Оценка: 4 (1)
Здравствуйте, Aniskin, Вы писали:

_>>Как ни странно эта техническая информация платная. Но если очень поискать то найти можно.


A>А кто-нибудь встречал в сети ISO/IEC 14496-10:2022. Версию от 2004 года можно найти, а вот от 2022 нет, или я не там ищу. Или как купить эту спецификацию будучи жителем РФ?


Да
Re[8]: Битый mp4
От: Aniskin  
Дата: 22.01.25 09:16
Оценка:
Здравствуйте, kov_serg, Вы писали:

A>>А кто-нибудь встречал в сети ISO/IEC 14496-10:2022. Версию от 2004 года можно найти, а вот от 2022 нет, или я не там ищу. Или как купить эту спецификацию будучи жителем РФ?


_>Да


В целом, свою задачу я успешно для себя решил, битый AVC1+AAC LC успешно восстанавливается и без moov, но с образцом хорошего файла, на выходе имею корректный mp4, который корректно проигрывается в видеоплеерах. Решил еще поковырять H.265/HEVC, но с документацией сильно сложнее. Может быть есть в ваших загашниках ISO/IEC 23008-2:2023?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.