- PVSM.RU - https://www.pvsm.ru -

Закладки в Media Player Classic Home Cinema

MPC HC может сохранять в настройках (в реестре или в ini-файле) до 20 закладок на последнее место просмотра для видеофайлов и столько же для DVD. Для видеофайлов используются пары ключей File Name N / File Position N (c N от 0 до 19). Для DVD используется один ключ DVD Position N (в том же диапазоне; плеер умудряется сохранять в одной записи как идентификатор DVD, так и место последнего просмотра). В реестре данные хранятся в разделе HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings.

Однако бывают условия, когда 20 закладок не хватает. Кто-то любит смотреть много фильмов параллельно, иногда откладывая просмотр каких-то на время. Кто-то слушает на MPC HC музыку (а ключи для неё используются те же самые: один большой альбом — и все закладки перезаписаны). Кто-то использует плеер для многократной тестовой проверки кодируемого видео. Наконец, одной учётной записью могут пользоваться сразу несколько членов семьи (например, дети могут смотреть мультфильмы, пока родители заняты). В общем, хотелось бы иметь надёжный способ сохранить закладку на нужный фильм и потом её восстановить.

Мне приходят в голову три способа: от самого простого и наименее гибкого до более сложного и тонкого (решения тестировались только в Windows XP).

I. Экспорт/импорт настроек при помощи самого плеера

Закладки в Media Player Classic Home Cinema

Запускать экспорт приходится после закрытия плеера с фильмом, запустив MPC заново, потому что только перед закрытием обновляются данные о последних файлах в реестре. Создаётся .reg файл со всеми настройками (причём не только нужный нам раздел), и в этом ещё одно неудобство: при импорте настроек будет восстанавливаться не только нужная закладка, но и весь набор прежних настроек.

II. Экспорт/импорт при помощи пакетного файла

Поскольку стандартные средства работы с реестром не позволяют экспортировать отдельные записи реестра, нам опять придётся иметь дело с целым разделом, но теперь объём можно сузить до нужного HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings. Дополнительные преимущества также в том, что нам не нужно открывать плеер заново и не нужно вручную вводить имя закладки, всё будет делаться автоматически.

1. Пакетный файл

Проще некуда:

@echo off
reg export "hkcuSoftwareGabestMedia Player ClassicSettings" "%~dp1%~n1.reg"

Аргументом может быть последний видеофайл или папка с DVD. В той же директории создаётся одноимённый .reg-файл, который удобно потом импортировать одним щелчком перед возвратом к просмотру фильма.

2. Интеграция в системный интерфейс

Чтобы не приходилось каждый раз связываться с командной строкой или перетаскивать видео на ярлычок пакетного файла, реализуем более удобную связь.

а. Реализация для Проводника

Добавим в контекстное меню файлов и папок вызов нашего пакетного файла. Для этого достаточно создать следующий текстовый файл, сохранить его в юникоде с расширением .reg и запустить на интеграцию (только замените пути к программе на ваши, не забывая удваивать слеши).

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT*shell* MPC bookmark]

[HKEY_CLASSES_ROOT*shell* MPC bookmarkcommand]
@="E:\DOC\prg\bat\mpc_bm.bat "%1""

[HKEY_CLASSES_ROOTFoldershell* MPC bookmark]

[HKEY_CLASSES_ROOTFoldershell* MPC bookmarkcommand]
@="E:\DOC\prg\bat\mpc_bm.bat "%1""

б. Реализация для Total Commander

Те, кто больше привыкли к этому файловому менеджеру, могут создать кнопку на панели инструментов (можно продублировать её предыдущим рецептом с контекстным меню):

Закладки в Media Player Classic Home Cinema

Тогда можно будет создавать ею закладку для того файла, который находится в фокусе активной вкладки после просмотра видео.

II. Экспорт/импорт при помощи скрипта на Perl

Тут мы можем достигнуть ещё большего удобства. Если кто-то не знаком с Perl, это не страшно: просто скачайте и установите реализацию интерпретатора под Windows [1], всё остальное тоже не составит труда.

При помощи скрипта мы сможем сохранять только нужные ключи. Если делать закладку сразу после просмотра видео, нам нужны будут только самые первые записи в истории, они же последние по времени просмотра: File Name 0 + File Position 0 или DVD Position 0. Вдобавок скрипт будет проверять идентичность файла-аргумента и последнего файла в истории плеера, чтобы мы случайно не оставили ошибочную закладку.

1. Скрипт

Создайте следующий текстовый файл и сохраните его с расширением .pl:

