Есть ли способ разделить видео на сегменты определенной длины? Т.е. 60 минут видео в 12х5 мин.разделение/сегментирование видеопотока с gstreamer
ответ
Afaik, вам нужно разработать собственный «сегмент». Это похоже на то, что вам нужно для создания потоковых файлов HTTP Live. Могут быть более простые решения, но вот что я сделал бы:
Вы можете сделать относительную небольшую программу (в python) с использованием multifilesink next-file = buffer (или маркер следующего файла, если сегменты не могут соответствовать в памяти).
Вам нужно будет закодировать или демонтировать поток ввода и снова включить поток. Разрежьте поток мультиплексирования на ключевой кадр, когда будет достигнута желаемая продолжительность, и нажмите агрегированный буфер (или отметьте фальшивый ключевой фрейм, например, чтобы заставить приемник создать новый файл). Повторно инициализируйте мультиплексор (или добавьте потоковый поток муксинга), чтобы получить файл с правильным заголовком, чем можно проигрывать отдельно (в зависимости от мультиплеера).
gnonlin
и gnlfilesource
сделаны для этого. Вам придется перекодировать видео как часть процесса, так как gstreamer не имеет специальной поддержки для разделения определенных форматов без перекодирования.
См. How do I use gstreamer to make an audio clip from a segment of a longer source? для примера того, как создавать клипы из аудиофайла.
Мне удалось выполнить что-то подобное с помощью Perl с привязками GStreamer и GLib. Мой взлом злоупотребляет состоянием GStreamer Pipeline, чтобы сбросить местоположение файла. Я использую источник потоковой передачи и, следовательно, режим сброса до нуля после того, как set_state («null») является приемлемым. Вам нужно будет управлять позицией поиска в исходном элементе, чтобы поддерживать правильную сегментацию.
my $g_pipeline = GStreamer::Pipeline->new('pipeline');
....
my $g_filesink = GStreamer::ElementFactory->make(filesink => "filesink");
$g_filesink->set(location => $file_name);
...
$g_pipeline->add(..., $g_filesink);
my $delay = 5000; # switch output file at this interval
my $timer = Glib::Timeout->add($delay,
sub {
$g_pipeline->set_state('null');
...
$g_filesink->set(location=> $next_file_name);
$g_pipeline->set_state('playing');
}
);
FFMPEG имеет встроенный сегментный демультиплексор.
проверить опцию -segment n документацию.
- 1. Как получить ширину/высоту видеопотока через gstreamer?
- 2. GStreamer. Как создать один конвейер для аудио-видеопотока и только видеопотока
- 3. Gstreamer: как получить три копии одного видеопотока в одном окне?
- 4. Есть ли какие-либо плагины gstreamer для расширения видеопотока?
- 5. Получение видеопотока с IP-камеры на android
- 6. Захват видеопотока с FFmpeg
- 7. снимать с видеопотока
- 8. Оптимизация видеопотока
- 9. Ошибка gstreamer на mac
- 10. Рисование видеопотока с использованием wxWidgets
- 11. синхронизация видеопотока с системным временем
- 12. Порты Gstreamer SDK Tutorials (gstreamer 0.1) to gstreamer 1.0
- 13. Использование Gstreamer с Kivy
- 14. Python3 ошибка с Gstreamer
- 15. Gstreamer с двумя Udpsinks
- 16. PyGObject с примерами GStreamer?
- 17. Python с конвейером Gstreamer
- 18. отображение gstreamer с opencv
- 19. Python OpenCV: Воспроизведение видеопотока UDP при отправке сообщений с сохранением
- 20. ffmpeg изменить разрешение видеопотока
- 21. Проигрыватель Flash-видеопотока
- 22. Wordpress для видеопотока?
- 23. Аудиопоток короче видеопотока
- 24. Воспроизведение видеопотока на Android
- 25. Directdraw: Поворот видеопотока
- 26. Обработка видеопотока веб-камеры
- 27. Воспроизведение видеопотока на iOS7
- 28. Avconv трансляция видеопотока
- 29. WideVine DRM Пример видеопотока
- 30. Какова структура видеопотока?
я бросил GStreamer и написал Сегментер с использованием библиотеки FFmpeg вместо этого. Пришлось написать уродливую программу на С; – Saideira