На самом деле получается, что "gnonlin" слишком низкоуровневый и все равно требует больших знаний gstreamer . К счастью, есть «gstreamer-editing-services» (gst-editing-services). ), который представляет собой библиотеку, предлагающую API более высокого уровня поверх gstreamer и gnonlin.
Немного почитав RTFM и полезную запись в блоге с примером Python Я смог решить свою основную проблему:
- Загрузите актив (видео)
- Создайте временную шкалу с одним слоем
- добавьте ресурс несколько раз в слой, регулируя начало, точку и продолжительность, чтобы в выходном видео присутствовали только соответствующие части видео.
Большая часть моего кода взята непосредственно из упомянутого выше сообщения в блоге, поэтому я не хочу выгружать все это здесь. Соответствующие вещи таковы:
asset = GES.UriClipAsset.request_sync(source_uri)
timeline = GES.Timeline.new_audio_video()
layer = timeline.append_layer()
start_on_timeline = 0
start_position_asset = 10 * 60 * Gst.SECOND
duration = 5 * Gst.SECOND
# GES.TrackType.UNKNOWN => add every kind of stream to the timeline
clip = layer.add_asset(asset, start_on_timeline, start_position_asset,
duration, GES.TrackType.UNKNOWN)
start_on_timeline = duration
start_position_asset = start_position_asset + 60 * Gst.SECOND
duration = 20 * Gst.SECOND
clip2 = layer.add_asset(asset, start_on_timeline, start_position_asset,
duration, GES.TrackType.UNKNOWN)
timeline.commit()
Полученное видео включает в себя сегменты 10:00–10:05 и 11:05–11:25, поэтому, по сути, есть два разреза: один в начале и один в середине.
Из того, что я видел, это работало отлично, аудио и видео синхронизировались, не беспокоясь о ключевых кадрах и многом другом. Осталось только выяснить, могу ли я перевести «номер кадра» в временную привязку для сервисов редактирования gst.
person
Felix Schwarz
schedule
02.02.2014