ビデオコンテンツのフォーマット変換

2013.01.21 追記
DLNAのデバイスクラスが増え、スマホなどともネットワーク経由(WiFi)で接続できるようになり、モバイル機器向けを考慮するとMP4(映像H264/AVC、音声AAC)がお勧めとなります。

2011.07.09 補足
以下ではMP4ファイルフォーマットに出力していますが、MPEG2TSを推奨します。
その場合、MUXERはTSMUXERを使用することになると思います。

対象のビデオコンテンツと変換後のファイルフォーマットです。
※この記事は、DMSにてトランスコード機能を使用せずにオリジナルのビデオコンテンツをDLNAクライアントで再生できる形式に変換してしまおうという発想の場合です。
※トランスコードしないためその分のレスポンスが速くなるでしょうし、DMS側のローカルディスク上にトランスコード後のデータが作成されることがなくなります。

赤字が変換を必要とする箇所です。

オリジナル AVI(.divx)
31タイトル
AVI(.avi)
13タイトル
MPEG4(.mp4)
93タイトル
Matroska
(.mkv)
48タイトル
DVR-MS
(.dvr-ms)
215タイトル
DX50
MP3lame
(CBR)
H264
MP3lame
(CBR)
H264
ACC
(2ch)
H264
AC3

(5.1ch)

MPEG2 Video MP2
変換後 MPEG4 MPEG4 対象外 MPEG4 MPEG4
H264
AAC
H264
AAC
 –  – H264
AC3

(5.1ch)

H264 AAC
映像、音声ともに再エンコード 音声のみ再エンコード 変換対象外 コンテナのみ変更 映像、音声ともに再エンコード
ついでにCMカット

以下の1~4が実際の変換手順です。

1.AVI(.divx)
①AviSynthスクリプト作成
②AVS2WAVEでWAVに変換
③NeroAACencでWAVからAACに変換
④x264cliで映像をエンコード
⑤MP4BOXで映像(H264)と音声(AAC)を合成

divx2mp4.batファイル(※これ自体を使用した実績はありません)

@echo off
rem ########################################################################
rem divx2mp4 
rem Ver1.0 2011/04/19
rem ########################################################################
rem filepath
set WORK=D:exportsdivx2mp4
set logfile=D:log%~n0.log
set DSTDIR=D:exports

rem program path
set AVS2WAV_CMD="D:toolsavs2wavavs2wav.exe"
set AACENC_CMD="D:toolsNeroDigitalAudiowin32neroAacEnc.exe"
set X264_CMD="D:toolsMeGUI_1911_x86_WithoutInstallertoolsx264x264.exe"
set MP4BOX_CMD="D:toolsMeGUI_1911_x86_WithoutInstallertoolsmp4boxMP4Box.exe"
set AVISYNTH_PLUGIN="D:toolsMeGUI_1911_x86_WithoutInstallertoolsavisynth_plugin"


rem x264 option
set VBR=--crf 22 --level 5.1 --sar 1:1 --rc-lookahead 60 --aq-mode 0 --psy-rd 0.5:0 --qpmin 1 --qpstep 16 --vbv-bufsize 50000 --vbv-maxrate 50000 --scenecut 54 --min-keyint 1 --keyint 300 --8x8dct --partitions "p8x8,b8x8,i8x8,i4x4" --b-adapt 2 --bframes 3 --b-pyramid strict --ref 5 --mixed-refs --direct "auto" --me "umh" --subme 5 --merange 32 --threads "auto" --trellis 2 --deblock -2:-2 --cqm "flat" --no-fast-pskip --no-dct-decimate --fullrange on


rem file check
if not exist %WORK% (
 set error_message=作業用ディレクトリなし
 goto error
)


:target

cd /d %WORK%

rem parameter check
if "%~1"=="" (
 set error_message=入力ファイルなし
 goto error
)

if /i "%~x1" neq ".divx" (
  set error_message=拡張子:"%~x1" には対応していません。
  goto error
)


set NAME=%~n1
set NAME=%NAME: =_%

