Вырезать части видео с помощью gstreamer/Python (gnonlin?)
У меня есть видеофайл, и я хотел бы вырезать некоторые сцены (идентифицированные по временной позиции или по кадру). Насколько я понимаю, это должно быть возможно с gnonlin, но до сих пор я не смог найти пример того, как это сделать (в идеале с использованием Python). Я не хочу изменять видео / аудио части, если это возможно (но конвертация в mp4/webm будет приемлемой).
Правильно ли я понимаю, что gnonlin - это правильный компонент во вселенной gstreamer для этого? Также я был бы рад за несколько указателей / рецептов, как подходить к проблеме (gstreamer newbie).
1 ответ
На самом деле оказывается, что "gnonlin" слишком низкоуровневый и все еще требует большого знания gstreamer. К счастью, есть "gstreamer- edit -services" ( gst-edit-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.