batファイルを使用して連番画像から特定規則で画像を抽出する

目的

AviUtlにて,動画を連番BMP出力(または連番PNG出力)して,それらの連番画像から特定のフレームを偶数番,奇数番など規則的に取り出したい.ここでは,3個飛ばしの例を記載する.

連番画像例(_00000という5ケタの連番が付与されている)

おそらく方法はいくらかあるが,Windowsにて追加でソフトのインストールが必要なく実施できるバッチファイル(*.bat)にて実現する方法を紹介する.

名称 規格 製造会社 備考
オペレーティングシステム Windows 10 Pro 64ビット,22H2 マイクロソフト

結論

以下をbatファイルとして連番画像と同一フォルダーに保存して実行すると,tempフォルダー内に抽出された画像がコピーされる*1

@echo off

setlocal enabledelayedexpansion

rem 連番数字前までのファイル名
set filename_prefix=6_

rem 抽出先のディレクトリー指定
set pickup_dst=temp

rem 対象とする連番出力画像の開始番号
set idx_start=0

rem 対象とする連番出力画像の番号増分
rem ☞ここでは3のため00000,00003,00006,……となる
set idx_delta=3

rem 対象とする連番出力画像の終了番号
set idx_end=182

mkdir %pickup_dst%
for /l %%n in (%idx_start%,%idx_delta%,%idx_end%) do (
  rem 5ケタの場合は,変数前に0を4個分記載する
  set num=0000%%n

  rem 5ケタの場合は,5を指定する
  set num=!num:~-5,5!

  set filename=!filename_prefix!!num!.png
  copy !filename! !pickup_dst!\
)

endlocal

3ごとに連番画像を抽出

参考サイト

  1. .bat(バッチファイル)で数値の任意の桁を0で埋める方法 | 技術的特異点(2024/02/10現在)
  2. 環境遅延変数の原因と2つのポイント #コマンドプロンプト - Qiita(2024/02/10現在)

*1:書式の詳細は,参考サイトに記載したサイト参照