Страницы

Поиск по вопросам

Показаны сообщения с ярлыком video. Показать все сообщения
Показаны сообщения с ярлыком video. Показать все сообщения

четверг, 19 марта 2020 г.

Захват видео с веб-камеры пользователя

#php #video #потоки_данных


В общем стоит такая задача, необходимо сделать захват видео с веб-камеры пользователя,
и записывать его на сервер, при этом во время записи, есть возможность прямого вещания...
Либо подскажите в какую сторону копать, либо платные скрипты я не знаю)
Заранее благодарю, и да, все это дело необходимо в итоге связать в веб-обвязку.    


Ответы

Ответ 1



Сложное решение, скажу я вам честно. Раньше реализовывал с помощью видео-серверов. На опыте это - Wowza Media Server, но дорогая, сцука. И обязательно флеш на стороне клиента. Но, конечно, можно сделать и приопретарное ПО, как это сделали мне. Еще как вариант: сейчас есть такая новинка, правда не во всех браузерах - возможность брать изображение с вебки javascript'ом. Суть заключается в том, что мы получаем картинку, каким-то образом кодируем её и отправляем туда, куда нам нужно.

Ответ 2



getUserMedia(js) + websockets. Из канваса берём base64 кадра и кидаем на сервак. Но это уж вообще извращение. Пример работы с getUserMedia

Ответ 3



haxevideo + crtmp + довести самому

воскресенье, 1 марта 2020 г.

Как отключить контекстное меню у тега HTML5 video?

#javascript #html5 #video


У меня реализован live стрим видео webm с использованием MediaSourceExtensions API
на стороне JavaScript. Тег video создаётся без контролов, но по клику правой кнопкой
мыши по области видео можно показать контролы, промотать видео, развернуть на весь экран...

Мне этого не надо - пользователю веб-приложения должны быть доступны только те функции,
которые я запрограммирую, и не более. Как отключить это контекстное меню тега video?

Если это невозможно, может помимо video можно ещё как-нибудь рендерить контент MSE?
Может на canvas?...
    


Ответы

Ответ 1



Первый вариант Используем JavaScript document.getElementById("id1").oncontextmenu = function (e) { return false; };
без меню

c меню
Данный пример сделан с изображением но для видео он тоже сработает, так как отключает контекстное меню на любом элементе. Второй вариант Поверх видео положить прозрачную картинку. Третий вариант Чистый HTML (почти)

Субтитры JavaFX

#java #javafx #video


Делаю проект по javaFX. Подскажите, пожалуйста, как сделать привязку субтитров ко
времени на видео?
    


Ответы

Ответ 1



Как вариант использовать маркеры: @Override public void start(Stage primaryStage) { final Label markerText = new Label(); StackPane.setAlignment(markerText, Pos.TOP_CENTER); String workingDir = System.getProperty("user.dir"); final File f = new File(workingDir, "../media/omgrobots.flv"); final Media m = new Media(f.toURI().toString()); final ObservableMap markers = m.getMarkers(); markers.put("Robot Finds Wall", Duration.millis(3100)); markers.put("Then Finds the Green Line", Duration.millis(5600)); markers.put("Robot Grabs Sled", Duration.millis(8000)); markers.put("And Heads for Home", Duration.millis(11500)); final MediaPlayer mp = new MediaPlayer(m); mp.setOnMarker(new EventHandler() { @Override public void handle(final MediaMarkerEvent event) { Platform.runLater(new Runnable() { @Override public void run() { markerText.setText(event.getMarker().getKey()); } }); } }); final MediaView mv = new MediaView(mp); final StackPane root = new StackPane(); root.getChildren().addAll(mv, markerText); root.setOnMouseClicked(new EventHandler() { @Override public void handle(MouseEvent event) { mp.seek(Duration.ZERO); markerText.setText(""); } }); final Scene scene = new Scene(root, 960, 540); final URL stylesheet = getClass().getResource("media.css"); scene.getStylesheets().add(stylesheet.toString()); primaryStage.setScene(scene); primaryStage.setTitle("Video Player 2"); primaryStage.show(); mp.play(); }

