LINUX.ORG.RU

Перемотка видео FFMPEG

 


0

1

Всем добрый день! Сразу предупрежу, что мало что понимаю в кодировании видео, аудио и т.п., но нужно решить задачу. Есть набор .png файлов и нужно сделать из них видео. Вроде бы все просто, но у них не может быть постоянного framerate, но есть описание каждого файла, на какой секунде он должен будет показываться. Я сначала использовал библиотеку Aforge, которая является оберткой над нативными библиотеками ffmpeg, видео получил, но перемотка «назад» и «вперед» ни в одном видеоплеере не работает. Далее попробовал через сам ffmpeg. Я генерирую файл input.txt скриптом вида:

file 'files201688115928973.png'
duration 0.063
file 'camer20168811592938.png'
duration 0.031
file 'polls20168811592965.png'
duration 0.015
file 'users20168811592989.png'
duration 0.078
file 'tests201688115929157.png'
duration 0.063
file 'chatW201688115929222.png'
duration 0.047

И обрабатываю командой типа этого:

ffmpeg -f concat -i input.txt output.avi

Видео получается такое же по времени, но перемотка все также не работает. Подскажите пожалуйста, что надо сделать, чтобы она заработала, куда копать.

Заранее большое спасибо!

Другой софт для слайдшоу не пробовал?

anonymous ()

Попробуй закодировать в какой-нибудь mjpeg, там все кадры ключевые и поиск должен быть быстрым, правда размер файла сильно вырастет.

ffmpeg -f concat -i input.txt -c:v mjpeg -q:v 1 output.mkv

Посмотри ещё на опцию -ts_from_file. Если у тебя в дате создания файлов стоит точное время снятия кадра, то можно поставить значение этой опции на ns, вместо того, чтобы писать продолжительность для каждого файла в input.txt. Но я не проверял и не знаю как оно будет работать с conact.

Ещё можешь попробовать конвертировать фреймрейт в постоянный (дублированием недостающих и исключением лишних кадров):

ffmpeg -f concat -i input.txt -r 60 -c:v h264 -crf 20 output.mkv

В ffplay можно перематывать кликая правой кнопкой в окно, ширина окна «равна» продолжительности видео.

anonymous ()

Либо используй параметр -g, он устанавливает промежуток между ключевыми кадрами. Либо используй другой контейнер, mp4 или mkv.

i-rinat ★★★★★ ()
Ответ на: комментарий от anonymous

Я немного неправильно описал проблему. На примере с контейнером avi перемотка вроде бы работает, т.е. я жму на середину видео - ползунок перемещается, а кадры не меняются. С mkv пробовал, перемотка почти работает, но с очень большим запозданием кадры меняются долго, т.е. нажал и жду минуту примерно, плюс начинает прыгать время, к примеру с 15 секунд сразу на 2 минуты и т.д. С дублирование кадров странная ситуация получается, видео длится несколько секунд, хотя показывает больше часа.

Explomat ()
Ответ на: комментарий от i-rinat

Спасибо,более менее нормально получилось(перемотка заработала) используя контейнер mp4. Но конвертируется порядка 1-ого часа с лишним, а в avi около 30 секунд. Скорость очень маленькая, с чем это может быть связано?

Explomat ()

а может просто использовать фиксированный фреймрейт и одну картинку пихать нужное количество кадров подряд?

omnomnomnus ()
Ответ на: комментарий от Explomat

с чем это может быть связано?

Ты не указываешь кодек, которым сжимать, поэтому ffmpeg выбирает его за тебя. Скорее всего, в avi контейнер жмётся в xvid, а в mp4 — libx264. Второй гораздо тяжелее для сжатия и декодирования.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

Скорее всего, в avi контейнер жмётся в xvid

Скорее в motion jpeg.

duration 0.015

Это 60 кадров в секунду

nvl ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.