Я хочу создать пункт контекстного меню, вызываемый правой кнопкой мыши, с именем«Конвертировать в 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