我有一个视频文件,我想剪掉一些场景(由时间位置或帧识别)。据我所知,gnonlin应该是可能的,但到目前为止,我无法找到一个示例如何(理想情况下使用Python)。如果可能,我不想修改视频/音频部分(但可以接受转换为mp4 / webm)。
我是否认为gnonlin是gstreamer宇宙中正确的组成部分?此外,我很高兴能找到一些如何处理问题的指针/食谱(gstreamer newbie)。
答案 0 :(得分:1)
实际上事实证明"gnonlin" is too low-level并且仍然需要很多gstreamer知识。幸运的是,有一个“gstreamer-editing-services”(gst-editing-services) 库在gstreamer和gnonlin之上提供更高级别的API。
只需要RTFM reading和helpful blog post with a Python example,我就可以解决我的基本问题:
我的大多数代码都是直接从上面引用的博客文章中获取的,因此我不想在此处转储所有内容。相关的东西是:
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编辑服务的时间参考。