Я записываю видео с Pi с помощью Camera Module с picamera:
import picamera
with picamera.PiCamera() as camera:
camera.resolution = (640, 480)
camera.start_recording('1.h264')
camera.wait_recording(5)
for i in range(2, 11):
camera.split_recording('%d.h264' % i)
camera.wait_recording(5)
camera.stop_recording()
Я отдельно использовал комбинацию raspivid
и gstreamer
для потоковой передачи видео с пи без каких-либо задержек. Есть ли способ хранить и передавать видеоматериалы одновременно с использованием Python ?
Я думаю, что должен быть способ использовать камеру в качестве входного сигнала и создать два выходных источника: видео 720p для хранения и уменьшенное видео 240p для потоковой передачи с использованием gstreamer ...?
streaming-video
koogee
источник
источник
raspivid
вы можете сделатьtee
вывод в файл и gstreamer или что-то еще (см.man tee
). Пока один поток направляется прямо на диск, это не приведет к большим накладным расходам, но если вы хотите обрабатывать ввод в двух разных форматах одновременно, я думаю, что это будет слишком большой работой для пи.Ответы:
Команда
tee
читает из стандартного ввода и копирует в любое количество файлов плюс стандартный вывод по умолчанию, см.man tee
Подробности. Это означает, что вы можете попросить tee создать файл из ввода, а затем направить вывод во что-то еще.Добавление дополнительной трубы теоретически добавляет немного неэффективности. Что касается того, важно это или нет, вам придется судить самим, используя собственный метод потоковой передачи. Мой текущий метод не является удовлетворительным при полном разрешении. Сейчас это не очень интересно, но когда это произойдет, я постараюсь найти что-то лучше (например, предположительно, gstreamer работает лучше, чем clvc).
Однако стоит отметить, что файл, сохраненный локально на пи одновременно, имеет отличное качество, поэтому активность не мешает распивиду. Вот пример:
Я разбил это на две строки для удобства чтения; вы можете нажать return после
|
(pipe) и завершить команду так же, как вы можете разбить строку\
. Вы можете заменить наcvlc
то, что вы хотите. Опять же, хотя поток был низкого качества,test_video.h264
получилось идеально.Если я уменьшу разрешение до 640x360, то это нормально, с задержкой в секунду или две, что я обычно получаю. Я не думаю, что
tee
второй канал влияет на качество потока; они способны иметь гораздо более высокую пропускную способность, чем это необходимо, и не требуют большого количества системных ресурсов.Процессор работал на 35-45%, что соответствует скорости потоковой передачи видео
tee
.источник
record_sequence
который принимаетsplitter_port
параметр. Также есть пример записи до 4 одновременных выходов с камеры.Нет ничего плохого в ответе Златовласка выше, но вот еще один, который конкретно касается API-интерфейса Picamera. Вы можете использовать пользовательский вывод для выполнения такого разделения (так много способов, как вам нравится) и отправлять выходные данные в различные пункты назначения. В вашем случае, если вы хотите записать в файл и сокет, вы можете сделать что-то вроде этого:
источник