2014年4月4日金曜日

Ffmぺsync ver.1 「検索アイテムが大量にあった場合の処理キャンセル」を入れてみた

FfmぺsyncVer.1をffmpeg.exeを手軽に使うためのファイル同期風フロントエンドのVBスクリプト本編

 以前から改善しないといかんと思っていた「検索アイテムが大量にあった場合の処理キャンセル」を入れてみました。
 事前処理中とか単に一覧出力処理の最中に、ポップアップする"Internet Explorer"を閉じると、処理が一段落した後に中止確認メッセージが出て、処理を中断できます。
 "Ffmpeg.exe"が実行中の場合は、処理が終了後に中止確認メッセージが出ます。

 実行中の"Ffmpeg.exe"を「×閉じる」した場合は、変換中だったファイルは途中終了して中止確認メッセージが出ます。

 この修正でVersionを1.1にしました。

 ただ、この仕様は"Internet Explorer"が使えない状態だった場合「使えない」機能なんですよね。 また"Internet Explorer"のウィンドを閉じた直後に再実行するタイミングによっては、"Internet Explorer"が無いものとして動いたり、、、ここんとこドーシヨ。

2014年4月3日木曜日

Ffmぺsync ver.1.0 プロシージャ解説4 Ffmpeg.exe実行文の生成

Ffmぺsync ver.1.0  ffmpeg.exeを手軽に使うためのファイル同期風フロントエンドVBスクリプト 本編

 品質と縦横のプロシージャと続いたし、Ffmpeg.exeの実行文を生成する箇所も説明しとこうと思う。
 ffmpesync.vbsの一千行を超えるコードは、全てコノ部分の為にあるとも言える。

ffmpesync.vbsではffmpeg.exe実行文を大きく四つに分けて取り扱っている。
 ①ffmpeg.exeパス ⇒ WScript.Scriptfullnameから取得
 ②元動画ファイルパス ⇒ 引数po1DogaオブジェクトのPathプロパティから取得
 ③出力先ファイルパス ⇒ 引数ps2Doga1より取得
 ④パラメータ(品質・縦横・音声・他) 引数piConvModeより、他は固定パラメータとして補完。

 ④を修正する事でビデオ系のパラメータを変更できる。 ネットに散在している情報を元に試行錯誤してみるのも面白いかもしれない。以下のコードは掲載コードではなく、コメント削除前のコードとなります。

'################################################
'ffmpeg.exe文 作成
'
'IN
' po1Doga ②元動画ファイル オブジェクト
' ps2Doga1 ③出力先動画ファイルパス
' piConvMode 変換モード
'
'Return
' ffmpeg.exe文 環境が整ってなければcNULL
'
Function sRunffmpeExe(po1Doga , ps2Doga1, piConvMode)
Dim sExePath , sffmpeExe , sffmpePSet , sffmpeRun , sffmpeCrf , sffmpeSiz 
Dim sffmpeSet

'実行vbsファイルのパス取得
sExePath = oWSFSO.GetParentFolderName(WScript.Scriptfullname)

'①ffmpeの実行パスファイル取得
sffmpeExe = oWSFSO.BuildPath(sExePath , "ffmpeg.exe")

'品質値取得
sffmpeCrf = sGetConvertCrf(piConvMode)
'縦横値取得
sffmpeSiz = sGetConvertSiz(piConvMode)
'***④他パラメータの修正、追加はここを書き換える
sffmpeSet = " -coder 1 -refs 1 -flags +loop -partitions +parti4x4 -me_method hex -subq 1 -psy 0 -trellis 0 -8x8dct 0 -fast-pskip 1 -bf 3 -b-pyramid 2 -b_strategy 1 -direct-pred 1 -weightp 1 -weightb 1 -g 150 -keyint_min 1 -sc_threshold 40 -mbtree 0 -qcomp 1 "

'音声トラックのコピー処理はMP4のみ許可
If cFFMPEG_MP4 = Lcase(Right(po1Doga.Path , 4)) Then
sffmpeSet = sffmpeSet & " -vsync 2 -acodec copy "
End if

'ffmpe 実行文の生成
'一応、パラメータによる確認を含めておく
If oWSFSO.FileExists(sffmpeExe) and (sffmpeCrf <> cNULL) and (sffmpeSiz <> cNULL) Then
sffmpeRun = cDC & sffmpeExe & cDC & " -i " & cDC & po1Doga.Path & cDC & " -vcodec libx264 -crf " & sffmpeCrf & sGetConvertSizS(sffmpeSiz) & sffmpeSet & " -y " & cDC & ps2Doga1 & cDC
Else
sffmpeRun = cNULL
End if
sRunffmpeExe = sffmpeRun
End Function


'################################################
'サイズパラメータがあったら -s 付加
'
'IN
' psSiz サイズバラメータ
'
'Return
' 設定値があったら-sを前に付ける
'
Function sGetConvertSizS(psSiz)
Dim sSizS
sSizS = psSiz
If Len( Trim( sSizS ) ) > 0 Then
sSizS = " -s " & psSiz
End if
sGetConvertSizS = sSizS
End Function

 'コードはここまで。以下は1ファイル投入時の実行ログ。投入動画から得た情報で各パラメータを決定し、Ffmpeg.exe文を生成して変換処理して、結果の判定まで記録している。

####開始#### #2014/04/03 9:24:42#

