首页 > 经验记录 > RenPy优雅播放视频、限制用户skip

RenPy优雅播放视频、限制用户skip

先说如何播放出一个视频出来,RenPy不支持MP4,还有H.264、H.265等常见视频编码

它支持的格式如下:

  • AV1
  • VP9
  • VP8
  • Theora
  • MPEG-4 part 2 (包括Xvid和DivX)
  • MPEG-2
  • MPEG-1

 

我们要播放,首先就要把你导出的视频,给转化成上面的某个。 这里推荐VP9,转成webm格式。

如何转?答案是用ffmpeg,估计非开发人员也不会看我这篇博客,所以我就不扯怎么安装了

总之我们为了保证视屏质量、同时保证视频的大小,这里用两道编码来处理原视频

ffmpeg -i ed.mp4 -c:v libvpx-vp9 -b:v 3M -threads 8 -speed 4 -pass 1 -an -f null NUL;

ffmpeg -i ed.mp4 -c:v libvpx-vp9 -b:v 3M -threads 8 -speed 1 -pass 2 -c:a libopus -b:a 160k ed.webm

上面的代码是将「ed.mp4」转换成「ed.webm」,码率选3m,整体效果不错,压缩率高,并且观看时不会觉得糊。

(注:原视频需要高码率,起码是一万以上)

 

 

然后就到了如何播放的问题,用原始命令播放自是可以

$ renpy.movie_cutscene(“On_Your_Mark.webm”)

 

但是在我看来还是不太能满足需求,尤其是当你遇到,需要去控制用户行为,不允许他跳过的时候。

比如说你播放一个特效、播放一个过场动画,这个时候是很容易被用户误触的。

 

根据我的实验、调试,我最终还是整理出来了一套生产可用的方法,那就是把他当成一个screen,强制渲染在最顶部,然后根据设置,锁住用户的所有UI、交互。

如下所示:

screen ed_player(vid_path):
    add Movie(play=vid_path, channel="movie", size=(1920, 1080), keep_last_frame=True)

    key "dismiss" action []       # 拦截左键点击/确认
    key "K_SPACE" action []       # 拦截空格
    key "skip" action []          # 拦截 Ctrl
    key "stop_skipping" action [] 
    key "toggle_skip" action []   # 拦截 Tab
    key "hide_windows" action []      # 拦截 H 键和关联的隐藏 UI 动作
    key "mousedown_3" action []       # 拦截鼠标右键按下
    key "mouseup_3" action []         # 拦截鼠标右键弹起
    key "game_menu" action []     # 拦截ESC和鼠标右键

 

使用:

# 禁用跳过功能
$ config.allow_skipping = False

show screen ed_player("movies/ed.webm")
$ renpy.pause(86.0)

hide screen ed_player
$ config.allow_skipping = True

 

 

这里有几个需要注意的点,首先就是 renpy.pause(86.0) 阻塞用户行为,这个阻塞的长度,是和你视频的长度一致的。视屏有多长,就阻塞用户多长时间。

然后,renpy的跳过,优先级非常的高,就算你锁住了所有的交互,用户一按skip键,他该跳还是会跳过。我用尽各种方法都没招。

所以我们只能在播放前,先手动把跳过功能给他从底层禁用了,然后在播放完毕后,解禁。

这样才能实现 不允许用户跳过 的功能。

 

 

环境:RenPy8.5

           


CAPTCHAis initialing...
EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00