Вы должны войти, чтобы создавать сообщения и темы.

Полезные пункты контекстного меню для mp4 | ffmpeg

◄Страница 2 из 37► 37

Спасибо за обьяснение, буду изучать)

Лайкнул Сергей
Сергей

Доброй ночи🌙
Сделал маленькое приложение из reg файла в шапке, позволяющее автоматизировать процесс добавления/удаления из контекстного меню.
Не судите строго, сам ещё учусь по урокам Хачатура, если что-то не так, говорите, попробую исправить.

Что Вам нужно: просто положите в любую папку ffmpeg.exe, icon.ico, и данное приложение вместе, после запуска приложение само найдёт эти файлы и Вам останется просто нажать на кнопку 'Добавить в контекстное меню'.
Скриншот, ссылка на приложение, исходник

P.S.
Если моё приложение кому-то будет полезно и если Хачатур посчитает нужным добавить его в основной пост темы, буду очень рад что сэкономил кому-то несколько минут на изменение reg файла 😅

Лайкнули XpucT, Mikhail и ещё 7
XpucTMikhail𝐅𝐫𝐨𝐦𝐇𝐞𝐥𝐥IvanАндрейЕвгенийВладиславАликOnePunchMan

Привет.
Для кого-то очень полезно, некоторые до сих пор не знают, что в reg файл нужно писать двойной слеш, даже если видят пример, все равно не дописывают), так что очень полезная штука👍.

«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Доброе утро, Сергей.
Утилита удобная, но большой минус в том, что при нажатии на кнопку Удалить из контекстного меню полностью очищается содержимое раздела. У меня там был модифицированный сабж (вложенное меню + нажатие Shift) и пункт от MediaInfo. Короче, утилита всё удалила.
Было бы правильнее удалять конкретно добавленные ключи, а не родительский Shell.

Лайкнул Psydiant
Psydiant
Лучший способ помочь себе — помогать другим.

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

Андрей, доброе утро🖐
Оно закрывается по завершении операции.

Лайкнул Сергей
Сергей
В любой непонятной ситуации переходи на beta  © Win 10 Tweaker
Цитата: Яр от 02.09.2022, 07:33

Доброе утро, Сергей.
Утилита удобная, но большой минус в том, что при нажатии на кнопку Удалить из контекстного меню полностью очищается содержимое раздела. У меня там был модифицированный сабж (вложенное меню + нажатие Shift) и пункт от MediaInfo. Короче, утилита всё удалила.
Было бы правильнее удалять конкретно добавленные ключи, а не родительский Shell.

Добрый день, Яр👋
Извините, не подумал. Сделал проверку - если в реестре в .mp4\shell есть что-то кроме пунктов ffmpeg, то трогать не будет, если нету - то удаляет.
Проверьте, пожалуйста. Спасибо за отзыв.

Также добавил возможность отдельно включить пункты если кому-то не нужны все.
Скриншот, ссылка на приложение, исходник

Лайкнули XpucT, Сергей и ещё 4
XpucTСергейAlekseyЯRPsydiantAlas Nameless
Цитата: XpucT от 01.09.2022, 12:24

Всем привет 🖐
Делюсь своим шеллом контекстного меню для mp4, который сохраняет массу времени

Добрый день!
можно добавить пункт "отключение звука в видео" или "пересохранить без аудио" ?

Сергей, теперь всё хорошо 👍

Лайкнули XpucT, Сергей и Сергей
XpucTСергейСергей
Лучший способ помочь себе — помогать другим.
Цитата: shim от 02.09.2022, 10:49

Добрый день!
можно добавить пункт "отключение звука в видео" или "пересохранить без аудио" ?

Добрый день, shim.
В разделе Скопированоcommand , в отличие от Пересохранить видео, нужно добавить такую строку: Скопировано-vcodec copy -an
Для сравнения (до и после):

"ПУТЬкFFMPEG\ffmpeg.exe" -i "%1" -crf 22 "%1.mp4"

"ПУТЬкFFMPEG\ffmpeg.exe" -i "%1" -crf 22 -vcodec copy -an "%1.mp4"

или в cmd 2 команды:

reg add "HKCU\SOFTWARE\Classes\SystemFileAssociations\.mp4\Shell\FFMPEG\shell\Пересохранить без аудио" /v "icon" /t REG_SZ /d "\"ПУТЬкFFMPEG\icon.ico\"" /f
reg add "HKCU\SOFTWARE\Classes\SystemFileAssociations\.mp4\Shell\FFMPEG\shell\Пересохранить без аудио\command" /ve /t REG_SZ /d "\"ПУТЬкFFMPEG\ffmpeg.exe\" -i \"%1\" -crf 22 -vcodec copy -an \"%1.mp4\"" /f

Не забываем добавить свой путь к ffmpeg

Лайкнули Mikhail, shim и Psydiant
MikhailshimPsydiant
Лучший способ помочь себе — помогать другим.

Оффтоп:

Сергей, привет 🖐
По коду, если позволишь, пару рекомендаций на будущее:

