我找到了這個線程: 手煞車設定可將 MKV 轉換為 MP4,同時保留原始質量
我可以使用以下程式碼將 .MKV“轉換”為 .MP4:
for %%a in ("*.mkv") do D:\Programme\Converter\ffmpeg\bin\ffmpeg.exe -i "%%a" -c:v copy -c:a copy "%%~na .mp4"
pause
唯一的問題是有 2 個音訊通道。德語和英語。使用上面的程式碼,它僅複製德語(第一)語言。但不是第二種音訊語言。我怎樣才能做到這一點?
目前,我僅使用德語從 .MKV 轉換為 .MP4。但我希望能夠將 VLC 播放器的語言從德語切換為英文。
感謝您的幫忙!
編輯: 我在這裡找到了該線程: http://ffmpeg.gusari.org/viewtopic.php?f=25&t=611
我用這些資訊進行了測試。我將上面的程式碼更改為以下程式碼:
for %%a in ("*.mkv") do D:\Programme\Converter\ffmpeg\bin\ffmpeg.exe -i "%%a" -map 0:0 -map 0:1 -map 0:2 -c:v copy -c:a:0 copy -c:a:1 copy "%%~na.mp4"
pause
我在這裡做錯了什麼嗎?我怎樣才能添加德語/英語字幕?如果我在那裡添加一個字幕圖,而我的 .MKV 根本沒有字幕,這會是一個問題嗎?我只想創建一個 .bat 檔案來轉換帶有 2 個音軌和 2 個字幕的 .MKV。這樣我就可以將所有 .MKV 檔案「重新混合」(或轉換為未知)為 .MP4,而不會遺失任何資訊。
目前,我的 .MKV 沒有字幕,所以這並不重要。但最好為未來做好準備,對嗎?
所以請告訴我我做得是否正確,以及如何添加字幕。這是我第一次使用 FFmpeg。剛下載了,沒聽過。從來沒有真正使用過CMD。
答案1
ffmpeg 不會自動映射所有軌道;預設流選擇只會將一個音訊、一個視訊和一個字幕軌道映射到輸出。如果你想地圖所有流,使用-map 0
.如果您希望能夠選擇什麼要進行映射,您必須先解析輸入檔 ( ffmpeg -i input.mkv
) 並使用一些腳本來建構最終的轉換命令。 ffprobe 對此很有幫助。看FFmpeg Wiki:FFprobe 提示舉些例子。
您可以-c copy
指定串流複製所有流,無論它們是什麼類型。您也可以分別索引視訊和音訊串流,因此您的命令可以縮短為:
ffmpeg -i input.mkv -c copy -map 0 output.mp4
答案2
有一個開源程式叫做VCT: https://sourceforge.net/projects/videoconvertertranscoder/?source=directory
這是 ffmpeg 的 GUI。您也可以手動編輯 ffmpeg 指令。它有一個名為轉碼您可以在其中將 MKV 重新打包為 MP4,但此選項卡沒有添加字幕的選項。
如果您想將 MKV 重新打包為 MP4 並同時新增字幕,步驟如下:
- 去轉變選項卡並選擇您的輸入文件
- 在視訊容器選擇複製並在音訊編解碼器還選擇複製
- 點選新增字幕並選擇您的外部 SRT 文件
- 在ffmpeg命令文字方塊中替換字幕部分-c:s srt ""和-c:s mov_text ""
- 點選新增到批次列表然後單擊開始 編碼將在一兩分鐘內完成。
當然,如果你不介意編碼兩次,並且不喜歡輸入命令,你也可以這樣做:
- 選擇選項卡轉碼並將您的文件拖到輸入檔.., 點選開始,一分鐘內即可完成。
- 然後,選擇新編碼的MP4並在視訊容器選擇複製並在音訊編解碼器點選複製。
- 點選新增到批次列表然後單擊開始。編碼將在一分鐘內完成。
答案3
好吧,我使用的是這樣的 .bat 檔案:
for %%a in ("*.mkv") do D:\Programme\Converter\ffmpeg\bin\ffmpeg.exe -i "%%a" -c:v copy -c:a copy "%%~na.mp4"
但我收到一條錯誤訊息,但 .MP4 仍然工作正常。這裡有一個日誌檔:pastie.org/private/9lqyvhyotnh1o4gp6rg5g
問題是我的舊索尼電視在觀看 .MP4 時有時會凍結。 GUI 看起來不錯。但如果您想連續轉換 20 個文件,則需要點擊很多次。 .bat 檔案只是自動將所有這些檔案放在一個資料夾中。
也許有人知道為什麼我收到錯誤訊息,以及這個腳本是否錯誤:)