пятница, 24 января 2020 г.

Как добавить видео в приложение

#android #video


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

Думал добавить видео в проект, но так приложение будет много весить и возможно лаги,
думал через Gif. Вообщем подскажите как правильно добавить видео ролик в игру?

Может есть какой то другой способ, может вообще не видео, а как-то через анимацию,
вообщем прошу ваших советов кто уже сталкивался с такой ситуацией.

Добавить видео хочу в виде комиксов как делает марвел.
    


Ответы

Ответ 1



Варианты: Вшить видео в приложение. Плюсы - быстро, дёшево, надёжно. Минус - увеличение размера APK файла. Заменить видео полностью программной анимацией. Плюсы - занимает минимум места. Минусы - долго, дорого, сложно, засим возможны баги анимации. Вшить в приложение ссылку на видео. Плюсы - быстро, дёшево. Минус - без интернета работать не будет. Других вариантов нет. В вашем случае советую вшить видео в приложение. Юзеры привыкли к тяжёлым играм.

четверг, 23 января 2020 г.

Проигрывание видео в элементе video со встроенного http-сервера на айоси

#video #ios #html5


Есть приложение на obj-c, в которое встроен http-сервер (использовался вот из этого
примера, вроде почти без изменений,"вроде" т.к. весь проект мне в наследство достался),
к которому идут запросы из UIWebView, в отображающемся html имеется тег video который
не работает. Вопрос - какими свойствами должен обладать сервер чтобы видео проигрывалось.
Видео передается корректно, у него определены Content-type, content-length, Content-Range,
то что это действительно так проверялось как с помощью загрузки видео NSURLConnection
(заодно сохранил полученые данные в другое место и проверил что мд5 совпали), так и
прямо в js с помощью XMLHttpRequest в том же месте где динамически добавлялся этот
тег, в том же файле есть аудио и оно работает. Если страничку грузить из интернета
то все хорошо, а вот с внутреннего сервера не хочет    


Ответы

Ответ 1



Сам отвечу на свой вопрос, приведенный сервер не умеет показывать видео, но помогает вот этот сервер, только есть одна особенность - по какой-то причине в iOs 7 видео не будет проигрываться для localhost, надо использовать 127.0.0.1 На всякий случай уточню, что потомка NSURLConnection тоже пробовал, с ним не работает по крайней мере в 6 и - это известный баг.

Почему не работают субтитры html элемента track в браузере Chrome

#html #html5 #video


Не могу понять, почему не работают субтитры элемента  в Chrome? Хотя в Mozilla работают



    


Ответы

Ответ 1



Попробуйте оформить согласно представляемым примерам использования track

среда, 22 января 2020 г.

Как конвертировать видео с avi в mkv формат

#python #python_3x #opencv #video #ffmpeg


Я занимаюсь обработкой видео и столкнулся с проблемой конвертации формата avi в mkv.
Для решения этой проблемы использовал библиотеку opencv, но не один кодек не смог записать
видео в mkv формате.

fourcc = cv2.VideoWriter_fourcc(*'DIB ')
out = cv2.VideoWriter('output.mkv', fourcc, 20.0, (frames[0].shape[1], frames[0].shape[0]))

for frame in frames:
    out.write(frame)
out.release()


Один из вариантов записи в mkv

После этого я нашел библиотеку ffmpy она может конвертировать из любого формата в
любой. Я решил, что результат своей обработки я буду сохранять в avi формат, а потом
конвертировать в mkv при помощи такого кода

def convertVideo():
    ff = ffmpy.FFmpeg(
        inputs={'output.avi': None},
        outputs={'output.mkv': None}
    )
    ff.run()


Данный фрагмент действительно конвертирует avi в mkv, но если avi файл создан при
помощи opencv, то конвертация не проходит. 
Как записать файл в mkv формат на виндоус при помощи opencv и python?
Как при помощи ffmpy конвертировать файл полученный opencv в формате avi в формат mkv?
    


