javafx - 使用 VLCJ 进行缩放
问题描述
有没有办法像 VLC 一样用 VLCJ 放大视频有这个功能。我认为它被称为放大或交互式缩放。它位于工具>>效果和过滤器>>视频>>几何>>放大
我将 vlcj 与 javafx 9 一起使用,将帧渲染到带有EmbeddedMediaPlayer
. 我也尝试将此放大过滤器添加到MediaPlayerFactory
新的MediaPlayerFactory("--video-filter=magnify")
但我不知道如何导航此功能或设置缩放级别,因为"-zoom 2.0"
它不起作用。
我尝试裁剪,但这对我没有用,或者我尝试得很糟糕。
谢谢您的帮助!
解决方案
作为最低限度,这应该适用于缩放:
mediaPlayer.video().setScale(float factor);
其中因子是双倍的 2.0,一半的 0.5,依此类推。
根据我的经验,它可能有点小故障,您可能确实需要将它与裁剪结合使用 - 顺便说一句,裁剪确实有效。
但是如果你想要一个交互式缩放,那么你自己构建它调用 setCrop 和 setScale 取决于你控制的一些 UI 交互。
对于画中画类型的缩放,如果您使用 VLC 本身,您可以执行以下操作:
vlc --video-filter=magnify --avcodec-hw=none your-filename.mp4
它显示了一个小的叠加层,您可以在其中拖动一个矩形并更改缩放设置。
理论上,这可以通过将参数传递给 MediaPlayerFactory 来在您的 vlcj 应用程序中使用:
List<String> vlcArgs = new ArrayList<String>();
vlcArgs.add("--avcodec-hw=none");
vlcArgs.add("--video-filter=magnify");
MediaPlayerFactory factory = new MediaPlayerFactory(args);
问题是您似乎需要“--avcodec-hw=none”(禁用硬件解码)才能使放大过滤器工作 - 但在 LibVLC 应用程序中不支持(并且不起作用)该选项。
所以不幸的是,你不能让原生“放大”与 vlcj 应用程序一起工作。
最后一点 -如果您使用 LibVLC 的回调渲染 API(在 vlcj 中是 CallbackMediaPlayer),您实际上可以启用放大过滤器,因为它不使用硬件解码。但是,您将看到的是在顶部绘制了放大叠加层的视频,但它们不是交互式的,您的点击将不起作用。
所以简而言之,这真的没有令人满意的解决方案。
从理论上讲,您可以自己构建一些东西,但我怀疑这并不容易。
推荐阅读
- r - 如何使用 R 从 Web 图标下载 excel 文件
- javascript - 如何将迭代语句放入 useEffect 中?
- javascript - 检测是否存在 HTML5 验证错误消息
- mysql - MySQL 查询 - 获取关注用户的所有评论
- visual-studio-code - 如何在不更改设置的情况下在 Visual Studio Code 中搜索 node_modules?
- go - go 支持多类型吗?(泛型类型)
- reactjs - 这两个 if-else 块和条件运算符块有什么区别?
- java - 顺便说一句,私人课程与 set 和 get 以及公共课程的区别
- angular - How to update index in from array cons body{} Angular 8
- python - 图形未显示在 conda 下的 Jupyter 全新安装和使用 viewscad 上游示例