if not exist "%NAME%" mkdir "%NAME%"
cd "%NAME%"

rem variables
set SRC=%1
set LOG="%NAME%.log"
set AVS="%NAME%.avs"
set AAC="%NAME%.aac"
set WAV="%NAME%.wav"
set MP4="%NAME%.mp4"
set H264="%NAME%.h264"
set AVI="%NAME%.avi"
set MP3="%NAME%.mp3"
set SRC_DIR=%~d1%~p1

rem call
call :start_label
call :crt_avs
call :enc_aac
call :enc_x264_vbr
call :mux_mp4box
call :end_label

rem next file
shift /1
if "%~1"=="" goto end
goto target


rem start
:start_label
echo ===============================================================================
echo %time%    Start [%NAME%]
echo ===============================================================================
echo %date% %time% [%NAME%] start >> %logfile%

goto :EOF


:crt_avs
echo ===============================================================================
echo %time%    Create AVS File
echo ===============================================================================
echo %date% %time% [%NAME%] avisynth:%AVS% >> %logfile%

echo LoadPlugin("%AVISYNTH_PLUGIN%Convolution3DYV12.dll") > "%AVS%"
echo AviSource(%SRC%, true, pixel_type = YV12) >>  "%AVS%"
echo Convolution3D(preset="movieHQ") >> "%AVS%"
echo return last >> "%AVS%"

goto :EOF


:enc_aac
echo ===============================================================================
echo %time%    AVS2WAV and NeroAACenc
echo ===============================================================================
echo %date% %time% [%NAME%] neroaacenc:%AVS% to %AAC% >> %logfile%

%AVS2WAV_CMD% %AVS% - | %AACENC_CMD% -cbr 128000 -lc -if - -of %AAC%

goto :EOF


:enc_x264_vbr
if exist %LOG% del %LOG%

echo ===============================================================================
echo %time%    x264 VBR encoding
echo ===============================================================================
echo %date% %time% [%NAME%] x264vbr:%H264% >> %logfile%

%X264_CMD% --stats %LOG% %VBR% -o %H264% %AVS% 

goto :EOF


:mux_mp4box
echo ===============================================================================
echo %time%    MP4
echo ===============================================================================
echo %date% %time% [%NAME%] mp4box:%MP4%(video:%H264%,audio:%AAC%) >> %logfile%

%MP4BOX_CMD% -new %MP4% -add %H264% -add %AAC%

goto :EOF


:end_label
echo ===============================================================================
echo %time%    End [%SRC%]
echo ===============================================================================
echo %date% %time% [%NAME%] end >> %logfile%

move /y %MP4% %DSTDIR% && echo %MP4% を %DSTDIR% に移動しました。

goto :EOF


:error
echo ===============================================================================
echo %time%    ERROR : %error_message%
echo ===============================================================================
echo %date% %time% [%NAME%] ERROR:%error_message% >> %logfile%


:end
pause
exit /b

2.AVI(.avi)
①MP4BOXで映像(H264)を分離
②MP4BOXで音声(MP3lame)を分離
③LAMEで音声をWAVに変換
④NeroAACencで音声をWAVからAACに変換
⑤MP4BOXで映像(H264)と音声(AAC)を合成

avi2mp4.batファイル

@echo off
rem ########################################################################
rem avi2mp4 
rem Ver1.0 2011/04/19
rem ########################################################################
rem filepath
set WORK=D:exportsavi2mp4
set logfile=D:log%~n0.log
set DSTDIR=D:exports

rem program path
set MP3LAM_CMD="D:toolsMeGUI_1911_x86_WithoutInstallertoolslamelame.exe"
set AACENC_CMD="D:toolsNeroDigitalAudiowin32neroAacEnc.exe"
set MP4BOX_CMD="D:toolsMeGUI_1911_x86_WithoutInstallertoolsmp4boxMP4Box.exe"


rem file check
if not exist %WORK% (
 set error_message=作業用ディレクトリなし
 goto error
)


:target

cd /d %WORK%