VBS実行パス:C:\Users\zeze\Desktop\ffmpesync1.vbs

"「劇場版 BLOOD-C The Last Dark」PVロングバージョン.mp4" は MP4 ビデオ 。mp4 で、動画ファイルです。

0000 名前 「劇場版 BLOOD-C The Last Dark」PVロングバージョン.mp4
0001 サイズ 75.8 MB
0002 項目の種類 MP4 ビデオ
0003 更新日時 2012/06/24 13:33
0004 作成日時 2012/06/24 13:33
0005 アクセス日時 2013/12/28 22:21
0006 属性 AI
0009 認識された種類 ビデオ
0010 所有者 PSO2\zeze
0011 分類 ビデオ
0019 評価 評価なし
0027 長さ 00:03:45
0028 ビット レート ‎149kbps
0029 保護 いいえ
0053 コンピューター PSO2 (このコンピューター)
0155 ファイル名 「劇場版 BLOOD-C The Last Dark」PVロングバージョン.mp4
0173 共有 いいえ
0176 フォルダー名 #アニメいろばら
0177 フォルダーのパス A:\#アニメいろばら
0178 フォルダー #アニメいろばら (A:)
0180 パス A:\#アニメいろばら\「劇場版 BLOOD-C The Last Dark」PVロングバージョン.mp4
0182 種類 MP4 ビデオ
0188 リンクの状態 未解決
0269 共有状態 非共有
0280 ビデオ圧縮 {34363248-0000-0010-8000-00AA00389B71}
0282 データ速度 ‎2674kbps
0283 フレーム高 1080
0284 フレーム率 ‎29 フレーム/秒
0285 フレーム幅 1920
0286 総ビット レート ‎2824kbps

処理(元)パス:A:\#アニメいろばら
出力(先)パス:C:\Users\zeze
処理ログパス:C:\Users\zeze\「劇場版 BLOOD-C The Last Dark」PVロングバージョン.mp4.log

対象ファイル処理数計:1
 1(未)処理ファイル数:1(75.83MB)
 2(済)損壊ファイル数:※事前カウント対象外
 3(済)小大ファイル数:0(0MB)⇒0%(0MB)
 4(済)新旧ファイル数:0(0MB)⇒0%(0MB)
 5(済)処理ファイル数:0(0MB)⇒0%(0MB)
- - - - - - - - - 
処理済(345計)進捗率:0%
対象外ファイル数:0
検索フォルダ数:0
- - - - - - - - - 
形式別カウント(計:1)
.mp4 :1

処理(元)ファイル名:A:\#アニメいろばら\「劇場版 BLOOD-C The Last Dark」PVロングバージョン.mp4
  サイズ:75.83MB
長さ(時間):00:03:45
データ速度:‎2674kbps
フレーム高:1080
フレーム率:‎29 フレーム/秒
フレーム幅:1920
エンコード品質:31 処理開始 ※中止はffmpegを『×閉じる』

No. 状態 (元)*パス/nファイル名 長さ(時間) 幅x高 ビットレート ファイルサイズ 更新日時 (済)パスファイル名 幅x高 ビットレート ファイルサイズ 更新日時 FFMpeg
0000-* A:\#アニメいろばら C:\Users\zeze
0000-1 未34-1280x720○20.47% 「劇場版 BLOOD-C The Last Dark」PVロングバージョン.mp4 00:03:45 1920x1080 ‎2674kbps 75.83MB 2012/06/24 13:33:44 C:\Users\zeze\「劇場版 BLOOD-C The Last Dark」PVロングバージョン.mp4 1280x720 ‎420kbps 15.53MB 2014/04/03 9:25:19
"C:\Users\zeze\Desktop\ffmpeg.exe" -i "A:\#アニメいろばら\「劇場版 BLOOD-C The Last Dark」PVロングバージョン.mp4" -vcodec libx264 -crf 34 -s 1280x720 -coder 1 -refs 1 -flags +loop -partitions +parti4x4 -me_method hex -subq 1 -psy 0 -trellis 0 -8x8dct 0 -fast-pskip 1 -bf 3 -b-pyramid 2 -b_strategy 1 -direct-pred 1 -weightp 1 -weightb 1 -g 150 -keyint_min 1 -sc_threshold 40 -mbtree 0 -qcomp 1  -vsync 2 -acodec copy  -y "C:\Users\zeze\「劇場版 BLOOD-C The Last Dark」PVロングバージョン.mp4"

対象ファイル処理位置:1
 1(未)処理ファイル数:0(0MB)
 2(済)損壊ファイル数:0(0MB)
 3(済)小大ファイル数:0(0MB)⇒0%(0MB)
 4(済)新旧ファイル数:0(0MB)⇒0%(0MB)
 5(済)処理ファイル数:1(75.83MB)⇒20.47%(15.53MB)
- - - - - - - - - 
処理済(345計)進捗率:100%
対象外ファイル数:0
検索フォルダ数:0
- - - - - - - - - 
形式別カウント(計:1)
. :0
.mp4 :1

####終了#### #2014/04/03 9:25:19#

2014年4月2日水曜日

Ffmぺsync ver.1.0 プロシージャ解説3 適用される縦横サイズ値の変更方法

Ffmぺsync ver.1.0  ffmpeg.exeを手軽に使うためのファイル同期風フロントエンドVBスクリプト 本編

 今回はサラっと流しますねー
 エンコード品質入力時に設定する二桁の数字。 二桁目は品質で、一桁目は出力サイズとなっている。 今回は出力サイズ値の設定箇所を説明。