Так как поля в C# прогружаются сразу с инициализацией, то такие задачи, как поиск файла – не рекомендую туда писать.
Пока утилита маленькая, ничего незаметно, однако, это сильно будет влиять на скорость запуска, когда в коде строк 1000 и более.
Поэтому поля нужно превращать в свойства, чтобы они были инициализированы только в момент обращения к ним.

То есть, писать нужно не так:

readonly string pathexe = File.Exists("ffmpeg.exe") ? thisexepath.Replace(thisexename, "ffmpeg.exe") : "";

а так:

string pathexe => File.Exists("ffmpeg.exe") ? thisexepath.Replace(thisexename, "ffmpeg.exe") : "";

В Твоём случае, поля должны быть сразу инициализированы и отображены в labels, однако, Я говорю просто про подход.
Хуже не будет, если сразу делать правильно =)


Также в коде довольно часто открывается инстанс на Registry и постоянно используется строка СкопированоSOFTWARE\Classes\SystemFileAssociations\.mp4
Сократить код, уменьшить программу и снизить нагрузку можно простым using:

using (var key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Classes\SystemFileAssociations\.mp4", true))
{
    if (checkBox1.Checked)
    {
        key.CreateSubKey(@"shell\Заменить звук").SetValue("icon", $"\"{pathicon}\"");
        key.CreateSubKey(@"shell\Заменить звук\command").SetValue("", $"\"{pathexe}\" -i \"%1\" -i 1.mp3 -c:v copy -map 0:v:0 -map 1:a:0 \"%1.mp4\"");
        checkBox1.Checked = false;
    }
    if (checkBox2.Checked)
    {
        key.CreateSubKey(@"shell\Извлечь wav").SetValue("icon", $"\"{pathicon}\"");
        key.CreateSubKey(@"shell\Извлечь wav\command").SetValue("", $"\"{pathexe}\" -i \"%1\" \"%1.wav\"");
        checkBox2.Checked = false;
    }
    if (checkBox3.Checked)
    {
        key.CreateSubKey(@"shell\Пересохранить mp4").SetValue("icon", $"\"{pathicon}\"");

        if (!CheckBoxAlt.Checked)
            key.CreateSubKey(@"shell\Пересохранить mp4\command").SetValue("", $"\"{pathexe}\" -i \"%1\" -crf 22 \"%1.mp4\"");
        else
            key.CreateSubKey(@"shell\Пересохранить mp4\command").SetValue("", $"\"{pathexe}\" -i \"%1\" -c:v h264_nvenc -preset llhq -rc constqp -qp 21 -c:a copy \"%1.mp4\"");
        checkBox3.Checked = false;
    }
}

Если по синтаксису, то это:

using (var key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Classes\SystemFileAssociations\.mp4\shell", false))
    if (key != null)
        foreach (string name in key.GetSubKeyNames())
            if (name != "Заменить звук" && name != "Извлечь wav" && name != "Пересохранить mp4")
                modified = true;

Я бы заменил на это:

using (var key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Classes\SystemFileAssociations\.mp4\shell"))
    modified = (bool)key?.GetSubKeyNames().All(x => x != "Заменить звук" && x != "Извлечь wav" && x != "Пересохранить mp4");

Но подход такой неправильный, потому что в цикле проверяется каждый элемент по каждому имени, и каждый всегда попадёт хотя бы 1 раз и в true и в false. Это превращает цикл в ненужную кашу. Поэтому идеальная проверка будет выглядеть так:

using (var key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Classes\SystemFileAssociations\.mp4\shell"))
    modified = new List<string> { "Заменить звук", "Извлечь wav", "Пересохранить mp4" }.All(x => (bool)key?.GetSubKeyNames().Any(y => y == x));

Лайкнули Mikhail, Игорь и ещё 7
MikhailИгорьAlekseyЯRВладиславPsydiantЛатукСергейSnow Gray
В любой непонятной ситуации переходи на beta  © Win 10 Tweaker

В разделе command , в отличие от Пересохранить видео, нужно добавить такую строку: -vcodec copy -an

Моя ошибка: ключ Скопировано-vcodec copy не сжимает видеоряд, и ключ Скопировано-crf 22 игнорируется.

Достаточно добавить ключ Скопировано-an

reg add "HKCU\SOFTWARE\Classes\SystemFileAssociations\.mp4\Shell\FFMPEG\shell\Пересохранить без аудио" /v "icon" /t REG_SZ /d "\"ПУТЬкFFMPEG\icon.ico\"" /f
reg add "HKCU\SOFTWARE\Classes\SystemFileAssociations\.mp4\Shell\FFMPEG\shell\Пересохранить без аудио\command" /ve /t REG_SZ /d "\"ПУТЬкFFMPEG\ffmpeg.exe\" -i \"%1\" -crf 22 -an \"%1.mp4\"" /f

Исправьте у себя, кто уже применил.

Лайкнули Mikhail, shim и Psydiant
MikhailshimPsydiant
Лучший способ помочь себе — помогать другим.

Добрый день. есть просьба. было бы здорово сделать такой же шелл для качественного пережатия из мп4 в гиф. если конечно это возможно. заранее спасибо

Лайкнул Alt
Alt

Яр, привет.
Тут ошибка, по одному % надо.

Лайкнул ЯR
ЯR
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн
◄Страница 2 из 37► 37