rem parameter check
if "%~1"=="" (
 set error_message=入力ファイルなし
 goto error
)

if /i "%~x1" neq ".avi" (
  set error_message=拡張子:"%~x1" には対応していません。
  goto error
)


set NAME=%~n1
set NAME=%NAME: =_%

if not exist "%NAME%" mkdir "%NAME%"
cd "%NAME%"

rem variables
set SRC=%1
set LOG="%NAME%.log"
set AAC="%NAME%.aac"
set WAV="%NAME%.wav"
set MP4="%NAME%.mp4"
set H264="%NAME%.h264"
set AVI="%NAME%.avi"
set MP3="%NAME%.mp3"
set SRC_DIR=%~d1%~p1

rem call
call :start_label
call :ext_video
call :ext_audio
call :enc_mp3lame2aac
call :mux_mp4box
call :end_label

rem next file
shift /1
if "%~1"=="" goto end
goto target


rem start
:start_label
echo ===============================================================================
echo %time%    Start [%NAME%]
echo ===============================================================================
echo %date% %time% [%NAME%] start >> %logfile%

goto :EOF


:ext_video
echo ===============================================================================
echo %time%    MP4 Extract
echo ===============================================================================
echo %date% %time% [%NAME%] mp4 >> %logfile%

%MP4BOX_CMD% -aviraw video %SRC%
move %SRC_DIR%%NAME%_video.h264 %H264%

goto :EOF


:ext_audio
echo ===============================================================================
echo %time%    MP4 Extract
echo ===============================================================================
echo %date% %time% [%NAME%] mp4 >> %logfile%

%MP4BOX_CMD% -aviraw audio %SRC%
move %SRC_DIR%%NAME%_audio.mp3 %MP3%

goto :EOF


:enc_mp3lame2aac
echo ===============================================================================
echo %time%    Lame and NeroAACenc
echo ===============================================================================
echo %date% %time% [%NAME%] MP3Lame2AAC >> %logfile%

%MP3LAM_CMD% --decode %MP3% %WAV%
%AACENC_CMD% -cbr 128000 -lc -if %WAV% -of %AAC%

goto :EOF



:mux_mp4box
echo ===============================================================================
echo %time%    MP4
echo ===============================================================================
echo %date% %time% [%NAME%] mp4 >> %logfile%

%MP4BOX_CMD% -new %MP4% -add %H264% -add %AAC%

goto :EOF

:end_label
echo ===============================================================================
echo %time%    End [%NAME%]
echo ===============================================================================
echo %date% %time% [%NAME%] end >> %logfile%

move /y %MP4% %DSTDIR%

goto :EOF


rem error
:error
echo ===============================================================================
echo %time%    ERROR : %error_message%
echo ===============================================================================
echo %date% %time% [%NAME%] ERROR:%error_message% >> %logfile%


rem end
:end
pause
exit /b

3.Matroska(.mkv)
①mkvextractで映像(H264)と音声(5.1ch AC3)を分離
②MP4BOXで映像(H264)と音声(5.1ch AC3)を合成

mkv2mp4.batファイル

@echo off
rem ########################################################################
rem mkv2mp4 
rem Ver1.0 2011/04/19
rem ########################################################################
rem filepath
set WORK=D:exportsmkv2mp4
set logfile=D:log%~n0.log
set DSTDIR=D:exports

rem program path
set MP4BOX_CMD="D:toolsMeGUI_1911_x86_WithoutInstallertoolsmp4boxMP4Box.exe"
set MKVEXT_CMD="D:toolsMeGUI_1911_x86_WithoutInstallertoolsmkvmergemkvextract.exe"


rem file check
if not exist %WORK% (
 set error_message=作業用ディレクトリなし
 goto error
)


:target

cd /d %WORK%

rem parameter check
if "%~1"=="" (
 set error_message=入力ファイルなし
 goto error
)

if /i "%~x1" neq ".mkv" (
  set error_message=拡張子:"%~x1" には対応していません。
  goto error
)


set NAME=%~n1
set NAME=%NAME: =_%

