透過上下文選單項目進行 FFmpeg 轉換

透過上下文選單項目進行 FFmpeg 轉換

我想建立一個名為的右鍵/上下文選單條目“轉換為 MP4”適用於每個視訊檔案(或至少是 MKV,如果每個視訊檔案都不可能),它會從設定位置啟動 FFmpeg(假設“C:\Users\Username\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中的命令新增至值。該類型是必需的,以便 shell 可以推斷出檔案名稱。反斜線和雙引號用於處理 MKV 檔案完整路徑中的空格。HKCR\WMP11.AssocFile.MKV\Shell\Convert to MP4\commanddefaultREG_EXPAND_SZ%1

  • 可以透過不同的方式變更或配置該命令。確保將預設檔案關聯更改WMP11.AssocFile.MKV為您目前的設定。也要放置ffmpeg.exe可執行檔的完整路徑。若要禁止彈出命令提示字元窗口,請附加cmd /Q /Cffmpeg 命令。看這個答案為了那個把戲。

答案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

相關內容