@Zhmak

Как извлечь I-frame из потока h264?

Во время поездки сливал видео с регистратора. Т.е. на входе имеем тучу mov файлов в формате h264 с фиксированным битрейтом.

Задача: получить на выходе карлапс видео (carlapse). Для этого нужно ускорить его в n раз.

Так как видеопоток состоит из последовательности GOP, то почему бы не оставить только I фреймы? Подразумеваю, что потоковый режим кодирования регистратора имеет фиксированный паттерн GOP. Убрав промежуточные фреймы, получим бесплатное ускорение видео без транскодирования. Субьективно, качество картинки должно даже вырасти, так как не будет P фреймов.

Вопрос: как извлечь I фреймы и вывести их в отдельный видеопоток?
  • Вопрос задан
  • 657 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Zhmak Автор вопроса
Дурацкое решение, но рабочее:

1. Склеиваем файлы.
Для этого готовим список файлов в txt вида:
file 'D:\video\dvr\20171101_01.mov'
file 'D:\video\dvr\20171101_02.mov'
file 'D:\video\dvr\20171101_03.mov'

файл используется в качестве параметра входного файла:
ffmpeg.exe -f concat -safe 0 -i "D:\video\dvr\files.txt" -c copy
"D:\video\movie.mov"


2. Выщепляем iframes, убираем звук:
ffmpeg -discard nokey -i "D:\video\movie.mov" -an -c copy "D:\video\iframes.mov"


3. Пересобираем без таймлайна:
ffmpeg -i "D:\video\iframes.mov" -r 30 -c copy "D:\video\final.mov"


Собрать опции воедино не получилось, так как в некоторых случаях, опции игнорируются.
Неплохо было сделать всё через пайпы, но не смог.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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