if not exist "%NAME%" mkdir "%NAME%"
cd "%NAME%"

rem variables
set SRC=%1
set LOG="%NAME%.log"
set AC3="%NAME%.ac3"
set WAV="%NAME%.wav"
set MP4="%NAME%.mp4"
set MKV="%NAME%.mkv"
set H264="%NAME%.h264"


rem call
call :start_label
call :mkv_demux
call :mp4box_mux
call :end_label

rem next file
shift /1
if "%~1"=="" goto end
goto target


rem start
:start_label
echo ===============================================================================
echo %time%    Start [%NAME%]
echo ===============================================================================
echo %date% %time% [%NAME%] start >> %logfile%

goto :EOF


:mkv_demux
echo ===============================================================================
echo %time%    MKV Extract
echo ===============================================================================
echo %date% %time% [%NAME%] mkvextract >> %logfile%

%MKVEXT_CMD% --ui-language ja tracks %SRC% 1:%H264% 2:%AC3%

goto :EOF


rem mux
:mp4box_mux
echo ===============================================================================
echo %time%    MP4
echo ===============================================================================
echo %date% %time% [%NAME%] mp4 >> %logfile%

%MP4BOX_CMD% -new %MP4% -add %H264% -add %AC3%

goto :EOF

:end_label
echo ===============================================================================
echo %time%    End [%NAME%]
echo ===============================================================================
echo %date% %time% [%NAME%] end >> %logfile%

move /y %MP4% %DSTDIR%

goto :EOF


rem error
:error
echo ===============================================================================
echo %time%    ERROR : %error_message%
echo ===============================================================================
echo %date% %time% [%NAME%] ERROR:%error_message% >> %logfile%


rem end
:end
pause
exit /b

4.DVR-MS(.dvr-ms)
①comskipでCMサーチしdvrcutバッチファイルを生成
②dvrcutバッチでCMカットしたdvr-msを作成
③映像音声読み込み用のAVS生成
④AVS2WAVで音声をWAVに変換
⑤neroaacencで音声をAACに変換
⑥x264cliで映像をエンコード
⑦MP4BOXで映像(H264)と音声(AAC)を合成

dvrms2mp4.batファイル

@echo off
rem ########################################################################
rem dvrms2mp4 
rem Ver1.0 2011/04/19
rem ########################################################################
rem filepath
set WORK=D:exports%~n0
set logfile=%~n0.log
set DSTDIR=D:exports

rem program path
set CMSKIP_CMD="D:toolscomskip80_042comskip.exe"
set AVS2WAV_CMD="D:toolsavs2wavavs2wav.exe"
set AACENC_CMD="D:toolsNeroDigitalAudiowin32neroAacEnc.exe"
set X264_CMD="D:toolsMeGUI_1911_x86_WithoutInstallertoolsx264x264.exe"
set MP4BOX_CMD="D:toolsMeGUI_1911_x86_WithoutInstallertoolsmp4boxMP4Box.exe"
set AVISYNTH_PLUGIN="D:toolsMeGUI_1911_x86_WithoutInstallertoolsavisynth_plugin"


rem x264 option
set VBR=--crf 22 --level 5.1 --sar 1:1 --rc-lookahead 60 --aq-mode 0 --psy-rd 0.5:0 --qpmin 1 --qpstep 16 --vbv-bufsize 50000 --vbv-maxrate 50000 --scenecut 54 --min-keyint 1 --keyint 300 --8x8dct --partitions "p8x8,b8x8,i8x8,i4x4" --b-adapt 2 --bframes 3 --b-pyramid strict --ref 5 --mixed-refs --direct "auto" --me "umh" --subme 5 --merange 32 --threads "auto" --trellis 2 --deblock -2:-2 --cqm "flat" --no-fast-pskip --no-dct-decimate --fullrange on


rem file check
if not exist %WORK% (
 mkdir %WORK% && echo %WORK%を作成しました。
)


:target

cd /d %WORK%

