LINUX.ORG.RU

ffmpeg: запись в MKV-файл с возможностью перемотки на лету

 ,


1

3

Здравствуйте. Еще раз :)

В продолжение моего наболевшего вопроса о переносе видеонаблюдения с motion на костыли имеется вопрос.

При записи RTSP-потока в MKV-файл, используя ffmpeg, он не может читаться плеером на лету, а только после окончания процесса. Я не специалист в ffmpeg и в целом в кодировании видео, но подсознанием понимаю что должны записываться еще какие-нибудь временные маркеры или ключевые кадры.

ffmpeg -rtsp_transport tcp -i «rtsp://192.168.1.10:554/user=admin&password=&channel=1&stream=0?.sdp» -r 15 -preset veryfast -an -vcodec copy -map 0 -segment_format mkv -strftime 1 /videos/abc1.mkv

Кто-нибудь знает, какой еще ключ нужен ffmpeg, чтобы записываемый файл мог просматриваться параллельно ?

Спасибо!

Я делал видеонаблюдение на rpi-1 и оно проработало у меня больше года, выполнив мои цели на 146%. Правда, для этого мне пришлось купить веб-камеру со встроенной поддержкой motion jpeg. ffmpeg завести не смог - слишком тяжел для rpi-1, только стоп-кадры получались. Поэтому использовал mjpg-streamer или что-то в этом роде.

SunDoc ()

MKV это контейнер, видеодорожка в нем может быть пожата разными кодировщиками. Как то сталкивался с тем, что ffmpeg перекодирует видео в некоторые форматы долго не сбрасывая буфер в локальный файл. Пока весь входной файл не перекодирует во временный файл, выходной не записывается. Некоторые форматы, наоборот, сразу позволяют плеером смотреть что получилось. Здесь вместо -vcodec copy указать другой кодек. Конкретно кодек не подскажу, давно занимался этим.

foxy_ant ()

параллель поток в куда-нибудь ещё, кроме файла, можешь в какой-нибудь icecast, nginx или просто в тот же rtp ffmpeg'а.

https://trac.ffmpeg.org/wiki/Creating multiple outputs

это для параллельной записи и просмотра потока в твоём плеере.

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

попробуй другой плеер, ffplay например.

-r 15 -preset veryfast и -vcodec copy не рифмуются, кстати. ты либо изменяешь поток с перекодированием, либо копируешь как есть.

https://trac.ffmpeg.org/wiki/Encode/H.264

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

Спасибо за подсказки по поводу изменения потока с перекодированием.

Однако motion используя ffmpeg как-то хитрожопо мог записывать файл так, что его параллельно можно было открывать на воспроизведение.

В реалтайме смотреть стрим я умею, мне бы именно с файлом разобраться...

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

попробовал сейчас смотреть через ffplay записываемый файл, всё ок, не прерывается. из настроек указал только кодек (h264) и crf. версия ffmpeg — n4.1.

может как-то связано с -f segment, который, кстати, у тебя не используется (судя по приведённой тобой команде), хоть ты и пытаешься его настроить.

если хочешь просто записывать поток, без сегментов, то

ffmpeg ... -i ... -c copy abc.mkv

если хочешь перекодировать, то

ffmpeg ... -i ... -c:v h264 -crf 22 -preset ultrafast -c:a libopus abc.mkv

если хочешь сегментировать запись, то

ffmpeg ... -i ... ... -f segment -segment_time 1:0:0 abc%d.mkv

в этом случае сегменты будут длительностью в 1 час. по умолчанию длительность равна 2 секундам и если в имени файла не используется %-форматирование, то файл перезаписывается.

https://www.ffmpeg.org/ffmpeg-formats.html#segment_002c-stream_005fsegment_00...

anonymous ()