################################################################################
use strict;
use warnings;
use Win32::TieRegistry;
################################################################################
$Registry->Delimiter("/");
my $movie = shift();
################################################################################
if ($movie && -d $movie) {
	open(OUTPUT, '>:raw:encoding(UTF16-LE)', $movie . ".DVD.reg") or die "Cannot create the .reg file: $!n";
	print OUTPUT
		"x{FEFF}Windows Registry Editor Version 5.00rnrn[HKEY_CURRENT_USER\Software\Gabest\Media Player Classic\Settings]rn",
		'"DVD Position 0"="',
		$Registry->{'HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings//DVD Position 0'}, ""rnrn";
	close(OUTPUT) or die "Cannot close the .reg file: $!n";
}
elsif ($movie && -f $movie) {
	my $last_file = $Registry->{'HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings//File Name 0'};
	if (lc($movie) eq lc($last_file)) {
		open(OUTPUT, '>:raw:encoding(UTF16-LE)', $last_file =~ s/.w+$/.reg/r) or die "Cannot create the .reg file: $!n";
		print OUTPUT
			"x{FEFF}Windows Registry Editor Version 5.00rnrn[HKEY_CURRENT_USER\Software\Gabest\Media Player Classic\Settings]rn",
			'"File Name 0"="',
			$last_file =~ s/\/\\/gr, ""rn",
			'"File Position 0"="',
			$Registry->{'HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings//File Position 0'}, ""rnrn";
		close(OUTPUT) or die "Cannot close the .reg file: $!n";
	}
	else {
		print "The input file does not match the last played one:nn$movienn$last_filenn";
		system('pause');
	}
}
else {
	my $last_file = $Registry->{'HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings//File Name 0'};
	open(OUTPUT, '>:raw:encoding(UTF16-LE)', $last_file =~ s/^.+\//r =~ s/.w+$/+Last_DVD.reg/r) or die "Cannot create the .reg file: $!n";
	print OUTPUT
		"x{FEFF}Windows Registry Editor Version 5.00rnrn[HKEY_CURRENT_USER\Software\Gabest\Media Player Classic\Settings]rn",
		'"File Name 0"="',
		$last_file =~ s/\/\\/gr, ""rn",
		'"File Position 0"="',
		$Registry->{'HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings//File Position 0'}, ""rn",
		'"DVD Position 0"="',
		$Registry->{'HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings//DVD Position 0'}, ""rnrn";
	close(OUTPUT) or die "Cannot close the .reg file: $!n";
}
################################################################################

Если скрипту передаётся папка, он сохраняет только закладку на последний DVD в .reg-файле с названием папки (проверить, тот ли это DVD, мне не представляется возможным: если кто-то знает, как это сделать, напишите, пожалуйста, в комментариях; но если делать закладку сразу после просмотра фильма и закрытия плеера, можно не волноваться за её правильность). Если передаётся файл, скрипт проверяет идентичность этого файла и последнего файла в истории; если файлы совпадают, скрипт создаёт одноимённый .reg-файл с двумя нужными ключами, если не совпадают — выдаёт сообщение об ошибке. Если скрипту вообще не передаются аргументы, он создаёт сводный .reg-файл с информацией о последнем DVD и последнем видеофайле в текущей активной папке.

2. Интеграция в системный интерфейс

Всё почти так же с минимальными изменениями (не забывайте прописывать ваши пути к программам).

а. Реализация для Проводника

Почему-то указания одного скрипта недостаточно, приходится задавать ещё и интерпретатор (при том, что расширение .pl добавлено в переменную PATHEXT):

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT*shell* MPC bookmark]

[HKEY_CLASSES_ROOT*shell* MPC bookmarkcommand]
@="C:\Perl\bin\perl.exe E:\DOC\prg\perl\var\mpc_bm.pl "%1""

[HKEY_CLASSES_ROOTFoldershell* MPC bookmark]

[HKEY_CLASSES_ROOTFoldershell* MPC bookmarkcommand]
@="C:\Perl\bin\perl.exe E:\DOC\prg\perl\var\mpc_bm.pl "%1""

б. Реализация для Total Commander

Похожая кнопка:

Закладки в Media Player Classic Home Cinema


Описанный механизм позволяет достичь такого состояния:

Закладки в Media Player Classic Home Cinema

Приятного просмотра.

Автор: vmb


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/video/12987

Ссылки в тексте:

[1] скачайте и установите реализацию интерпретатора под Windows: http://www.activestate.com/activeperl/downloads