rem parameter check
if "%~1"=="" (
 set error_message=入力ファイルなし
 goto error
)

if /i "%~x1" neq ".dvr-ms" (
  set error_message=拡張子:"%~x1" には対応していません。
  goto error
)

set SRC=%1
set SRC_DIR=%~d1%~p1
set NAME=%~n1
set NAME=%NAME: =_%

if not exist "%NAME%" mkdir "%NAME%"
cd "%NAME%"
move /y "%SRC%" "%cd%" && echo %SRC% を作業ディレクトリに移動しました。

rem variables filename
set LOG="%NAME%.log"
set AAC="%NAME%.aac"
set WAV="%NAME%.wav"
set MP4="%NAME%.mp4"
set H264="%NAME%.h264"
set AVI="%NAME%.avi"
set MP3="%NAME%.mp3"
set MPEG="%NAME%.mpg"
set ASF="%NAME%.dvr-ms"
set AVS="%NAME%.avs"


rem call
call :start_label
call :det_commercial
call :cut_commercial
call :crt_avs
call :enc_aac
call :enc_x264_vbr
call :mux_mp4box
call :end_label

rem next file
shift /1
if "%~1"=="" goto end
goto target


rem start
:start_label
echo ===============================================================================
echo %time%    Start [%SRC%]
echo ===============================================================================
echo %date% %time% [%NAME%] start >> %logfile%

goto :EOF


:det_commercial
echo ===============================================================================
echo %time%    COMSKIP commercial detect
echo ===============================================================================
echo %date% %time% [%NAME%] comskip:%SRC% >> %logfile%


%CMSKIP_CMD% "%ASF%"


goto :EOF


:cut_commercial
echo ===============================================================================
echo %time%    DvrCut commercial cutting
echo ===============================================================================
echo %date% %time% [%NAME%] dvrcut:%NAME%.dvr-ms to %NAME%_clean.dvr-ms >> %logfile%

call %NAME%_dvrcut.bat
move %ASF% %SRC% && echo %ASF%を%SRC%に移動しました。
rename %NAME%_clean.dvr-ms %ASF% && echo %NAME%_clean.dvr-msを%ASF%にリネームしました。


goto :EOF


:ext_wav
echo ===============================================================================
echo %time%    MPlayer wav Extract
echo ===============================================================================
echo %date% %time% [%NAME%] mplayer:%NAME%_clean.dvr-ms to %WAV%  >> %logfile%

rem NTSC
%MPLAYER_CMD% "%ASF%" -ao pcm_file="%WAV%" -vc dummy -aid 1 -vo null


goto :EOF


:enc_wav2aac
echo ===============================================================================
echo %time%    NeroAACenc
echo ===============================================================================
echo %date% %time% [%NAME%] neroaacenc:%WAV% to %AAC% >> %logfile%

%AACENC_CMD% -cbr 128000 -lc -if %WAV% -of %AAC%

goto :EOF


:crt_avs
echo ===============================================================================
echo %time%    Create AVS File
echo ===============================================================================
echo %date% %time% [%NAME%] avisynth:%AVS% >> %logfile%

echo video=DirectShowSource(%ASF%, audio=false, convertfps=true, fps=29.970).AssumeFPS(30000,1001) > "%AVS%"
echo audio=DirectShowSource(%ASF%, video=false,audio=true,convertfps=true, fps=29.970) >> "%AVS%"
echo audio = Normalize(audio, 0.40) >> "%AVS%"
echo AudioDub(video,audio) >> "%AVS%"
echo #deinterlace >> "%AVS%"
echo LoadPlugin("D:toolsMeGUI_1911_x86_WithoutInstallertoolsavisynth_pluginTomsMoComp.dll") >> %AVS%
echo TomsMoComp(1,5,1) >> "%AVS%"
echo ConvertToYV12() >> "%AVS%"
echo #denoise >> "%AVS%"
echo return last >> "%AVS%"

goto :EOF


:enc_aac
echo ===============================================================================
echo %time%    AVS2WAV and NeroAACenc
echo ===============================================================================
echo %date% %time% [%NAME%] neroaacenc:%AVS% to %AAC% >> %logfile%

