cortar partes de um vídeo usando o gstreamer / Python (gnonlin?)

Eu tenho um arquivo de vídeo e gostaria de cortar algumas cenas (identificadas por uma posição de tempo ou um quadro). Tanto quanto eu entendo que deve ser possível com gnonlin mas até agora eu não consegui encontrar uma amostra como a isso (idealmente usando Python). Eu não quero modificar as partes de vídeo / áudio, se possível (mas a conversão para mp4 / webm seria aceitável).

Estou correto que o gnonlin é o componente certo no universo gstreamer para fazer isso? Também ficaria feliz por alguns pointers / receitas como abordar o problema (newbie gstreamer).

Na verdade, acontece que “gnonlin” é muito baixo e ainda requer muito conhecimento sobre streamer. Felizmente, há “gstreamer-editing-services” ( gst-edição-services ), que é uma biblioteca que oferece uma API de alto nível sobre gstreamer e gnonlin.

Com um pouco de leitura de RTFM e uma útil postagem no blog com um exemplo do Python, consegui resolver o meu problema básico:

  1. Carregue o ativo (vídeo)
  2. Crie uma linha do tempo com uma única camada
  3. adicione o recurso várias vezes à camada, ajustando o início, o ponto de início e a duração, para que apenas as partes relevantes de um vídeo estejam presentes no vídeo de saída

A maior parte do meu código é tirada diretamente da postagem do blog acima, então não quero descartar tudo isso aqui. O material relevante é este:

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() 

O vídeo resultante inclui os segmentos 10: 00-10: 05 e 11: 05-11: 25 então, essencialmente, há dois cortes: um no começo e outro no meio.

Do que eu vi isso funcionou perfeitamente bem, áudio e vídeo em sincronia, não se preocupa com frameworks-chave e outros enfeites. A única parte que resta é descobrir se posso traduzir o “número do quadro” em uma referência de tempo para serviços de edição gst.

Intereting Posts