首页 > 解决方案 > 使用 VLCJ 进行缩放

问题描述

有没有办法像 VLC 一样用 VLCJ 放大视频有这个功能。我认为它被称为放大或交互式缩放。它位于工具>>效果和过滤器>>视频>>几何>>放大

我将 vlcj 与 javafx 9 一起使用,将帧渲染到带有EmbeddedMediaPlayer. 我也尝试将此放大过滤器添加到MediaPlayerFactory新的MediaPlayerFactory("--video-filter=magnify")但我不知道如何导航此功能或设置缩放级别,因为"-zoom 2.0"它不起作用。

我尝试裁剪,但这对我没有用,或者我尝试得很糟糕。

谢谢您的帮助!

标签: javafxzoomingvlcvlcj

解决方案


作为最低限度,这应该适用于缩放:

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),您实际上可以启用放大过滤器,因为它不使用硬件解码。但是,您将看到的是在顶部绘制了放大叠加层的视频,但它们不是交互式的,您的点击将不起作用。

所以简而言之,这真的没有令人满意的解决方案。

从理论上讲,您可以自己构建一些东西,但我怀疑这并不容易。


推荐阅读