Ответы

Ответ 1



Решение было очень просто нужно было использовать кодек MJPG типа. fourcc = cv2.VideoWriter_fourcc(*'MJPG') out = cv2.VideoWriter('output.mkv', fourcc, 20.0, (frames[0].shape[1], frames[0].shape[0])) for frame in frames: out.write(frame) out.release() Данный код позволяет записывать файлы в mkv формате.

Нужен видео компрессор, совместимый с DirectShow.

#c_sharp #directshow #video #visual_studio


Сам я разрабатываю приложение, в котором доступна запись с web-камеры. 
(Visual Studio 2008, C#)
Требуемый размер сжатия: примерно 10 сек = 1 мб.
Из тех компрессоров, что нашел я, подходит только один из DivX Codec pack, но он,
судя по всему, платный + ставится только в комплекте с кучей всякого ненужного лично
мне мусора через DivXInstaller.exe. Хотя в DivX Control Panel напротив кодеков написано:
trial 15 days left. И эти 15 days у меня висят уже недели две… 
Еще есть неплохой вариант: VP40® Compressor. Степень сжатия, где-то 1 секунда – 1
мб. С ним есть непонятные проблемы на Windows XP, что именно там переклинило, я не
знаю, но видео не записывается. Буду разбираться. Сам я тестирую на Windows 7.
Те вопросы, который есть у меня сейчас:

Есть ли нормальный установщик для
    DivX, который установит только
    кодеки для видео, а не будет тащить
    200 мб из сети?

Какие есть другие хорошие видео
    компрессоры, совместимые с
    DirectShow? Те, что есть по
    умолчанию (всякие Microsoft Video 1,
    DV Video Encoder, и.т.п ) обладают
    либо совершенно смешной степенью
    сжатия, либо очень плохим качеством
    записанного видео.


Ну и да, компрессор должен быть бесплатным.

    


Ответы

Ответ 1



Ну что ж, подведем некоторые итоги. По результатам тестов, был выбран VP40® Compressor для Windows 7 и Windows Vista. На Win XP, как оказалось, этот компрессор не работает, лол )). Для Windows XP пришлось выбрать компромиссный вариант: Microsoft Video 1. Качество записанного видео конечно у него ахавое. Ответы со StackOverflow не помогли )). Всем спасибо.

Ответ 2



Кодек, который дает сносное качество, при этом бесплатный, работающий стабильно и, более того, даже имеется в наличии во всех версиях Windows - это Windows Media Video 9. Так как он доступен в виде DMO, то его можно также использовать и в DirectShow. Можно писать в WMV/ASF файлы, можно в AVI. Популярные из сторонних - h264vfw (по бесплатности есть вопросы), theora. Что касается DivX, то вроде как Xvid был доступен в аскетичном формате без мусора, хотя он (MPEG-4 Part 2) уже по большей части - история и уж относительно него так Windows Media Video будет уж попредпочтительней. Еще один вариант, заслуживающий упоминания, это Motion JPEG кодек. Видео в этом формате, конечно, не сравнится по качеству сжатия с кодеками, условно скажем, высшей лиги, однако какая никакая совместимость между устройствами и программами имеется, формат этот очень прост в использовании, стандартная реализация - убогая, но есть. Отличием данного формата будет то, что каждый кадр сжимается независимо и, соответственно, нет артефактов между кадрами, специфичных для [temporal compression] форматов.

суббота, 11 января 2020 г.

Как сжать видео под размер экрана.

#java #android #video #glsurfaceview



Красным это видео. Черным это размер экрана телефона. Я использую SurfaceView.

Как мне подогнать видео под размер экрана. орентировываясь по ширине Экрана телефона.
Сохраняю пропорции. 

В ImageView все просто. Добавил картинку и она сама с сохранением пропорций отображается.
    


Ответы

Ответ 1