'################################################
'モード変換>>>画面サイズ 標準的なサイズを設定 奇数16:9 偶数4:3
'
'IN
' piMode モード
'
'Return
' サイズ 該当なしは""
'
Function sGetConvertSiz(piMode)
Dim vMode , vSize
vSize = cNULL
vMode = Trim(piMode)
If IsNumeric(vMode) Then
vMode = CLng(vMode) Mod 10
Select Case vMode
Case 0 : vSize = " " 'サイズ変更なし
Case 1 : vSize = "1280x720" '921600
Case 2 : vSize = "960x720"
Case 3 : vSize = "960x540"
Case 4 : vSize = "640x480"
Case 5 : vSize = "854x480"
Case 6 : vSize = "560x420"
Case 7 : vSize = "640x360"
Case 8 : vSize = "480x360"
Case 9 : vSize = "427x240"
End Select
End if
sGetConvertSiz = vSize
End Function

 Case 0~Case 9に対応した値をvSizeに設定する。
 出力時の比率設定はしていないので、ここでの縦横サイズがそのまま出力する縦横サイズとなる。 ここの縦横サイズを変更すれば変更したサイズが出力できると思うが、変更した出力サイズでエンコードが正しくできるかは、やってみないと判らない。

Nvidiaグラボ動画エンコード専用機能のNVENC 実行テスト


【録画人間の末路】下位扱いのGTでもNVENCがで・き・る
で、Nvidiaのグラフィックボードに搭載されている動画エンコード専用機能のNVENCを利用したAviutlプラグイン公開の紹介があり、Avitulは動画の保管エンコードのメインツールでもあるのでどんなものかつかって見ました。

【rigayaの日記兼メモ帳】NVEncを使ってみた

より、サクっと五分で環境作成。

実行環境はGeForceGTX660Ti Core i7-2600k 3.4GHz win7sp1 8GB

↑元ファイル ステータス。6GBでそのままだとHDDの肥しです。
C:\Video\アクエリオンEVOL (16).m2ts
  サイズ:6417.18MB
長さ(時間):00:30:02
データ速度:‎28000kbps
フレーム高:1080
フレーム率:‎29 フレーム/秒
フレーム幅:1920

以下、1~5までは画質的によく見ないとわからない為、実行結果のみ掲載。
1.Aviutl NVENCプラグイン 画質優先エンコード 約45分
C:\Video\アクエリオンEVOL (16)nv.mp4
  サイズ:938.8MB
長さ(時間):00:24:46
データ速度:‎5168kbps
フレーム高:1080
フレーム率:‎23 フレーム/秒
フレーム幅:1920

※低ビットレートは掲載は見合わせます。

以下、比較で掲載。

2.Aviutl 1Pass 品質25 エンコード 約1時間
C:\Video\アクエリオンEVOL (16)1pass25.mp4
  サイズ:452.77MB
長さ(時間):00:24:46
データ速度:‎2458kbps
フレーム高:1080
フレーム率:‎23 フレーム/秒
フレーム幅:1920

3.Aviutl 2Pass高品質保管用エンコード (別PC実行時間) 1時間半
C:\Video\アクエリオンEVOL (16).mp4
  サイズ:265.5MB
長さ(時間):00:24:46
データ速度:‎1401kbps
フレーム高:1080
フレーム率:‎23 フレーム/秒
フレーム幅:1920

4.ffmpesync+ffmpeg.exe 品質25 処理時間 6分弱
C:\Video\アクエリオンEVOL (16).m2tsHD25.mp4
  サイズ:1421.37MB
長さ(時間):00:30:03
データ速度:‎6476kbps
フレーム高:1080
フレーム率:‎29 フレーム/秒
フレーム幅:1920

参考 1280x720で出力
5.ffmpesync+ffmpeg.exe 品質25 処理時間 6分弱
C:\Video\アクエリオンEVOL (16).m2ts25.mp4
  サイズ:547.06MB
長さ(時間):00:30:03
データ速度:‎2408kbps
フレーム高:720
フレーム率:‎29 フレーム/秒
フレーム幅:1280

6.ffmpesync+ffmpeg.exe 品質34(自動設定既定値) 処理時間 6分弱
C:\Video\アクエリオンEVOL (16).m2ts34.mp4
  サイズ:182MB
長さ(時間):00:30:03
データ速度:‎710kbps
フレーム高:720
フレーム率:‎29 フレーム/秒
フレーム幅:1280
↓は 6.ffmpesync+ffmpeg.exe のスマホ用設定。 さすがに画質自慢なスマホやタブで見るとアラが目立つ。 ただビットレートが低く抑えられてるため、ネットワーク経由でのスマホ視聴とかでもコマ落ちやガタツキが発生する箇所が少ない。


2014年4月1日火曜日

Ffmぺsync ver.1.0 ffmpeg.exeでお手軽ご気楽高速エンコード ※セミHD1時間半番組エンコード例

Ffmぺsync ver.1.0  ffmpeg.exeを手軽に使うためのファイル同期風フロントエンドVBスクリプト 本編
 録画したtsファイルをFfmpesync.vbsに投入してエンコードを実行したが、指定したパラメータが気に入らなかったので一旦中止して再度実行したログです。
 一回目に変換出力したファイルを損壊ファイルと判断しています。 ※「長さ(時間)」、「フレーム高」、「フレーム幅」の全ての値の値が取得できれば正常。それ以外は損壊。 

