На самом деле получается, что "gnonlin" is too low-level и по-прежнему требует много знаний gstreamer. К счастью, есть «gstreamer-editing-services» (gst-editing-services), который представляет собой библиотеку , предлагающую API более высокого уровня поверх gstreamer и gnonlin.
С чуть-чуть RTFM reading и helpful blog post with a Python example я был в состоянии решить мою основную проблему:
- Загрузить актив (видео)
- Создать временную шкалу с одним слоем
- добавить актив несколько раз для слоя, настройка начала, точки и продолжительности, поэтому в выходном видео присутствуют только соответствующие части видеосигнала
Основная часть моего кода: ectly, взятый из упомянутого сообщения в блоге выше, поэтому я не хочу сбрасывать все это здесь. Соответствующий материал следующим образом:
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.