2014-02-02 3 views
1

У меня есть видеофайл, и я бы хотел вырезать несколько сцен (либо обозначенных временной позицией, либо фреймом). Насколько я понимаю, это должно быть возможно с помощью gnonlin, но до сих пор мне не удалось найти пример того, как это сделать (в идеале с помощью Python). Я не хочу изменять видео/аудио-части, если это возможно (но конвертация в mp4/webm будет приемлемой).вырезать части видео с помощью gstreamer/Python (gnonlin?)

Я исправлю, что gnonlin - это правильный компонент в юниверсе gstreamer, чтобы это сделать? Также я был бы рад некоторым указателям/рецептам, как подойти к проблеме (новичок gstreamer).

ответ

1

На самом деле получается, что "gnonlin" is too low-level и по-прежнему требует много знаний gstreamer. К счастью, есть «gstreamer-editing-services» (gst-editing-services), который представляет собой библиотеку , предлагающую API более высокого уровня поверх gstreamer и gnonlin.

С чуть-чуть RTFM reading и helpful blog post with a Python example я был в состоянии решить мою основную проблему:

  1. Загрузить актив (видео)
  2. Создать временную шкалу с одним слоем
  3. добавить актив несколько раз для слоя, настройка начала, точки и продолжительности, поэтому в выходном видео присутствуют только соответствующие части видеосигнала

Основная часть моего кода: 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.

Смежные вопросы