####開始#### #2014/04/01 9:19:12#

VBS実行パス:C:\Users\zeze\Desktop\ffmpesync1貼り付け.vbs

"2014033111000101-[HV]春スペ 劇場版 FAIRY TAIL -鳳凰の巫女-.ts" は MPEG-2 TS ビデオ 。ts で、動画ファイルです。

0000 名前 2014033111000101-[HV]春スペ 劇場版 FAIRY TAIL -鳳凰の巫女-.ts
0001 サイズ 8.21 GB
0002 項目の種類 MPEG-2 TS ビデオ
0003 更新日時 2014/03/31 12:33
0004 作成日時 2014/04/01 8:47
0005 アクセス日時 2014/04/01 8:47
0006 属性 A
0009 認識された種類 ビデオ
0010 所有者 PSO2\zeze
0011 分類 ビデオ
0019 評価 評価なし
0027 長さ 01:33:13
0028 ビット レート ‎253kbps
0053 コンピューター PSO2 (このコンピューター)
0155 ファイル名 2014033111000101-[HV]春スペ 劇場版 FAIRY TAIL -鳳凰の巫女-.ts
0173 共有 いいえ
0176 フォルダー名 DOGA
0177 フォルダーのパス C:\DOGA
0178 フォルダー DOGA (C:)
0180 パス C:\DOGA\2014033111000101-[HV]春スペ 劇場版 FAIRY TAIL -鳳凰の巫女-.ts
0182 種類 MPEG-2 TS ビデオ
0188 リンクの状態 未解決
0269 共有状態 非共有
0280 ビデオ圧縮 {E06D8026-DB46-11CF-B4D1-00805F6CBBEA}
0282 データ速度 ‎20000kbps
0283 フレーム高 1080
0284 フレーム率 ‎29 フレーム/秒
0285 フレーム幅 1440
0286 総ビット レート ‎20253kbps

処理(元)パス:C:\DOGA
出力(先)パス:C:\Users\zeze
処理ログパス:C:\Users\zeze\2014033111000101-[HV]春スペ 劇場版 FAIRY TAIL -鳳凰の巫女-.ts.log

対象ファイル処理数計:1
 1(未)処理ファイル数:0(0MB)
 2(済)損壊ファイル数:※事前カウント対象外
 3(済)小大ファイル数:0(0MB)⇒0%(0MB)
 4(済)新旧ファイル数:0(0MB)⇒0%(0MB)
 5(済)処理ファイル数:1(8408.79MB)⇒0.11%(9.29MB)
- - - - - - - - - 
処理済(345計)進捗率:100%
対象外ファイル数:0
検索フォルダ数:0
- - - - - - - - - 
形式別カウント(計:1)
.ts :1

処理(元)ファイル名:C:\DOGA\2014033111000101-[HV]春スペ 劇場版 FAIRY TAIL -鳳凰の巫女-.ts
  サイズ:8408.79MB
長さ(時間):01:33:13
データ速度:‎20000kbps
フレーム高:1080
フレーム率:‎29 フレーム/秒
フレーム幅:1440

出力(先)ファイル名:C:\Users\zeze\2014033111000101-[HV]春スペ 劇場版 FAIRY TAIL -鳳凰の巫女-.ts.mp4
  サイズ:9.29MB
長さ(時間):
データ速度:
フレーム高:
フレーム率:
フレーム幅:
エンコード品質:21 処理開始 ※中止はffmpegを『×閉じる』

No. 状態 (元)*パス/nファイル名 長さ(時間) 幅x高 ビットレート ファイルサイズ 更新日時 (済)パスファイル名 幅x高 ビットレート ファイルサイズ 更新日時 FFMpeg
0000-* C:\DOGA C:\Users\zeze
0000-1 壊31-1280x720○8.67% 2014033111000101-[HV]春スペ 劇場版 FAIRY TAIL -鳳凰の巫女-.ts 01:33:13 1440x1080 ‎20000kbps 8408.79MB 2014/03/31 12:33:13 C:\Users\zeze\2014033111000101-[HV]春スペ 劇場版 FAIRY TAIL -鳳凰の巫女-.ts.mp4 1280x720 ‎956kbps 728.77MB 2014/04/01 9:35:07 "C:\Users\zeze\Desktop\ffmpeg.exe" -i "C:\DOGA\2014033111000101-[HV]春スペ 劇場版 FAIRY TAIL -鳳凰の巫女-.ts" -vcodec libx264 -crf 31 -s 1280x720 -coder 1 -refs 1 -flags +loop -partitions +parti4x4 -me_method hex -subq 1 -psy 0 -trellis 0 -8x8dct 0 -fast-pskip 1 -bf 3 -b-pyramid 2 -b_strategy 1 -direct-pred 1 -weightp 1 -weightb 1 -g 150 -keyint_min 1 -sc_threshold 40 -mbtree 0 -qcomp 1  -y "C:\Users\zeze\2014033111000101-[HV]春スペ 劇場版 FAIRY TAIL -鳳凰の巫女-.ts.mp4"

