Конвертация FFmpeg с помощью пункта контекстного меню

Конвертация FFmpeg с помощью пункта контекстного меню

Я хочу создать пункт контекстного меню, вызываемый правой кнопкой мыши, с именем«Конвертировать в MP4»доступно для каждого видеофайла (или, по крайней мере, MKV, если невозможно для каждого видеофайла), где он будет запускать FFmpeg из заданного расположения (скажем, "C:\Users\Имя пользователя\Documents\Programs\Portable\FFmpeg 20190916\bin") и делать именно это, создавать версию MP4(кодирование без потерь / просто смените контейнер)входного видеофайла. Выходной файл (MP4) должен появиться в той же папке, что и входной файл. В идеале я хотел бы иметь возможность сделать это с выбором (Ctrl+щелчок) более одного файла за раз(но не обязательнокаждыйвидеофайл в папке).

Я понимаю, что это должно быть возможно путем создания bat-файла и его последующей интеграции в контекстное меню (возможно, с помощью ярлыка меню «Отправить»?). Я не очень хорошо знаю CMD и не уверен, что мне нужно сделать, чтобы FFmpeg перехватил определенный файл(ы) и как поместить выходной файл(ы) в ту же папку, что и входной.

Для начала я попробовал адаптировать bat-файл на основеэтотОтвет навопрос, на который вы ссылаетесь как на дубликатчтобы увидеть, увидеть, если я могу придумать работающий bat-файл (прежде чем я займусь частью "контекстное меню/реестр"), но, как я уже сказал, я действительно не знаю, как правильно использовать cmd, и это не сработало. Я не думаю, что мой вопрос является дубликатом того вопроса, который вы предложили, потому что мой касается видео, а не аудио (я не говорю, что это сильно отличается в принципе, я просто не знаю, что вводить вместо этих аудиокодеков, чтобы адаптировать его), и, что самое важное, мой касается изменения контейнера, а не преобразования, поэтому мне понадобятся другие команды. Итак, основываясь на этом ответе и информации, найденной вКраткое руководство по использованию FFmpeg для конвертации медиафайлов на Opensource.com я создал bat-файлы с такими командами:

ffmpeg -i %1 copy "%~n1.mp4

ffmpeg -i "%1" "%1.mp4

ffmpeg -i "%1.mkv" "%1.mp4

ffmpeg -i input.mkv -c:av copy output.mp4

(Я использовал полный путь к FFmpeg, но опустил его здесь для удобства чтения) затем попытался сбросить им файл MKV, но ни один не работает. Я уже проверил несколько вопросов здесь, связанных с cmd и FFmpeg, но они не смогли помочь, поэтому я буду признателен за любую помощь!

решение1

Процедура:

  • Получить связанный тип файла для расширения .MKV с помощью assoc .mkvкоманды. Например, вывод по умолчанию — .mkv=WMP11.AssocFile.MKV.

  • Откройте связанный тип файла в редакторе реестра (он же regedit). Например, реестр по умолчанию — HKEY_CLASSES_ROOT\WMP11.AssocFile.MKV.

  • Чтобы добавить команду в реестр, сначала измените команду ffmpeg на правильный формат. Простая команда для преобразования mkv в mp4 — ffmpeg -i abc.mkv -c copy abc.mp4. Имя файла должно быть заменено на переменную-заполнитель %1. Таким образом, команда становится ffmpeg -i %1 -c copy %1.mp4.

  • Добавьте реестр с помощью следующей команды, запущенной от имени администратора.

REG ADD "HKCR\WMP11.AssocFile.MKV\Shell\Convert to MP4\command" /VE /T REG_EXPAND_SZ /D "ffmpeg.exe -i \"%1\" -c copy \"%1.mp4\"" 

Эта команда добавляет ffmpeg -i %1 -c copy %1.mp4команду в HKCR\WMP11.AssocFile.MKV\Shell\Convert to MP4\commandключ реестра к defaultзначению. REG_EXPAND_SZТип необходим, чтобы оболочка могла вывести %1имя файла. Обратная косая черта и двойные кавычки нужны для обработки пробелов в полном пути файла MKV.

  • Команду можно изменить или настроить разными способами. Обязательно измените ассоциацию файла по умолчанию WMP11.AssocFile.MKVна текущую настройку. Также укажите полный путь к ffmpeg.exeисполняемому файлу. Чтобы отключить всплывающее окно командной строки, добавьте cmd /Q /Cкоманду ffmpeg. Смотритеэтот ответза этот трюк.

решение2

Пример репозитория GitHub находится по адресуhttps://github.com/kachurovskiy/VideoContextMenu

Примечание: я не автор. Добавляю это в качестве ответа, потому что комментариев выше слишком много.

Он делает следующее

all.reg - используйте это для настройки параметров меню проводника

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\Video: to h264\command]
@="C:\\VideoContextMenu\\convert.bat \"%1\""

convert.bat - это основная команда, расположенная в C:\VideoContextMenu(или в другом месте)

set i=%~n1
set x=%~x1
set o=%i%.mp4
if exist %o% (
  set o=%i%-h264.mp4
)
ffmpeg -i "%i%%x%" -vcodec libx264 -preset slow -acodec aac "%o%"
exit

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

т.е. HKCR\WMP11.AssocFile.MKV\Shell\Convert to MP4для .mkv

Связанный контент