しばらくサイトテーマの設定に入ります、基本に戻ってシンプルに。

NVEncC 4.38をバッチファイルで1本ずつエンコードしてみた。&パワーシェルで連続で呼んでみた。

[省エネ設定]は無効にしていませんので、モニタはオフでも動きますが、時間が来るとスリープモードには入ります。切っておきましょう(^◇^;
※スリープから復帰でエンコード作業は再開しますが、環境によっては正しくエンコードできない場合もありますので…

◆NVEncCは空き容量&書き込みのチェックがないみたいなので…
大量にエンコードテストしてたら、空き容量がなくなってファイルが半分しか書き込まれていなかったが、エンコードは完走してた・・・・エラー出ないんだ・・・(^◇^;


空き容量十分確保しておけっていう話ですが、GWのエンコードだけで1TB軽く超えてるんで、Amazonから新しいHDDが届くまできつきつなんです・゚・(ノД`)・゚・

◆1本エンコード用バッチファイル:設定内容は自分で煮詰めたやつで。

D:\Amatsukaze\_rigaya\NVEnc_4.38\NVEncC\x64\NVEncC64.exe -c hevc --bref-mode each --ref 6  --avhw --input-analyze 16 --lookahead 32 --vbrhq 0 --vbr-quality 32 --gop-len 300 --bframes 4 --vpp-unsharp radius=2,weight=0.3,threshold=8 --fullrange --audio-codec ac3 -i "%~1" -o "d:\%~n1.mp4" 2>"d:\%~n1.log"
rem pause

渡されたファイル(フルパス)をDドライブ直下に書き出してます。

h.264フルレンジ→h.265のフルレンジエンコードのサンプル。
h.264ファイルが全体的にぼやけちゃうのでアンシャープしてます…好みで!
音声はAC3になっていますが、まぁ好みで。
–audio-copyもあるけれど、うちのAverMedia「AVT-C878」の録画をTMSR5で分割したゲームソースでは結構止まる。
同じソース内でいろいろなところで止まる(^◇^;
エンコード時間はコピーと大差なかったので、音声エンコードしてます。
メインPCで再生できればなんでもいいので(;^_^A アセアセ・・・

◆バッチファイルに連続でフォルダ内のファイルを渡すパワーシェルのコード
処理対象のフォルダの中身のファイルを一つずつ、前のエンコードが終わったらバッチにファイルに渡していきます。
特にデバッグもエラー処理も入れてません。

# loop [enc_solo_q32.bat]
 Write-Host '◆ 指定フォルダのEncodeを開始します';

# 処理対象のフォルダ
 $targetFolder = 'V:\_NvEnc\Source_mp4\';
 $encodeBatFile = './enc_solo_q32.bat';

function DispNowDateTime{
  $now = Get-Date -format "yyyy/MM/dd HH:mm";
  Write-Host ("`r`n [ " + $now + ' ]');
}

# ----処理開始時間の表示
 DispNowDateTime;

# $targetFolder内のファイル・フォルダのリストを取得する。
 $itemList = Get-ChildItem $targetFolder -File | Sort-Object Name;

#全件数の表示
 $num = ($itemList | Measure-Object).Count
  Write-Host (' ( ' + $num + ' 件) -- 指定フォルダ内のファイル数') ;

#カウント設定
 $enccount = 1;

 foreach($item in $itemList)
 {
    if($item.PSIsContainer)
    {
        # フォルダの場合の処理
        Write-Host ($item.Name + 'はフォルダです。');
    }
    else
    {
        # ファイルの場合の処理
        Write-Host ('( ' + [String]$enccount++ + '/ ' + $num + ') エンコードを開始してProcessの終了を待ちます');
        Write-Host '['$item.Name']';

        $DIRFILE = '"' + $item.FullName + '"';

        #特定のProcessが終了するのを待つ
		$batobj = Start-Process $encodeBatFile ${DIRFILE} -PassThru;
		Wait-Process -Id ($batobj.id);
		Write-Host ("id=$($batobj.id)のProcessが終了しました");

		# ----処理終了時間の表示
		DispNowDateTime;
    }
 }
 Write-Host ' [ Fin ]';
 pause

出来上がったら動画をチェックして完了ですね!

.ps1ファイルを右クリックして、「PowerShellで実行」するとこんな感じ。

タイトルとURLをコピーしました