繁体   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