Если вы хотите использовать именно SurfaceView, то стоит сделать так: Например у нас есть такая разметка: Подключаем необходимые нам элементы: surfaceViewFrame = (SurfaceView) findViewById(R.id.surfaceViewFrame); player = new MediaPlayer(); player.setDisplay(holder); А теперь немного расчетов добавим в ваш MediaPlayer в onPreparedListener и пересчитаем высоту и ширину видео фрагмента в соответствии с текущими размерами экрана, избежав растягивания. player.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared (MediaPlayer mp){ int videoWidth = player.getVideoWidth(); int videoHeight = player.getVideoHeight(); float videoProportion = (float) videoWidth / (float) videoHeight; int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); int screenHeight = getWindowManager().getDefaultDisplay().getHeight(); float screenProportion = (float) screenWidth / (float) screenHeight; android.view.ViewGroup.LayoutParams lp = surfaceViewFrame.getLayoutParams(); if (videoProportion > screenProportion) { lp.width = screenWidth; lp.height = (int) ((float) screenWidth / videoProportion); } else { lp.width = (int) (videoProportion * (float) screenHeight); lp.height = screenHeight; } surfaceViewFrame.setLayoutParams(lp); if (!player.isPlaying()) { player.start(); } } });

Ответ 2



Для видео лучше брать специальную вюху. Посмотрите сюда VideoView

пятница, 10 января 2020 г.

Получение длительности видео, Android

#java #android #video


Есть mp4 файл, как я могу получить длительность видеозаписи? 
    


Ответы

Ответ 1



Получить длительность видео можно как: MediaPlayer mp = MediaPlayer.create(this, Uri.parse(uriOfFile)); int duration = mp.getDuration(); Источник.

четверг, 2 января 2020 г.

Онлайн-трансляции через веб-камеру в реальном времени

#flashvideo #php #video #веб_программирование


Ребята, подскажите решение по онлайн трансляции через веб-камеру в реальном времени
(с php). Можно ли обойтись без "видео хостинга"? За хороший совет уважуху обеспечу.    


Ответы

Ответ 1



снимаем изображение с камеры и ложим в место доступное из вне. А из вэба запрашиваем эту картинку. в html постоянно обновляем эту картинку через javascript. вот и всё.

Ответ 2



Не вникал подробно в эту проблему, но статьи попадались. Не уверен, что это именно то, что надо, но может и пригодится. 1) Плагин для использования веб-камеры, 2) Фотоавтомат на PHP, jQuery и CSS3

Ответ 3



Я реализовывал данный функционал следующим образом: Итак, нам понадобится: Flash Media Live Encoder Adobe Flash Media Server Идея работы следующая: Flash Media Live Encoder забирает сигнал с камеры и передает его в Adobe Flash Media Server, который транслирует видео по rtmp протоколу, которое мы потом забираем любым флеш проигрывателем. После установки софта вы сами все поймете. Интерфейс интуитивно понятный. В Flash Media Live Encoder слева input, справа output, выбираем битрейт, connect, run. Находим на просторах интернета флеш проигрыватель, указываем rtmp ссылку вида rtmp:///live/livestream , и наслаждемся потоковым видео :) В самом Flash Media Server гдето есть исходник плеера. Смотрите в папке samples.

понедельник, 16 декабря 2019 г.

Вырезать кадры из видео

#cpp #c #video #opencv #ffmpeg


На вход подается видео с большим содержанием белых кадров. Их надо вырезать.

Кадров белых может быть 5-90% всего видео. Поэтому ручками их вырезать не вариант.
У меня opencv составляет txt-документ с номерами кадров, можно указывать время кадра,
или хранить данные в массиве.

Думал, с помощью ffmpeg их вырезать, но столкнулся с проблемой, что вырезать с помощью
txt он не может. Или я не нашел такой вариант.

Как решить данную проблему?

Может быть, другой проигрыватель использовать, или сам opencv умеет так делать?
    


Ответы

Ответ 1



OpenCV умеет работать с FFmpeg: использует его муксер и кодеки. Либо, использовать самому libavformat, libavcodec и иже с ними (либы FFmpeg), декодировать кадр, отдавать OpenCV, детектировать, что он "белый" пропускать его в итоговом кодеке/муксере. Естественно, нужно корректировать PTS/DTS. Как использовать FFmpeg для декодирования/кодирования, муксинга/демуксинга можно в его документации, примерах. Для приведения к нужному формуту пикселя использовать swscale()

воскресенье, 8 декабря 2019 г.

Не работает html5 видео в мобильниках

#html #html5 #video


Вставил фоном html5 видео (видео расположено локально): 

HTML


    
Css header{ /*background-image: url("../img/slide1.png");*/ background-size: cover; background-position: center center; background-attachment: fixed; height: 100vh; min-height: 100px; } video{ position: fixed; top: 50%; left: 50%; min-width: 100%; min-height: 100%; max-width: 100%; width: auto; /*height: auto;*/ z-index: -100; -webkit-transform: translateX(-50%) translateY(-50%); transform: translateX(-50%) translateY(-50%); background: url(polina.jpg) no-repeat; background-size: cover; } .video{ position: absolute; min-width: 100%; min-height: 100%; width: auto; height: auto; z-index: -99; /*background: #000;*/ background:url(../images/overlay.png) repeat; opacity: 0.8; } И тут возникла проблема - видео совсем не отражается на мобильных устройствах - просто черный экран, ни на гугл хром (андройд), ни на iphone. Что я сделал не так? UPDATE я уже урезал код вот так: и все равно не работает UPDATE2 Если вставляю так, то включается плеер и при нажатии на play видео начинает проигрывается, но мне бы видос как фон поставить с loop и autoplay


Ответы

Ответ 1



Html должен быть валидным.
В html коде страницы первый тег обязательно должен быть . А также в head надо указывать, например,

Ответ 2



Функция автовоспроизведения видео специально отключена на мобильных устройствах. Вот, например, что по этому поводу пишет Apple: In Safari on iOS (for all devices, including iPad), where the user may be on a cellular network and be charged per data unit, preload and autoplay are disabled. No data is loaded until the user initiates it. Аналогично в Android 4.1+ тоже отключен автоплей. Одним, словом, производители смартфонов озаботились о том, чтобы пользователи не тратили слишком много мобильного интернета.

Ответ 3



У меня такая же проблема получилась, только у меня видео не фоном, а просто располагаются на странице... решил добавлением controls. При этом на страницах с ПК видео проигрываются автоматически, а на мобильных устройствах их нужно включать вручную. Оказывается мобильные устройства плохо относятся к autoplay видео. Мои видео - это бывшие флеш-ролики без звука, поэтому добавлен параметр muted. Все параметры, кроме preload могут быть без передаваемых параметров, это корректно. Ставил опыты, действительно, от валидности сконвертированного видео многое зависит (невадиное не проигрывается).

Ответ 4



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

Ответ 5



Добавьте это в свой код и видео будет работать на телефоне. video autoplay loop muted playsinline webkit-playinginline

вторник, 16 июля 2019 г.

Проигрывание видео в элементе video со встроенного http-сервера на айоси

Есть приложение на obj-c, в которое встроен http-сервер (использовался вот из этого примера, вроде почти без изменений,"вроде" т.к. весь проект мне в наследство достался), к которому идут запросы из UIWebView, в отображающемся html имеется тег video который не работает. Вопрос - какими свойствами должен обладать сервер чтобы видео проигрывалось. Видео передается корректно, у него определены Content-type, content-length, Content-Range, то что это действительно так проверялось как с помощью загрузки видео NSURLConnection (заодно сохранил полученые данные в другое место и проверил что мд5 совпали), так и прямо в js с помощью XMLHttpRequest в том же месте где динамически добавлялся этот тег, в том же файле есть аудио и оно работает. Если страничку грузить из интернета то все хорошо, а вот с внутреннего сервера не хочет


Ответ

Сам отвечу на свой вопрос, приведенный сервер не умеет показывать видео, но помогает вот этот сервер, только есть одна особенность - по какой-то причине в iOs 7 видео не будет проигрываться для localhost, надо использовать 127.0.0.1
На всякий случай уточню, что потомка NSURLConnection тоже пробовал, с ним не работает по крайней мере в 6 и - это известный баг.

