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の環境をベースに構築しました。