LINUX.ORG.RU

Помогите задать нужные мне ключи\парамеры для mkvmerge

 , ,


0

1

Не могу подобрать/сообразить какие ключи подать на вход команды mkvmerge, чтобы сменить кадры в секунду(fps) в видео.

Есть видео с камер наблюдения в формате *.av(поток без контейнера) их нужно перекодировать в более удобный формат. Я нашел что это можно сделать с помощью mkvmergе. Это получается с mkvtoolnix-gui мышкой ставлю нужный fps и всё получается, но видео много и хочется это автоматизировать. Я читал док https://mkvtoolnix.download/doc/mkvmerge.html там вроде предлагается ключ

--default-duration TID:x

как правильно составить команду? Ошибка такая:

$ mkvmerge -o out.mkv --default-duration 25p input.av
mkvmerge v34.0.0 ('Sight and Seen') 64-bit
Ошибка: '25p' не является правильной последовательностью идентификатора дорожки и продолжительности по умолчанию в '--default-duration 25p'.

Второй вопрос. Исходное видео с переменным fps и он не известен. Не определить(?). Я подбирал постоянный fps на глазок. Получается не очень. Как вообще тут поступить? Может чем-то другим перекодировать?

В mkvtoolnix gui - Объединение - Показать командную строку
Покажет правильную команду
--default-duration 0:25p
0 значит первая дорожка, нумерация начинается с нуля

Исходное видео с переменным fps и он не известен. Я подбирал постоянный fps на глазок. Как вообще тут поступить? Может чем-то другим перекодировать?

Указание неправильного fps без перекодирования в mkvtoolnix в разделе duration выльется в рассинхрон.
Переменный fps надо оставлять как есть. То есть в mkvtoolnix не указывать никаких параметров или можно в ffmpeg

ffmpeg -i input.av -map 0 -c copy output.mkv

Если не сработает:
ffmpeg -fflags +genpts -i input.av -map 0 -c copy output.mkv

Если и это не сработает (при сыром входном потоке), то перед -i нужно подсказать ffmpeg'у что за поток -c:v dvvideo например. Но в таком случае, наверное, mkvtoolnix будет прозорливей.

Если хочешь обязательно постоянную fps (чревато рывками), то только с пересжатием в ffmpeg с параметром -r 25 -vsync cfr.

Я иду спать, так что отвечу утром.

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

--default-duration 0:25p

Спасибо, получилось. Вот, что пишет про исходный поток:

mkvmerge -o out.mkv --default-duration 0:25p 20190605_033035.av 
mkvmerge v34.0.0 ('Sight and Seen') 64-bit
'20190605_033035.av': Применяется разделение для формата 'AVC/h.264'.
'20190605_033035.av' дорожка 0: Применяется модуль вывода для формата 'AVC/h.264 (неструктурированный)'.
Файл 'out.mkv' открыт для записи.
Обработано: 100%
Пишутся записи cue (индекс)...
Слияние 0 секунд.

Переменный fps надо оставлять как есть. То есть в mkvtoolnix не указывать никаких параметров

Если так сделать, то тоже работает, но файл длиной в час становится 11-ти минутным:

mkvmerge -o out.mkv 20190605_033035.av 
mkvmerge v34.0.0 ('Sight and Seen') 64-bit
'20190605_033035.av': Применяется разделение для формата 'AVC/h.264'.
'20190605_033035.av' дорожка 0: Применяется модуль вывода для формата 'AVC/h.264 (неструктурированный)'.
Файл 'out.mkv' открыт для записи.
Предупреждение: '20190605_033035.av' дорожка 0: Информация о синхронизации этой дорожки AVC/h.264 указывает на то, что в ней используется переменная частота кадров. Однако, ни продолжительность по умолчанию, ни внешний файл с метками времени не были предоставлены, равно как и исходный контейнер, могущий дать аналогичную информацию. Результирующие метки времени могут быть бесполезными.
Обработано: 100%
Пишутся записи cue (индекс)...
Слияние 0 секунд.

C ffmpeg в обоих вариантах тоже на выходе 11 минутное видео получается. И красным, в выводе, встречается такое:

[h264 @ 0x561c7c082a80] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x561c7c082a80] decode_slice_header error
[h264 @ 0x561c7c082a80] no frame!

Дело в том, что исходное видео около 4.9-5fps и если не указать это явно, то часовое видео сжимается до 11-ти минут. Видимо предполагает по умолчанию 25fps.

Спасибо за помощь. Если есть еще что-то, то пиши, как проснешься.

Lorovec
() автор топика
Ответ на: комментарий от Lorovec

Обычно указание неправильного fps в duration приводит к неправильной продолжительности. Раз у тебя наоборот, значит mkvtoolnix неправильно парсит входной поток, ведь он сырой. А звука нет, так что рассинхрон не страшен, но я бы все равно продолжительности особо не доверял, так как она напрямую зависит от указанной тобой fps.

Если не трудно, приведи mediainfo -full input.av (на pastebin) и ffmpeg -i input.av, любопытно, что за формат. Судя по всему, h264 поток обычный.

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