%AVS2WAV_CMD% %AVS% - | %AACENC_CMD% -cbr 128000 -lc -if - -of %AAC%

goto :EOF


:enc_x264_vbr
if exist %LOG% del %LOG%

echo ===============================================================================
echo %time%    x264 VBR encoding
echo ===============================================================================
echo %date% %time% [%NAME%] x264vbr:%H264% >> %logfile%

%X264_CMD% --stats %LOG% %VBR% -o %H264% %AVS% 

goto :EOF


:mux_mp4box
echo ===============================================================================
echo %time%    MP4
echo ===============================================================================
echo %date% %time% [%NAME%] mp4box:%MP4%(video:%H264%,audio:%AAC%) >> %logfile%

%MP4BOX_CMD% -new %MP4% -add %H264% -add %AAC%

goto :EOF


:end_label
echo ===============================================================================
echo %time%    End [%SRC%]
echo ===============================================================================
echo %date% %time% [%NAME%] end >> %logfile%

set MP4="%MP4:_= %"
move /y %MP4% %DSTDIR%

goto :EOF


:error
echo ===============================================================================
echo %time%    ERROR : %error_message%
echo ===============================================================================
echo %date% %time% [%NAME%] ERROR:%error_message% >> %logfile%


:end
pause
exit /b

以上、それぞれの入力フォーマットにあわせて別々にバッチを用意しました。
入力フォーマット(映像コーデック、音声コーデック含む)を限定したプログラム構成ですので、汎用性はありません。
このまま使うと予期しないことが起こる可能性がありますので、何かの参考程度にしてください。
※dvrms2mp4.batのCM検知とカット部分では入力ファイル自体を移動しまた戻したりを行っていますので注意が必要です。
※ファイル名に半角スペースが含まれていると半角アンダーバーに置換されます。
※パス名やファイル名にカンマやセミコロンなどを使用している場合には正常に動作しません。

それぞれのプログラムで重複している箇所が多々ありますので、現在は1つのバッチにしてあります。
MediaInfoのCLI版を使って入力ファイルの判定をすれば、それにあわせて工程を切り替えできるので汎用性は向上すると思います。

CM自動カット

CMカットにはcomskip+dvrcutを使用しています。
comskipはcommercial skipで、公式サイトはhttp://www.kaashoek.com/comskip/だと思います。
このサイトのダウンロードからcomskip本体とcomskipで検出したCM部分の情報を使って実際にカットをするためのプログラムが一部ダウンロード可能です。
comskipの最新バージョンは80_42(1.4.6.0)です。
※古いバージョンの場合、comskip実行途中から音声コーデックが不明といったメッセージが多数表示されますが、あるバージョンから改修されています。
※dvrcutはdvr-msのメタデータを削除してしまいます。CMカット後のdvr-msは、すでにタイトルなどの情報が削除されています。削除しないようにする設定があるのかどうかも不明です。

comskipの設定は、comskip.iniで行います。別の設定ファイルを使用する場合は、オプションで指定可能です。
実際にカットする方法は4通りほど紹介されていますが、この中のMPEGファイルから直接カットするdvrcutを使用しています。
このdvrcutの実行用バッチファイルはcomskipの実行時に生成できるように設定が可能になっています。
設定は先ほどのcomskip.ini内で行い、それ以外にもedl,vcf,avisynthスクリプトなど様々な形式に対応したファイルを生成可能です。
dvrcutのパスを変えたい場合は、comskip.iniの最後から2行目にその設定箇所があるので、それを変更すればOKです。
以下は、私が使用したcomskip.iniです。基本的にはMCEbuddyの設定と同じです。

