簡體   English   中英

使用gstreamer / Python剪切視頻的一部分(gnonlin?)

[英]cut parts of a video using gstreamer/Python (gnonlin?)

我有一個視頻文件,我想剪切出一些場景(通過時間位置或幀來標識)。 據我了解,使用gnonlin應該可以實現,但是到目前為止,我還沒有找到一個示例(理想情況下使用Python)。 我不想盡可能修改視頻/音頻部分(但可以轉換為mp4 / webm)。

我是否正確認為gnonlin是gstreamer宇宙中執行此操作的正確組件? 我也很高興有一些指示/方法來解決這個問題(gstreamer新手)。

實際上,事實證明“ gnonlin”的級別太低 ,仍然需要大量gstreamer知識。 幸運的是,有一個“ gstreamer-editing-services”( gst-editing-services ),它是一個在gstreamer和gnonlin之上提供更高級別API的庫。

通過少量的RTFM閱讀和一個有用的Python示例博客文章,我就能解決我的基本問題:

  1. 加載資產(視頻)
  2. 創建具有單個圖層的時間軸
  3. 多次將資產添加到圖層,調整開始,入點和持續時間,以便僅視頻的相關部分出現在輸出視頻中

我的大部分代碼都是直接從上面引用的博客文章中獲取的,因此我不想將所有內容都轉儲到這里。 相關的東西是這樣的:

    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編輯服務的時序參考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM