FFmpeg 通过上下文菜单项进行转换

FFmpeg 通过上下文菜单项进行转换

我想创建一个名为“转换为 MP4”适用于每个视频文件(或者至少是 MKV,如果每个视频文件都不可能),它会从设定的位置启动 FFmpeg(比如说“C:\Users\Username\Documents\Programs\Portable\FFmpeg 20190916\bin”)并执行此操作,创建一个 MP4 版本(无损编码/只需更换容器)输入视频文件。输出文件 (MP4) 应与输入文件出现在同一个文件夹中。理想情况下,我希望能够通过一次选择(Ctrl+单击)多个文件来实现这一点(但不一定)每一个文件夹中的视频文件)

我理解这应该可以通过创建一个 bat 文件然后以某种方式将其集成到上下文菜单中(也许使用“发送到”菜单快捷方式?)。不过,我不太了解 CMD,我不确定我应该怎么做才能让 FFmpeg 捕获特定文件以及如何将输出文件与输入放在同一个文件夹中。

首先,我尝试根据回答您链接为重复的问题看看,看看我是否可以想出一个有效的 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中的命令添加到值中。类型是必需的,以便 shell 可以推断出文件名。反斜杠和双引号用于处理 MKV 文件完整路径中的空格。HKCR\WMP11.AssocFile.MKV\Shell\Convert to MP4\commanddefaultREG_EXPAND_SZ%1

  • 该命令可以通过不同的方式更改或配置。确保将默认文件关联更改WMP11.AssocFile.MKV为当前设置。还要输入ffmpeg.exe可执行文件的完整路径。要抑制命令提示符窗口的弹出,请附加cmd /Q /Cffmpeg 命令。请参阅这个答案为了这个技巧。

答案2

有一个示例 github repohttps://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

相关内容