対象ファイル処理位置:1
 1(未)処理ファイル数:0(0MB)
 2(済)損壊ファイル数:0(0MB)
 3(済)小大ファイル数:0(0MB)⇒0%(0MB)
 4(済)新旧ファイル数:0(0MB)⇒0%(0MB)
 5(済)処理ファイル数:1(8408.79MB)⇒8.67%(728.77MB)
- - - - - - - - - 
処理済(345計)進捗率:100%
対象外ファイル数:0
検索フォルダ数:0
- - - - - - - - - 
形式別カウント(計:1)
.ts :1

####終了#### #2014/04/01 9:35:08#

てな感じで、

  サイズ:8408.79MB
長さ(時間):01:33:13
データ速度:‎20000kbps
フレーム高:1080
フレーム率:‎29 フレーム/秒
フレーム幅:1440

の動画ファイルが、品質31-1280x720 の約15分のffmpeg変換で

  サイズ:728.77MB
長さ(時間):01:33:14
データ速度:‎956kbps
フレーム高:720
フレーム率:‎29 フレーム/秒
フレーム幅:1280


(8408.79MB)⇒8.67%(728.77MB) の縮小となりました。 小さいは正義ッ!

 ちなみに出力解像度を小さくする事で、処理時間を短く、ファイルサイズは小さくできます。

 スマホとかで録画動画を視聴する場合、オリジナルの8GBをコピーするか、変換して1/10にしてスマホにコピーするか、、、まぁ今はDLanとかサーバにファイル置いて視聴するとかの手もあるんですけどね。 サーバに動画ファイル置いてネットワーク経由で視聴とか手軽でいいんだど、外で見たい場合回線の速度と安定度とかの影響をモロ受けるのでイライラの末見れないとか精神衛生上悪いことしかなくってねーFfmpesync.vbs作るきっかけの一つでもありました。
 特にフォルダ投入で動画を一気に変換する機能は一番のお気に入りだったりします。
 ファイル小さくすると少ないストレージに録画したアニメ一杯入るしねっ。

Ffmぺsync ver.1.0 プロシージャ解説2 適用される品質値の変更方法

Ffmぺsync ver.1.0  ffmpeg.exeを手軽に使うためのファイル同期風フロントエンドVBスクリプト 本編
※この記事のため本編コード更新してあります。

 Ffmpesyncを作った目的は「持ち運びやすいように小さな動画を作ること」であり、画質は「極端に崩れてなければOK」な設定にしている。
 よって1Passの品質も全般的に圧縮寄りになっている。

 初期状態でのエンコード品質例:

 フォルダ投入時の自動判定も基本的にはコレを元にしてるため、自動判定で"+"オプションで画質アップ補正しても「心持ち」な画質の変化しか発生しない。

 「全体的に画質優先寄りにしたい」ってのがあるかもしれないので、ここでは入力した値に対応する品質値の変更方法など残しておく。 修正する箇所はこの部分。

Function sGetConvertCrf(piMode)
Dim vMode , vCrf
vCrf = cNULL
vMode = Trim(piMode)
If IsNumeric(vMode) Then
vMode = CLng(vMode) \ 10
Select Case vMode
Case 0 : vCrf = 25
Case 1 : vCrf = 28
Case 2 : vCrf = 31
Case 3 : vCrf = 34
Case 4 : vCrf = 37
End Select
End if
sGetConvertCrf = vCrf
End Function

Case 0 ~ Case 4 での vCrf への設定値を 10画質寄り変更してみる。 
値が小さくなるほど画質アップです。
Function sGetConvertCrf(piMode)
Dim vMode , vCrf
vCrf = cNULL
vMode = Trim(piMode)
If IsNumeric(vMode) Then
vMode = CLng(vMode) \ 10
Select Case vMode
Case 0 : vCrf = 15
Case 1 : vCrf = 18
Case 2 : vCrf = 21
Case 3 : vCrf = 24
Case 4 : vCrf = 27

End Select
End if
sGetConvertCrf = vCrf
End Function

設定値を10づつ変更した場合の初期状態でのエンコード品質例:
 変更した値が反映されています。 修正前と同じ入力値でも適用される品質が変わります。
 品質値の大元を修正したので、ここを利用している表示や自動判定などの品質を利用している部分全て変更となります。
 もちろん画質がアップすると生成されるファイルサイズが大きくなります。 ただまぁ、品質を上げ過ぎてもファイルサイズばかりでかくなって画質変わらない気が、、、これはFfmpegに渡す別のパラメータの問題だろーなー

 ※実は、品質値の変更がサンプルに反映されるようにしたのが、今回のコード修正でした。

2014年3月30日日曜日

Ffmぺsync ver.1.0 気の迷いが招いた不具合”回避”修正 動画や動画格納フォルダ以外は投入回避でorz

Ffmぺsync ver.1.0  ffmpeg.exeを手軽に使うためのファイル同期風フロントエンドVBスクリプト 本編

 何を考えてたんだろう。今なぜこんな事をしたのか思い出せない、、、、きっと気の迷いに違いない。 気がついたらCドライブをffmpesync.vbsにドロップしていた。
 最初は形式別カウントが景気よくまわっていく様子が見えた。 出てくるファイルは明らかに動画とは関係ないファイルばかり。 これは二文字制限だからそれにヒットする拡張子のファイルみんな通してるんだろーなー。 下手な鉄砲も数打ちゃ当たるってやつ。 Windowsとかフォルダやファイル多いだろうからな。 間口広げてチェック速度を出来るだけ早くした弊害か。それでもキッチリ動作してるのを喜ぶべきか、、、と思いつつみてたら。ガンッ!!

 はいエラー。 原因は形式別カウントの格納インデックスの上限を超えたためですたorz