detect_method=255			;1=black frame, 2=logo, 4=scene change, 8=fuzzy logic, 16=closed captions, 32=aspect ration, 64=silence, 128=cutscenes, 255=all
validate_silence=1			; Default, set to 0 to force using this clues if selected above.
validate_uniform=1			; Default, set to 0 to force using this clues (like pure white frames) if blackframe is selected above.
validate_scenechange=1		; Default, set to 0 to force using this clues if selected above.
verbose=0				;show a lot of extra info, level 5 is also OK, set to 0 to disable
max_brightness=60      			;frame not black if any pixels checked are greater than this (scale 0 to 255)
test_brightness=40      		;frame not pure black if any pixels checked are greater than this, will check average brightness (scale 0 to 255)
max_avg_brightness=25			;maximum average brightness for a dim frame to be considered black (scale 0 to 255) 0 means autosetting
max_commercialbreak=600 		;maximum length in seconds to consider a segment a commercial break
min_commercialbreak=25			;minimum length in seconds to consider a segment a commercial break
max_commercial_size=125			;maximum time in seconds for a single commercial or multiple commercials if no breaks in between
min_commercial_size=4   		;mimimum time in seconds for a single commercial
min_show_segment_length=125 	; any segment longer than this will be scored towards show.
non_uniformity=500			; Set to 0 to disable cutpoints based on uniform frames
max_volume=500				; any frame with sound volume larger than this will not be regarded as black frame
min_silence=12				; Any deep silence longer than this amount  of frames is a possible cutpoint
ticker_tape=0				; Amount of pixels from bottom to ignore in all processing 
logo_at_bottom=0			; Set to 1 to search only for logo at the lower half of the video, do not combine with subtitle setting
punish=28					; Compare to average for sum of 1=brightness, 2=uniform 4=volume, 8=silence, 16=schange, set to 0 to disable
punish_threshold=1.3		; Multiply when amount is above average * punish_threshold
punish_modifier=2			; When above average * threshold multiply score by this value
intelligent_brightness=0 		; Set to 1 to use a USA specific algorithm to tune some of the settings, not adviced outside the USA
logo_percentile=0.92			; if more then this amount of logo is found then logo detection will be disabled
logo_threshold=0.75
punish_no_logo=1			; Default, set to 0 to avoid show segments without logo to be scored towards commercial
aggressive_logo_rejection=0
connect_blocks_with_logo=1		; set to 1 if you want successive blocks with logo on the transition to be regarded as connected, set to 0 to disable
logo_filter=4               ; set the size of the filter to apply to bad logo detection, 4 seems to be a good value.
cut_on_ar_change=1			; set to 1 if you want to cut also on aspect ratio changes when logo is present, set to 2 to force cuts on aspect ratio changes. set to 0 to disable
delete_show_after_last_commercial=1	; set to 1 if you want to delete the last block if its a show and after a commercial
delete_show_before_or_after_current=1	; set to 1 if you want to delete the previous and the next show in the recording, this can lead to the deletion of trailers of next show
delete_block_after_commercial=0	;set to max size of block in seconds to be discarded, set to 0 to disable 
remove_before=0				; amount of seconds of show to be removed before ALL commercials
remove_after=0				; amount of seconds of show to be removed after ALL commercials
shrink_logo=5				; Reduce the duration of the logo with this amount of seconds
after_logo=0		; set to number of seconds after logo disappears comskip should start to search for silence to insert an additional cutpoint
padding=0
ms_audio_delay=5
volume_slip=20
skip_b_frames=0				; Set to 1 to force Comskip to skip frames for higher processing speed.
max_repair_size=200			; Will repair maximum 200 missing MPEG frames in the timeline, set to 0 to disable repairing for players that don't use PTS. 
disable_heuristics=4		bit pattern for disabling heuristics, adding 1 disables heristics 1, adding 2 disables heristics 2, adding 4 disables heristics 3, 255  disables all heuristics 
delete_logo_file=0			; set to 1 if you want comskip to tidy up after finishing
output_framearray=0			; create a big excel file for detailed analysis, set to 0 to disable
output_data=0				; create a dump of the user data channel, used for CC and XDS (such as V-Chip info). Can be use together with output_framearray to remote debug CC decoding
output_videoredo=0
output_womble=0
output_mls=0			; set to 1 if you want MPeg Video Wizard bookmark file output
output_cuttermaran=0
output_mpeg2schnitt=0
output_mpgtx=0
output_dvrcut=1
output_zoomplayer_chapter=0
output_zoomplayer_cutlist=0
output_edl=0
output_edlx=0
output_vcf=0
output_bsplayer=0
output_btv=0				; set to 1 if you want Beyond TV chapter cutlist output
output_projectx=0			; set to 1 if you want ProjectX cutlist output (Xcl)
output_avisynth=0
output_vdr=0				; set to 1 if you want XBMC to skipping commercials
output_demux=0				; set to 1 if you want comskip to demux the mpeg file while scanning
sage_framenumber_bug=0
sage_minute_bug=0
live_tv=0					; set to 1 if you use parallelprocessing and need the output while recording
live_tv_retries=4			; change to 16 when using live_tv in BTV, used for mpeg PS and TS
dvrms_live_tv_retries=300			; only used for dvr_ms
standoff=0					; change to 8000000 when using live_tv in BTV
cuttermaran_options="cut="true" unattended="true" muxResult="false" snapToCutPoints="true" closeApp="true""
mpeg2schnitt_options="mpeg2schnitt.exe /S /E /R25  /Z %2 %1"
avisynth_options="LoadPlugin("MPEG2Dec3.dll") nMPEG2Source("%s")n"
dvrcut_options="D:\tools\comskip80_042\dvrcut "%s.dvr-ms" "%s_clean.dvr-ms" "
windowtitle="Comskip - %s"

