【PowerShell】FFmpegの動画結合を簡単にやりたい!
はじめに
どうも!最近,昼夜逆転しているロピタルです( 一一)
今回は,人生で初めてPowerShellのコマンドレットを作成した話を書きますね~
目次
経緯
私はwindowsで動画を結合する際,PowerShellでFFmpegを使用しています.
しかし,FFmpegの動画結合って手順が面倒なんですよね~"(-""-)
コマンド実行前に,結合する動画の名前を列挙したテキストファイルを作成する必要があるのです('Д')
その手順が面倒に感じていたので,コマンド一発で結合を行えるようにコマンドレットを作成しました!
コマンドレットとは?
PowerShellで利用できるコマンドのことです( *´艸`)
様々なコマンドレットがデフォルトで用意されていますが,自作の方法もマイクロソフトの公式サイトに書かれております!
自作することで,面倒な一通りの処理を一度に行うコマンドが作成できるわけです( *´艸`)
さあ,自作すんで~!!!!
作成手順
一応,システム開発と同じ流れで書いてみます.やったことは激ショボです(´・ω・`)
要件定義
まず,コマンドで実行できることを定義しましょう。とりあえず実現したかった事として,
- 動画が結合できる
- 事前にテキストファイルを作らなくてよい
といった所ですね!
基本設計
さて,動画の結合に関してはコマンド内部で ffmpeg
を利用して結合を行います.
必要な機能についてはオプションを作成します.
テキストファイルについてはffmpeg
の結合コマンドにファイル入力が必要不可欠でした.そこで,コマンド内部でテキストファイルを生成し,終了時に削除することで利用者は意識しなくて大丈夫にします.
コマンド名は,覚えやすいように concatenate movie を略した catmov
としました(^^)
詳細設計
結合する動画については,オプション指定しない場合は '<動画名><数字>.mp4' という形式の動画名が連番で続くまで全て結合します.
例えば,hoge1.mp4, hoge2.mp4, hoge3.mp4
のような形です.
また,実行中に生成するテキストファイルは,ユーザが意識しないよう隠しファイルとして生成することにします.
そして,コマンドの実行形式は
catmov <動画名> [オプション]
という形式にします.
オプションは,以下の表に示すものを実装します!
オプション名 | 記述例 | 意味 | デフォルト |
---|---|---|---|
out | 出力ファイル名の指定 | -out hoge | <動画名>.<拡張子> |
start | 先頭になる入力動画の添え字 | -start 3 | 1 |
end | 末尾になる入力動画の添え字 | -end 5 | なし(存在するだけ結合) |
sep | 結合子の指定 | -sep - | なし |
ext | 動画の拡張子指定 | -ext avi | mp4 |
copy | 動画を再エンコードしない | -copy | False |
alp | 添え字にアルファベットを使用 | -alp | False(数字) |
コーディング
設計通りにコーディングしていきます!
完成しました!!
なお,テストは行っていません(笑)
コードはこちらに置いているので,暇な方は使ってみてください(^^)/
試用
使ってみます.
ディレクトリにhoge_A.avi, hoge_B.avi, hoge_C.avi, hoge_D.avi, hoge_E.avi
が存在している状態で,hoge_B.avi, hoge_C.avi, hoge_D.avi
を結合した動画を作成します!
> catmov hoge -start B -end D -alp -copy -sep _ -ext avi
このコマンド一発で動画が出力されました( *´艸`)
まとめ
今回は動画結合コマンドレットの作成についてでした!!
もう少し高度なコマンドレットを作成してみたいな~( 一一)