行位置が大きいのはコメント入ってるオリジナルコードでの実行だからです。ブログにはっつけてるのはコメントをそぎ落として貼り付けてますからまた違ったエラー番号が出ます。
 何にしても、とりあえず格納インデックスの上限を99にして再実行。
 順調に処理は進みソシテッ
 事前カウントが真っ白になり俺の頭も真っ白~。
 ちと考えたけど原因ワカラン。

 とりあえず、Windowsシステムフォルダとか、Program Filesとか、動画格納フォルダでないフォルダは投入しないでください。 何が起こるかわかりませんですだすどすorz

2014年3月29日土曜日

Ffmぺsync ver.1.0 実行タイムと画質比較

Ffmぺsync ver.1.0  ffmpeg.exeを手軽に使うためのファイル同期風フロントエンドVBスクリプト 本編   実行タイムと画質比較 

 Ffmpesyncは自分の動画環境である「PT某録画ファイルを元にAvitul+x264でエンコードした高画質動画」を、「仕分けしてるフォルダごと指定して一気にほどほど画質のコンパクトなファイルに指定先に変換出力するフロントエンドVBS」です。
 自分はPT某からFfmpesyncを使って直接変換したファイルを保管用とする事はないのだが、普通はAviutlでゲツした番組を片っ端からエンコードしてる人はまずいないわけで、それを考えると録画ファイルを直接Ffmpesyncに放り込んで、処理時間とかファイルサイズとか画質とかどうなるか、残しとくのも意味あるかなと、今回の記事を立ち上げて見ました。

 念のため言っておくとFfmpesyncは変換パラメータを渡してるだけなので実際の処理はFFmpeg.exeまかせです。同じ性能のパソコンでも使用するFFmpegのバージョンやビルドしたライブラリとかにより時間に違いが出るかもしれません。

 ちなにみ私はここらへんから環境にあったFfmpegのビルドを利用させてもらっています。
Zeranoe FFmpeg
お気に入りの動画を携帯で見よう
感謝です。


テストに使用した30分の動画TSファイル。 ※プロテクトのかかった動画ファイルは変換できません。
処理(元)ファイル名:2014032907000101-.ts
  サイズ:4390.92MB
長さ(時間):00:30:13
データ速度:‎24000kbps
フレーム高:1080
フレーム率:‎29 フレーム/秒
フレーム幅:1920 


 画質の比較はこのシーンでします。もっとも本当は動画で見てもらうのがいいんだけどね。最近何かとアレだからなー ワンシーン300%拡大です。


Win8.1とWin7sp1それぞれでファイル詳細を取得したらこうなります。※濃い背景部分は出力ログからのコピペです。

プロパティ表示
Win8.1とWin7sp1の詳細項目を並べると気がつくと思いますが、詳細項目位置が「属性」以降で異なっている、、、この状態は同じパソコン内でも発生する場合があります。これは機会があったら述べようと思います。
 このファイルを元に最初から最後まで1280x720へ変換しています。


 まずは参考までに自分が保管用エンコードとして使っているAviutl+拡張x264出力(GUI)Ex
 
 
パラメータは1Pass品質25
処理(元)ファイル名:C:\Video\2014032907000101-妖怪ウォッチ25aviutl.mp4
  サイズ:272.79MB (6.21%)
長さ(時間):00:30:12
データ速度:‎1163kbps
フレーム高:720
フレーム率:‎29 フレーム/秒
フレーム幅:1280

処理時間34:30 (ファイルの作成日時と更新日時の差分より)
 ソースがフルHDだからかなーこんなもんかと思っていたら、そーいや保管用フィルターかけたままだなーと気がついてリサイズと音声最大化以外のフィルターをOFFして実行
  サイズ:259.23MB (5.9%)
データ速度:‎1101kbps
処理時間31:17
 フィルターがなくなった分少し時間短くなったな。うん。 ファイルサイズもぼちぼち。画質もボヤけてはいるが誤魔化しが上手いと思う。


市販品もサンプル取らないトナーと、自分が保管用エンコードでロスレス音声wavを作成するのにつかっている変換ソフトの「YOUTUBEプロファイル1280x720通常」で変換をしてみた、のだが
  サイズ:1385.19MB(31.5%)
データ速度:‎6276kbps
処理時間7:33 変換速度はAviutlの時と比べて1/3切ってるのだがなにぶんファイルサイズと画質のバランスがザンネンすぐる。、、、、プロファイルの選択間違えたかなーなんで製品名は出しません。いやホント 音声変換ではお世話になってるのよ。。。。。。


 ここまでは実行環境の関係からエンコード用PCでしていたのだが、Ffmpesync+FFmpegを品質毎にするにあたって、今時の一般的であろうCPUのパソコン(i7-2600k 3.4GHz Mem8GB SSD)
でエンコードしようと思う。品質はFfmpesync自動設定初期値の34
  サイズ:172.74MB(3.94%)
