与vlcj的FrameRate问题

时间:2017-10-10 21:13:44

标签: java vlcj

我最近尝试使用我在stackoverflow中找到的示例代码之一的修改版本来记录我的屏幕但是你可以看到自己,保存文件的帧率非常糟糕。你能帮忙吗? 这是我使用的代码:

public class CaptureTest {

private final MediaPlayerFactory factory;
private final HeadlessMediaPlayer mediaPlayer;

public static void main(final String[] args) {
    boolean found = new NativeDiscovery().discover();
    System.out.println(found);
    System.out.println(LibVlc.INSTANCE.libvlc_get_version());
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new CaptureTest().start("screen://");
        }
    });
}

public CaptureTest() {
    factory = new MediaPlayerFactory();

    mediaPlayer = (HeadlessMediaPlayer) factory.newHeadlessMediaPlayer();
}

private void start(String mrl) {

    File dir = new File(System.getProperty("user.home"), "Videos");
    dir.mkdirs();


    String fileName =  "C:\\Users\\Reza Taheri\\Documents\\video7.mp4";

    String[] options = {
            ":sout=#transcode{vcodec=h264,venc=x264{cfr=16},acodec=mp4a,vfilter=canvas{width=854,height=480},samplerate=4096}:std{mux=mp4,access=file,dst=" + fileName + "}", ":input-slave=screen://",":screen-fps=24"
    };



    JPanel cp = new JPanel();
    JButton recordButton = new JButton("Record");
    cp.add(recordButton);
    JFrame frame = new JFrame("vlcj");
    frame.setContentPane(cp);
    frame.setLocation(10, 10);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
            mediaPlayer.stop();
            mediaPlayer.release();
        }
    });
    recordButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            frame.setState(JFrame.ICONIFIED);
            mediaPlayer.playMedia(mrl, options);
        }
    });
    frame.setVisible(true);


}

}

我正在使用带有最新版vlcj和vlc媒体播放器的Windows 10。

2 个答案:

答案 0 :(得分:0)

我承认我不知道这是可能的(用vlcj记录屏幕)但是我要说这个问题不是vlcj相关的,因为你把很多参数传递给了libvlc,而那些参数告诉了libvlc记录你的屏幕(如果我已正确理解代码)

我无法帮助那些但是阅读更多关于libvlc及其参数/选项。

答案 1 :(得分:0)

您当前的帧率是24,这很好。我想你想说保存的视频的视频质量很差。视频质量的主要因素是视频比特率。在转码选项中设置比特率并再次检查视频质量。

e.g。 vb = 1024或vb = 2000

此外,如果您想要与当前桌面分辨率匹配的视频分辨率,则可以在转码选项中设置scale = 1.0

您可以找到以{4}格式记录屏幕的vlcj java screen recorder example here。它使用无头媒体播放器,因此在后台以实用方式开始屏幕录制变得容易。我用它来记录我的硒测试执行情况。