LINUX.ORG.RU

Запись видео в OpenCV под Linux: не работает VideoWriter::write()

 


1

1

Спрашиваю у тех, кто в теме. Интернет завален непонятками по вопросу неработоспособности VideoWriter::write(). Создается маленький видео-файл, в котором есть только заголовок (размером 5-8кб в зависимости от используемого кодека) и все.

Среда: Debian Linux 9 Stable
OpenCV из стандартного репозитария: libopencv-dev 2.4.9.1+dfsg1-2.
FFMPEG из стандартного репозитария: ffmpeg 7:3.2.8-1~deb9u1

Кто-то пишет, что неработает из-за путанницы в пакетах ffmpeg* libav*. Кто-то пишет, что нужно экспериментальным путем подобрать кодек, но я попробовал десяток комбинаций, взятых из постов «У меня все работает!» - тоже болт. Кто-то пишет, что не работает по причине отключения флага поддержки видеозаписи в стандартных репозитариях (зачем так делать - непонятно), и надо сносить стандартный пакет и хитро собирать из исходников. Кто-то пишет, что никогда вообще не видел чтоб видеозапись работала под Linux, типа эта подсистема работает только в Windows, и разработчики под Линухом даже не тестируют и не обещают поддержку. Кто-то пишет, что неработает с 2015 года и работать не будет.

Перед тем как я уработаю систему кривыми пакетами и не менее кривыми руками, я хочу услышать у того, кто столкнулся с такой проблемой и решил ее: что делать, как заставить писать VideoWriter::write() минимальными средствами?

Краткий пример, в котором запись не работает:

https://pastebin.com/NZbjek0d

★★★★★

Последнее исправление: Xintrea (всего исправлений: 1)

Ситуёвина такая, когда ты создаёшь videoWriter и в нём указываешь что color=true, но в результате применения фильтра у тебя получается чб кадр, то не пишется.
Т.е. если в твоём примере сделать:

videoWriter.open(filename, codec, fps, sizeOfFrame, false);
то всё пишется.

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

У меня если что debian testing. И ещё я if(cv::waitKey(30) == 27) сделал.

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

Блин, я вычитал только то, что размер сохраняемого видеопотока должен равняться размеру каждого кадра, иначе молча не будет сохраняться. Поэтому сделал определение ширины и высоты из первого кадра захватываемого потока.

Но то, что Ч/Б изображение не сможет сохраниться в цветной формат, предположить даже не мог.

Все работает, благодарю!

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

Ч/Б изображение не сможет сохраниться в цветной формат

размер cv::Mat разный.

aiqu6Ait ★★★★
()
Последнее исправление: aiqu6Ait (всего исправлений: 1)
Ответ на: комментарий от aiqu6Ait

Ffmpeg - штука непростая. Там любят время от времени ломать совместимость, так что запросто может не собраться код, который компилился и работал ещё пару версий назад. И это очень печально, поскольку так-то библиотека очень мощная, поддерживает целый Вавилон кодеков и контейнеров и альтернатив ей особо не наблюдается.

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

Да. Но OpenCV читает-пишет видео через ffmpeg, по крайней мере по умолчанию в Windows, и там эти же косяки ,правда в меньшем количестве, вылазят от релиза к релизу в разных местах. Исправлять их в чужом коде - то еще удовольствие.

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