データ速度:‎663kbps
処理時間5:27

 ファイルサイズと処理時間は文句はほとんどない、、、が画質的にはどーかというと。これは以下エンコードマシンで各品質ごとにしていった結果を見て欲しい。でも拡大した静止画だからアラは目立つんだけど、実際はもっと小さくて動きがあるわけで、結構誤魔化されるんだよね。

 以下はFfmpesync+FFmpegにてサイズ固定で品質のみ変更しておこなった。処理はメインエンコードマシン(i7-3930k 3.2GHz Mem8GB SSD)。 CPU速度は2600kより遅く設定しているのにも関わらず12スレッドの威力かどーか不明だが、処理時間は総じて4:30~5:00と短くなった。

ffmpesyncの指定は 
画質 ←  01,11,21,31,41 → 圧縮率(ファイルサイズ)
な感じで、バランスがいいのが21.品質31-1280x720。ファイルサイズを優先したいなら31.品質34-1280x720。
  低めの品質にして画面サイズを一回り小さくするのもアリ。ファイルサイズが小さくなり画面も落ち着く感じがします。

01.品質25-1280x720 2010kbps 464.32MB(10.57%)
 11.品質28-1280x720 1343kbps 320.13MB(7.29%)
21.品質31-1280x720 931kbps 231.05MB(5.26%)
31.品質34-1280x720 663kbps 173.04MB(3.94%)
41.品質37-1280x720 481kbps 133.65MB(3.04%)

 品質を固定して画面サイズを小さくした全体サンプル。 (自動判定ロジックでは変換元のファイルサイズが先より小さくなった場合、画面サイズを一回り小さく設定するようにしてある)
33.品質34-960x540 443kbps 126.11MB(3.01%)

 このように画面サイズを小さくするとファイルサイズも小さくなり、画質もいくぶん落ち着く、、、気がするかもしれない。 結局慣れとかもあるかもしれないねー。
 後、出力先の画面サイズが小さくなると処理時間も短くなる。1280x720の時と比べて30秒は短くなっている。 ある程度割り切れば気軽に動画を持ち出すことが出来るわけだ。

 それなりのスペックのPCなら一時間番組くらいまでなら少しの時間で変換できるので、自分好みの妥協できる「画質」と「画面サイズ」と「ファイルサイズ」のを見つけてください。

Ffmぺsync ver.1.0 プロシージャ解説1 ファイルの動画形式判定(おおまか版)について

Ffmぺsync ver.1.0  ffmpeg.exeを手軽に使うためのファイル同期風フロントエンドVBスクリプト 本編 プロシージャ解説1 ファイルの高速動画判定についてです。
本編のこの部分を修正した。具体的には動画として判断するファイル形式の追加。
'***2014/3/29 update st
Function bDogaTypeExt( poItem )
Dim sType , bType , sExt , bExt, bExt1
 sType = Lcase(Trim(poItem.Type))
 bType  = Instr(sType , "ビデオ") > 0 or Instr(sType , "ムービー") > 0
 sExt = Lcase(Trim(oWSFSO.GetExtensionName(poItem.path)))
 bExt = Instr(sExt , "av") > 0  or Instr(sExt , "as") > 0 or Instr(sExt , "wm") > 0 or Instr(sExt , "mp") > 0  or Instr(sExt , "mo") > 0  or Instr(sExt , "ts") > 0
 bExt1 = Instr(sExt , "rm") > 0 or Instr(sExt , "fl") > 0 or Instr(sExt , "sw") > 0 or  Instr(sExt , "ps") > 0 or Instr(sExt , "vo") > 0   or Instr(sExt , "og") > 0
 '***↑↑↑↑↑Windowsで非動画判定ファイルは拡張子をここに登録すれば動画判定が真↑↑↑↑
bDogaTypeExt = bType or bExt or bExt1
End Function
'***2014/3/29 update ed

この修正でFfmpegで変換できる動画ファイルの形式を増やす事ができました。
 .avi
 .mpa
 .mp4
 .mpeg
 .mpg
 .mov 
 .asf
 .wmv
 .ps
 .ts
 .m2ts
 .vob
 .ogv
 .flv
 .swf
FFmpeg - ウィキペディア の「2 サポートしているファイル形式」を見ると、多いよねーサポートしてるファイル形式。知らないのもかなりある。
 
 面倒くさがってワイルドカードでファイルを何でも無節操に片っ端からFFmpegに放り込むと、当然サポートしていないファイルは変換エラーとなるわけで、その分処理は遅くなるし不安定にもなる。
 最初は判定に拡張子は利用せずFileObject.Typeのファイル種類に"ビデオ"や"ムービー"な文字列があった場合は拡張子に関係なく動画として判断するようにしていたが、調べると動画として判断してくれるファイルはかな~り少なく、またパソコンにより(OSの違いか?)結構な違いが出た。メインパソコンは動画として判断しても違うパソコンでは動画として判断してくれないとかorz
 素早く確実に判定するにはやっぱりファイル形式で見るのがいいなーとGetExtensionName(FileObject.Path)でファイルの拡張子を取得。 拡張子の中に動画な文字が入っているなら動画と判断するようにした。
 ただしリリース直後のバージョンは最低限自分のパソコンにあった動画形式のファイルの取り込みと変換ができるように調整したにすぎないので、それ以外はFFmpegで変換可能動画ファイルであっても動画ファイルと判断されずに門前払いヨロシクと跳ねられていた。
 仕事も落ち着いて週末になり時間が取れたので、各種形式のファイルを集めてFfmpesyncを通してそれなりに変換できた拡張子の差分を追加したのがついさっき。
 ちなみに用意した中でダメはDV形式だった。音声は出たんだけどねー映像が真っ黒orz

 ちなみに動画判定はエンコード時にもう一つかけていて、それちらはMP4限定で間口をかなり狭く作っています。