Масштабируемость видео

Как обстоят дела с поддержкой html5 video разными браузерами? Сушествует ли до сих под эта проблема. Не могу найти современной информации.
Задача: Что бы при изменении размеров окна браузера, динамически уменьшалось окно видео. Сейчас я использую mediaelementplayer js. Процентные величины он не принимает. Точнее он принимает их при создании элемента, а после он не меняет величины. Пытался вставить костыль, что бы менять размеры отталкиваясь от $(window).resize(); но не всё так просто. Если и внести туда изменения ширины то в элементе embed видео становиться обрубленным, т.е. ширина элемента меняется а картинка в нём нет.
Есть ли варианты как обойти embed? или другие варианты использования плагинов ил тому подобное.
Буду рад любой информации. Заранее спасибо.


Ответ

Всё хорошо. Для всех подобных объектов для растягивания и сжатия можно прописать размеры в css.

понедельник, 15 июля 2019 г.

Тег Video отключение предыдущего плеера если запускается новый

На html странице существует обычные стандартные плееры html5 но проблема в том что если к примеру запущен 1 плеер т.е воспроизводится видео и при клике на плеер другой оно тоже начинает воспроизводится ! Как реализовать что бы при клике на другой плеер останавливался тот что играет ?


Ответ

Для этого нужно использовать JavaScript, который вначале остановит ненужные плееры (например, все плееры на странице), а потом запустит текущий.
Тут есть две стороны вопроса - как это сделать правильно, и буквально как вы попросили в вопросе ("при щелчке на плеер").
Если у вас включено отображение controls, правильно делается это с помощью media events. Вот пример кода на JavaScript с использованием библиотеки jQuery:
$(function() { $("video")[0].onplay = function () { var that = this; $('video').each(function () { if (this !== that) { this.pause(); } }); }; })
Пример работы можно посмотреть вот в этом фидле на JSFiddle
Если же у вас нет никакой другой возможности, кроме как отслеживать клики мышки, нужно ловить событие onclick:
$(function() { //При щелчке на любой элемент video $('video').on('click', function () {
//Останавливаем все другие video $('video').each(function () { this.pause(); });
//И запускаем только текущий this.play(); }); })
Пример работы можно посомотреть вот в этом фидле на JSFiddle
В зависимости от механики вашего веб-интерфейса, реализация может различаться, но идея останется прежней.
В некоторых случаях (проблемы с тэгом video со включенными controls), возможно, стоит отслеживать не click, а включать проигрывание на событие mouseover:
$(function() { $('video').on('mouseover', function () { $('video').each(function () { this.pause(); }); this.play(); }); })

четверг, 6 июня 2019 г.

Захват видео с веб-камеры пользователя

В общем стоит такая задача, необходимо сделать захват видео с веб-камеры пользователя, и записывать его на сервер, при этом во время записи, есть возможность прямого вещания... Либо подскажите в какую сторону копать, либо платные скрипты я не знаю) Заранее благодарю, и да, все это дело необходимо в итоге связать в веб-обвязку.


Ответ

Сложное решение, скажу я вам честно. Раньше реализовывал с помощью видео-серверов. На опыте это - Wowza Media Server, но дорогая, сцука. И обязательно флеш на стороне клиента. Но, конечно, можно сделать и приопретарное ПО, как это сделали мне. Еще как вариант: сейчас есть такая новинка, правда не во всех браузерах - возможность брать изображение с вебки javascript'ом. Суть заключается в том, что мы получаем картинку, каким-то образом кодируем её и отправляем туда, куда нам нужно.

пятница, 17 мая 2019 г.

Как отключить контекстное меню у тега HTML5 video?

У меня реализован live стрим видео webm с использованием MediaSourceExtensions API на стороне JavaScript. Тег video создаётся без контролов, но по клику правой кнопкой мыши по области видео можно показать контролы, промотать видео, развернуть на весь экран...
Мне этого не надо - пользователю веб-приложения должны быть доступны только те функции, которые я запрограммирую, и не более. Как отключить это контекстное меню тега video?
Если это невозможно, может помимо video можно ещё как-нибудь рендерить контент MSE? Может на canvas?...


Ответ

Первый вариант
Используем JavaScript
document.getElementById("id1").oncontextmenu = function (e) { return false; };

без меню

c меню

Данный пример сделан с изображением но для видео он тоже сработает, так как отключает контекстное меню на любом элементе.
Второй вариант
Поверх видео положить прозрачную картинку.
Третий вариант
Чистый HTML (почти)

вторник, 12 марта 2019 г.

Как конвертировать видео с avi в mkv формат

Я занимаюсь обработкой видео и столкнулся с проблемой конвертации формата avi в mkv. Для решения этой проблемы использовал библиотеку opencv, но не один кодек не смог записать видео в mkv формате.
fourcc = cv2.VideoWriter_fourcc(*'DIB ') out = cv2.VideoWriter('output.mkv', fourcc, 20.0, (frames[0].shape[1], frames[0].shape[0]))
for frame in frames: out.write(frame) out.release()
Один из вариантов записи в mkv
После этого я нашел библиотеку ffmpy она может конвертировать из любого формата в любой. Я решил, что результат своей обработки я буду сохранять в avi формат, а потом конвертировать в mkv при помощи такого кода
def convertVideo(): ff = ffmpy.FFmpeg( inputs={'output.avi': None}, outputs={'output.mkv': None} ) ff.run()
Данный фрагмент действительно конвертирует avi в mkv, но если avi файл создан при помощи opencv, то конвертация не проходит. Как записать файл в mkv формат на виндоус при помощи opencv и python? Как при помощи ffmpy конвертировать файл полученный opencv в формате avi в формат mkv?


Ответ

Решение было очень просто нужно было использовать кодек MJPG типа.
fourcc = cv2.VideoWriter_fourcc(*'MJPG') out = cv2.VideoWriter('output.mkv', fourcc, 20.0, (frames[0].shape[1], frames[0].shape[0]))
for frame in frames: out.write(frame) out.release()
Данный код позволяет записывать файлы в mkv формате.

суббота, 9 марта 2019 г.

Нужен видео компрессор, совместимый с DirectShow.

Сам я разрабатываю приложение, в котором доступна запись с web-камеры. (Visual Studio 2008, C#) Требуемый размер сжатия: примерно 10 сек = 1 мб. Из тех компрессоров, что нашел я, подходит только один из DivX Codec pack, но он, судя по всему, платный + ставится только в комплекте с кучей всякого ненужного лично мне мусора через DivXInstaller.exe. Хотя в DivX Control Panel напротив кодеков написано: trial 15 days left. И эти 15 days у меня висят уже недели две… Еще есть неплохой вариант: VP40® Compressor. Степень сжатия, где-то 1 секунда – 1 мб. С ним есть непонятные проблемы на Windows XP, что именно там переклинило, я не знаю, но видео не записывается. Буду разбираться. Сам я тестирую на Windows 7. Те вопросы, который есть у меня сейчас: Есть ли нормальный установщик для DivX, который установит только кодеки для видео, а не будет тащить 200 мб из сети? Какие есть другие хорошие видео компрессоры, совместимые с DirectShow? Те, что есть по умолчанию (всякие Microsoft Video 1, DV Video Encoder, и.т.п ) обладают либо совершенно смешной степенью сжатия, либо очень плохим качеством записанного видео. Ну и да, компрессор должен быть бесплатным.


Ответ

Ну что ж, подведем некоторые итоги. По результатам тестов, был выбран VP40® Compressor для Windows 7 и Windows Vista. На Win XP, как оказалось, этот компрессор не работает, лол )). Для Windows XP пришлось выбрать компромиссный вариант: Microsoft Video 1. Качество записанного видео конечно у него ахавое. Ответы со StackOverflow не помогли )). Всем спасибо.