※avisynth_optionsの箇所は変更しても出力に反映されませんでした。

CMカットの精度は、もともとCMカットは自動でできればOK程度の期待しかしてませんので、十分満足しています。
精度をあげるには、放送局ごとや番組ごとに設定をチューニングすればよさそうですが、ファイルがMPEGであるのでGOP単位でのカットになると思うので、どうしてもCMが残ったり本編が余分に切り取られたりはあると思います。細かいところを気にする人は手動でカットするソフトを使用するのがベストでしょう。

このcomskip自体は、PVR(Personal Video Recoder)用プログラムのCMカットに利用されているようです。
PVRというとWindows Media Centerが有名です。PVRで番組を録画したのちの後作業を自動化するためのプログラムを集めたものがいろいろとあり、MCEbuddyやDVRMSToolなどがDVR-MSにも対応しています。これらのソフトは、後作業を考慮して自動化するためのプログラムの詰め合わせと思えばよいと思います。
特に、あるフォルダを監視してそこにファイルが増えたのをトリガーにある工程を実行する。さらには時間帯も考慮してその工程を実行すかどうかの判断条件にするといったところまでできますので、朝起きたら昨日録画した番組(アナログ放送)をiPodにいれて持ち出すといったこともできるようになります。
現在ではデジタル放送用にMPEG-TSにも対応しているようですが、特別なことをしていない限りは著作権保護(DRM)のある日本では使用できません。

DVRMSToolはかなりシステムチックな感じで環境を整えるのが困難そうに思えました。それに比べMCEbuddyのほうがシンプルな印象です。
MCEbuddyは現在2.xのベータ版が配布されていますが、一部機能のバグ出し用だと思います。2.xになるとエンコードのフロントエンドはHandbrakeを使用するっぽいです。

私の場合は、過去に録画したアナログ放送の番組を処理したいだけなので、どちらもプロセスが常駐する点でイマイチに思えました。
そこで、自分の好みに合わせて上記のような詰みあわせを用意しました。
mplayer(mencoder含む)やffmpegを使えばもっと単純にできたのかと思いますが、趣味ではないので今までどおりMeGUIの環境をベースに構築しました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大阪府門真市に生まれ、高校卒業まで京都府福知山市で育ち、大学は工学部電子工学科を卒業。半導体設計会社に勤務ののちインフラエンジニアとして監視基盤の運用設計業務に就く。現在は都内の施設に勤務。横浜在住。人の役に立てることができればいいなと日々思っています。

目次