※追記
 次のネタに各種変換していたら縦横サイズ自動判定にミスを見つけてコソット修正

2014年3月24日月曜日

BloggerをGoogle Chrome で編集したら、VBスクリプトが勝手に翻訳された件について 他、Ffmぺsync1.vbs今後について

ナンデヤロ~ ナンデヤロ。 まぁIEで編集したら回避できるし まーイイカ。

個人的には、Ffmぺsync1.vbs に現状考えうる全ての機能を盛り込む事が出来ました。
設定のファイルへのセーブ・ロードとかも考えなくも無かったのですが、必要性ないなーと。

「あの処理」までのVBScript (その1) 指定フォルダ内のアイテムのプロパティ情報を抜き出し Echo する。

 から始まった、Ffmpeg.exeのフロントエンドVBスクリプトですが、これ以上新規機能は終わり。後はバグ見つけたら修正とか、Ffmpesync1.vbsの各プロシージャの解説とかでお茶を濁してノンビリいきます。
 最後に、自分動画PC内の録画、エンコの総数をカウントしてみるとコーナッタ。これをFfmぺsyncで変換したらどれだけのサイズというか、さすがにどれくらいの時間かかるのやら。 パソコンやFfmpeg.exeの進化に期待するしかねーな。 というか10TBくらいのパーソナルドライブが出来たらいちいちFfmぺsyncで変換しなくてもいーんだがなw
 
 
 
 今度はJavaスクリプトいってみよーかなー

####開始#### #2014/03/24 6:37:57#
VBS実行パス:C:\Users\zeze\Desktop\ffmpesync1.vbs
"A:\" は 2 です。
ドライブの種類    :2
ファイルシステムの種類:NTFS
ドライブ全体の容量  :3725.9GB
ドライブの空き容量  :285.25GB
処理(元)パス:A:\
出力(先)パス:C:\Users\zeze
処理ログパス:C:\Users\zeze\.log
対象ファイル処理数計:16662
 1(未)処理ファイル数:16661(3522125.67MB)
 2(済)損壊ファイル数:※事前カウント対象外
 3(済)小大ファイル数:0(0MB)⇒0%(0MB)
 4(済)新旧ファイル数:0(0MB)⇒0%(0MB)
 5(済)処理ファイル数:1(234.5MB)⇒8.32%(19.52MB)
- - - - - - - - -
処理済(345計)進捗率:0.01%
対象外ファイル数:158
検索フォルダ数:951
- - - - - - - - -
形式別カウント(計:16662)
.mp4 :15600
.avi :890
.flv :84
.mpeg :80
.mpg :5
.wmv :2
.mpa :1
処理モード選択を選択を『キャンセル』しました。
####終了#### #2014/03/24 6:39:00#
####開始#### #2014/03/24 6:39:48#
VBS実行パス:C:\Users\zeze\Desktop\ffmpesync1.vbs
"B:\" は 2 です。
ドライブの種類    :2
ファイルシステムの種類:NTFS
ドライブ全体の容量  :3725.9GB
ドライブの空き容量  :1694.43GB
処理(元)パス:B:\
出力(先)パス:C:\Users\zeze
処理ログパス:C:\Users\zeze\.log
対象ファイル処理数計:8622
 1(未)処理ファイル数:8622(2079983.29MB)
 2(済)損壊ファイル数:※事前カウント対象外
 3(済)小大ファイル数:0(0MB)⇒0%(0MB)
 4(済)新旧ファイル数:0(0MB)⇒0%(0MB)
 5(済)処理ファイル数:0(0MB)⇒0%(0MB)
- - - - - - - - -
処理済(345計)進捗率:0%
対象外ファイル数:57
検索フォルダ数:271
- - - - - - - - -
形式別カウント(計:8622)
.mp4 :8587
.avi :29
.flv :5
.wmv :1
処理モード選択を選択を『キャンセル』しました。
####終了#### #2014/03/24 6:40:08#
####開始#### #2014/03/24 6:41:01#
VBS実行パス:C:\Users\zeze\Desktop\ffmpesync1.vbs
"S:\" は 2 です。
ドライブの種類    :2
ファイルシステムの種類:NTFS
ドライブ全体の容量  :2794.39GB
ドライブの空き容量  :207.62GB
処理(元)パス:S:\
出力(先)パス:C:\Users\zeze
処理ログパス:C:\Users\zeze\.log
対象ファイル処理数計:2003
 1(未)処理ファイル数:2003(2634750.62MB)
 2(済)損壊ファイル数:※事前カウント対象外
 3(済)小大ファイル数:0(0MB)⇒0%(0MB)
 4(済)新旧ファイル数:0(0MB)⇒0%(0MB)
 5(済)処理ファイル数:0(0MB)⇒0%(0MB)
- - - - - - - - -
処理済(345計)進捗率:0%
対象外ファイル数:1146
検索フォルダ数:162
- - - - - - - - -
形式別カウント(計:2003)
.mp4 :440
.flv :242
.avi :823
.m2ts :318
.ts :180
処理モード選択を選択を『キャンセル』しました。
####終了#### #2014/03/24 6:41:14#