解決MKV檔在PS3 Media Server中無法播放的問題 (比如出現檔案損毀)

請注意:本文說明如何自動重包成PS3 Media Server可讀取的mkv檔,如果使用本文的說明來重新包裝mkv,而造成你的檔案損毀或是消失,本人不負任何責任! 請記得先備份檔案!!

PS3 Media Server對某些mkv檔,常有不能放映的狀況(啥檔案壞掉之類的),通常是因為mkv檔內有壓縮的資料造成,尤其是mkvtoolnix 4.1之後的版本,預設會壓縮,但此會造成PMS不能正常讀取mkv檔,經查通常有二種解法:

  • 使用mkvtoolnix 3.1版重新包裝
  • 使用最新版的mkvtoolnix重新包裝,但是不可使用壓縮






不知為何,使用第一種方案,有時3.1版的手動解mkv,會認不得h.264的video檔,而出現錯誤,使用最新版的(目前為4.6),只要設好不壓縮,目前看來都沒有問題。但是每個mkv檔內容不一定(有的有字型附件,有的字幕不止一個,往往手動重包時,都要先看一下內容的設定(比如FPS,Aspect Ratio...),然後每一個都要設定不壓縮,搞多後實在是累人。


參考國外論壇,有人早就弄出自動重包mkv,把壓縮拿掉的batch,懶人的我把它簡化成幾種方式:
  • 只重包一個檔案
  • 重包整個目錄
  • 重包整個目錄及子目錄


以下為說明:
  • 必備工具:mkvtoolnix 4.6版 (這一版測試了約10個mkv檔沒問題),其它版沒試。很多人都說一定要用3.1版的,不過我測出來,新版的沒有什麼問題。
  • 測試環境:Windows 7 x64 SP1


以下的批次檔皆指定mkvtoolnix 放在 F:\Anime\mkvtoolnix\ 下,請自更改相關設定。
請確定你放mkv檔的硬碟空間夠大!! 可用空間,最少要是處理的「最大的mkv檔」檔案的大小的一倍以上! 因為我沒做錯誤處理,如果寫到一半硬碟沒空間,你會得到一個殘廢的mkv檔。


先來說說只重包一個檔案的批次檔:
產生一個批次檔案 mkfix.cmd,放在mkvtoolnix 下,內容如下:


rem ==========================
F:\Anime\mkvtoolnix\mkvmerge.exe -o "%~dpn1_fix.mkv" --engage keep_bitstream_ar_info -A -S --compression -1:none "%~dpnx1" -D -S --compression -1:none "%~dpnx1" -A -D --compression -1:none "%~dpnx1"
move "%~dpnx1" "%~dpn1_old.mkv"
move "%~dpn1_fix.mkv" "%~dpnx1"
rem pause
rem ==========================


上面粗體字的部份,只有一行,別分開輸入


再來說明重包整個目錄的批次檔 mkfixall.cmd:


rem ==========================
rem echo off
echo %~dp1
FOR /F "delims=*" %%A IN ('dir /b "%~dp1/*.MKV"') do CALL :MKVFIXMUX "%%A" "%MKVTOOLPATH%"
GOTO :eof
:MKVFIXMUX
F:\Anime\mkvtoolnix\mkvmerge.exe -o "%~dpn1_fix.mkv" --engage keep_bitstream_ar_info -A -S --compression -1:none "%~dpnx1" -D -S --compression -1:none "%~dpnx1" -A -D --compression -1:none "%~dpnx1"
move "%~dpnx1" "%~dpn1_old.mkv"
move "%~dpn1_fix.mkv" "%~dpnx1"
rem pause
goto :eof
rem ==========================


mkfix使用方法:
把mkv檔,用滑鼠直接拉到mkfix.cmd上後,放開就行,它會把原來的mkv檔名,加上 _old 備份,新包好的檔案會保持原先的檔名,如果舊檔有壓縮,你會發現新檔的檔案大小會大一些,這是正常的。請勿把非mkv檔拉到mkfix上面執行,我沒做防呆,會有非預期狀況發生!!



mkfixall使用方法:
把該資料夾下的任一個檔案(不是mkv應該也行),拉到mkfixall.cmd上後,放開就行。它是mkfix的加強版,一次處理整個資料夾(但是不含子資料夾)


最後一種方法:重包整個目錄及子目錄,這個批次檔和kfixall.cmd基本上一樣,只要把下面這字串:
('dir /b "%~dp1/*.MKV"')
改成
('dir /b /s "%~dp1/*.MKV"')
就可以了。




如果這幾個批次檔沒有用,那還是自己手動包吧!


「網路上的芳鄰」並沒有試過


另外,有個工具叫mkclean,經試過後做出來的mkv PMS不一定能吃,所以不使用。


2011/4/26 更新fxmkv.cmd:
新增如果新做出來的檔案,大小和舊的一樣的話,則砍掉新的檔案,還原舊的:
rem ==========================

@echo off
set "fl=%~z1"
echo File size before processing: %fl%
if "%~x1" == ".mkv" (goto DOMUX)
if "%~x1" == ".MKV" (goto DOMUX)
goto :eof
:RestF
REM Restore file if new file size is the same as old one.
REM delete new file, rename old file to original one.
Echo File size the same, restore the old one!!
del "%~dpnx1" 
move "%~dpn1_old.mkv" "%~dpnx1" 
goto :eof
:DOMUX
F:\Anime\mkvtoolnix\mkvmerge.exe -o "%~dpn1_fix.mkv" --engage keep_bitstream_ar_info -A -S --compression -1:none "%~dpnx1" -D -S --compression -1:none "%~dpnx1" -A -D --compression -1:none "%~dpnx1"
move "%~dpnx1" "%~dpn1_old.mkv"
move "%~dpn1_fix.mkv" "%~dpnx1"
FOR /F "tokens=4* delims= " %%A IN ('DIR %1 /-C /N ^| FIND /I "%~nx1"') DO SET newsize=%%A
echo File size afer processing: %newsize%
if "%fl%" EQU "%newsize%"  (goto RestF)
rem pause


rem ==========================




2011/04/27 更新 mkfixall.cmd
修正錯誤,並新增如果新做出來的檔案,大小和舊的一樣的話,則砍掉新的檔案,還原舊的:

rem ==========================
rem echo off
echo %~dp1
pushd "%~dp1"
FOR /F "delims=*" %%A IN ('dir /b "%~dp1/*.MKV"') do CALL :MKVFIXMUX "%%A" "%MKVTOOLPATH%"
GOTO :eof
:MKVFIXMUX

set "fl=%~z1"
F:\Anime\mkvtoolnix\mkvmerge.exe -o "%~dpn1_fix.mkv" --engage keep_bitstream_ar_info -A -S --compression -1:none "%~dpnx1" -D -S --compression -1:none "%~dpnx1" -A -D --compression -1:none "%~dpnx1"
move "%~dpnx1" "%~dpn1_old.mkv"
move "%~dpn1_fix.mkv" "%~dpnx1"
FOR /F "tokens=4* delims= " %%A IN ('DIR %1 /-C /N ^| FIND /I "%~nx1"') DO SET newsize=%%A
echo File size afer processing: %newsize%
if "%fl%" NEQ "%newsize%"  (goto :eof)
Echo File size the same, restore the old one!!
del "%~dpnx1"
move "%~dpn1_old.mkv" "%~dpnx1"
rem pause
goto :eof
rem ==========================


2011/05/24
Mkvtools 4.8已經發行,下載位置 http://www.bunkus.org/videotools/mkvtoolnix/downloads.html,更新的部份為mkvmerge和mmg二支影片合併處理的程式!


嚴禁無斷轉載,謝謝

留言

這個網誌中的熱門文章

Google瀏覽器發生「錯誤107 (net::ERR_SSL_PROTOCOL_ERROR): SSL 通訊協定錯誤」的解決方式

Tomato Port Forwarding / Port Triggering 設定