1

我有一个视频文件,我想剪掉一些场景(由时间位置或帧标识)。据我了解,使用 gnonlin 应该是可能的,但到目前为止,我无法找到一个示例(最好使用 Python)。如果可能,我不想修改视频/音频部分(但转换为 mp4/webm 是可以接受的)。

我是否正确地认为 gnonlin 是 gstreamer 宇宙中的正确组件?此外,我很高兴提供一些如何解决问题的指针/食谱(gstreamer 新手)。

4

1 回答 1

2

实际上,事实证明“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 编辑服务的时间参考。

于 2014-02-02T21:28:29.963 回答