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

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

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

    Мне приходят в голову три способа создания пользовательских закладок при работе с реестрм: от самого простого и наименее гибкого до более сложного и тонкого. Конечно, пост не претендует на уровень rocket science. Описываются простые и удобные практические трюки.

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




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

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

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


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

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

    Проще некуда (сохраните как текстовый файл с расширением .bat):

    @echo off
    reg export "hkcu\Software\Gabest\Media Player Classic\Settings" "%~dpn1.reg"

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

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

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

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

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

    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\*\shell\* MPC bookmark]
    
    [HKEY_CLASSES_ROOT\*\shell\* MPC bookmark\command]
    @="E:\\DOC\\prg\\bat\\mpc_bm.bat \"%1\""
    
    [HKEY_CLASSES_ROOT\Folder\shell\* MPC bookmark]
    
    [HKEY_CLASSES_ROOT\Folder\shell\* MPC bookmark\command]
    @="E:\\DOC\\prg\\bat\\mpc_bm.bat \"%1\""

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

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



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

    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.00\r\n\r\n[HKEY_CURRENT_USER\\Software\\Gabest\\Media Player Classic\\Settings]\r\n",
    		'"DVD Position 0"="',
    		$Registry->{'HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings//DVD Position 0'}, "\"\r\n\r\n";
    	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.00\r\n\r\n[HKEY_CURRENT_USER\\Software\\Gabest\\Media Player Classic\\Settings]\r\n",
    			'"File Name 0"="',
    			$last_file =~ s/\\/\\\\/gr, "\"\r\n",
    			'"File Position 0"="',
    			$Registry->{'HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings//File Position 0'}, "\"\r\n\r\n";
    		close(OUTPUT) or die "Cannot close the .reg file: $!\n";
    	}
    	else {
    		print "The input file does not match the last played one:\n\n$movie\n\n$last_file\n\n";
    		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.00\r\n\r\n[HKEY_CURRENT_USER\\Software\\Gabest\\Media Player Classic\\Settings]\r\n",
    		'"File Name 0"="',
    		$last_file =~ s/\\/\\\\/gr, "\"\r\n",
    		'"File Position 0"="',
    		$Registry->{'HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings//File Position 0'}, "\"\r\n",
    		'"DVD Position 0"="',
    		$Registry->{'HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings//DVD Position 0'}, "\"\r\n\r\n";
    	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 bookmark\command]
    @="C:\\Perl\\bin\\perl.exe E:\\DOC\\prg\\perl\\var\\mpc_bm.pl \"%1\""
    
    [HKEY_CLASSES_ROOT\Folder\shell\* MPC bookmark]
    
    [HKEY_CLASSES_ROOT\Folder\shell\* MPC bookmark\command]
    @="C:\\Perl\\bin\\perl.exe E:\\DOC\\prg\\perl\\var\\mpc_bm.pl \"%1\""

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

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





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



    P. S. Конечно, есть ещё «Избранное» (Favorites) в самом плеере, но кому-то оно может показаться менее удобным: чтобы обновить закладку, то есть сменить время перехода в одном том же фильме, нужно удалять старую закладку и создавать новую; когда закладки находятся в папках рядом с фильмами, их легче искать и легче удалять за ненадобностью вместе с фильмами после просмотра; такие закладки доступны из всех учётных записей; их легче редактировать (хоть в Блокноте), если меняются имя файла или путь к нему.
    Поделиться публикацией

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 9

      0
      без проблем добавил 22 закладки в портативном варианте
        0
        Вы, наверное, имеете в виду «Избранное» (Favorites), о котором я дописал в постскриптуме? Там, наверное, и правда нет ограничений. Я имел в виду автоматические закладки, создаваемые без вмешательства пользователя.
          0
          что за закладки?
            0
            Если в настройках выбрано сохранение истории и позиций просмотра, плеер сам сохраняет в реестре (или в ini-файле) 20 закладок на 20 последних просмотренных файлов ил 20 DVD (всего 40). Вмешательство пользователя не нужно, программа автоматически будет начинать воспроизведение с последнего места, если файл находится в этих «закладках».
              +1
              Вот вот, во всей большой статье даже не написано что такое закладки, где они, и как ими пользоваться.
                0
                Простите, мне казалось, это ясно по первым абзацам. Попытаюсь немного добавить информации.
          +1
          Media Player Classic Home Cinema — open source программа, так что можно собрать под свои потребности версию с бОльшим числом закладок. Навскидку, надо будет внести изменения в файл AppSettings.h (строки 158 и 165):

          #define MAX_DVD_POSITION 20
          #define MAX_FILE_POSITION 20
          


          поставить числа побольше, например 99 и закладок, создаваемых средствами плеера, станет больше. А ваш опыт будет полезен для программ с закрытыми исходниками, где такой трюк не пройдёт, из-за отсутствия исходников (хотя остаётся возможность пропатчить бинарник, но это часто сложнее, да и обычно противозаконно).

            +1
            Мы переехали. Смотрите новые выпуски на GitHub'е :-) github.com/mpc-hc/mpc-hc
            SourceForge уж больно медленный, да и pull request рулят подобных OpenSource проектов. Намного удобней ревьювить чем пачку патчей.
              0
              Спасибо, это тоже относительный выход. Хоть не все привычны к таким радикальным мерам)

              Да, я писал это и как пример решения похожих проблем с другими программами, в том числе как пример экспорта отдельных записей реестра при помощи Perl.

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

            Самое читаемое