private final void loadVideoFromFile() {
		final GUI self = this;

		// Create the image selector
		JFileChooser fc = new JFileChooser(this.videoLastSearchDir);
		fc.setAcceptAllFileFilterUsed(false);
		if (this.videoExtensions != null) {
			fc.addChoosableFileFilter(new FileFilter(){
				@Override
				public final boolean accept(File file) {
					if (file.isDirectory()) return true;

					int i = file.getName().lastIndexOf('.');
					String ext = (i > 0 ? file.getName().substring(i).toLowerCase() : "");

					for (i = 0; i < self.videoExtensions.length; ++i) {
						if (ext.equals(self.videoExtensions[i])) return true;
					}
					return false;
				}

				@Override
				public final String getDescription() {
					return "Video files";
				}
			});
		}
		else {
			fc.addChoosableFileFilter(new FileFilter(){
				@Override
				public final boolean accept(File file) {
					return true;
				}

				@Override
				public final String getDescription() {
					return "Video files";
				}
			});
		}
		int ret = fc.showOpenDialog(this.getRootPane());

		if (ret == JFileChooser.APPROVE_OPTION) {
			// File chosen
			File f = fc.getSelectedFile();
			this.videoLastSearchDir = f.getParentFile();
			if (this.videoLastSearchDir == null) this.videoLastSearchDir = new File("");

			// Load the file data
			this.videncode.setVideoFileSource(f, true, new Runnable() {
				@Override
				public void run() {
					File file = self.videncode.getVideoFileSource();
					self.videncode.setImageFileSource(file, false);
					self.videncode.setAudioFileSource(file, false);
				}
			});
		}
	}