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

в 14:17, , рубрики: perl, Total Commander, видео, Работа с видео, реестр, Софт, метки: , , ,

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, всё остальное тоже не составит труда.

При помощи скрипта мы сможем сохранять только нужные ключи. Если делать закладку сразу после просмотра видео, нам нужны будут только самые первые записи в истории, они же последние по времени просмотра: 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

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js