FFmpeg とは?
FFmpeg は、マルチメディアデータの処理に特化したオープンソースのソフトウェアフレームワークで、音声、動画、画像などの変換、編集、ストリーミング、エンコーディングなど、さまざまな機能を提供されています。編集をガチしないでいい人には、簡単に動画がつくれていいと思います。
FFmpeg は多くのコーデックとフォーマットに対応しており、例えば MP4 や MKV といった動画形式の変換、MP3 や AAC などの音声形式の変換が可能です。さらに、解像度の変更、音量の調整、字幕の追加など、映像編集やエフェクト適用もコマンドラインから行えます。
FFmpeg を使用して、複数の png 画像から mp4 動画を作る機会があったので、PowerShellスクリプトを残しておきます。
PowerShell スクリプト
imgs2mov.ps1
# ディレクトリのパスを指定
$directoryImage = "D:\PowerShell\img\*.png"
$directoryMovie = "D:\PowerShell\mov\"
# ディレクトリ内の png ファイルを取得し、変数に代入
$directoryItems = Get-ChildItem -Path $directoryImage | Sort-Object Name
# 画像ファイルから動画を作成
$outputList = @()
foreach ($file in $directoryItems) {
$mp4filename = $file.BaseName + ".mp4"
$output = $directoryMovie + $mp4filename
$outputList += $output
$fullpath = $file.FullName
ffmpeg.exe -framerate 5 -i $fullpath -vcodec libx264 -pix_fmt yuv420p -crf 20 -r 30 $output -y
}
# ffmpegで指定する動画リストを作成
$mp4ListupFile = $directoryMovie + "list.txt"
$outputList | ForEach-Object {"file '$_'"} | Out-File -FilePath $mp4ListupFile -Encoding ascii
# 個々の動画をつなげて1つの動画にする
$output = $directoryMovie + "output.mp4"
ffmpeg.exe -f concat -safe 0 -i $mp4ListupFile -c copy $output -y
-framerate
オプションの値を変更することで、画像あたりの動画の長さを変更できます。
framerate | 動画の長さ |
---|---|
10 | 0.1s |
5 | 0.2s |
2 | 0.5s |
1 | 1.0s |
0.5 | 2.0s |
0.25 | 4.0s |
0.2 | 5.0s |
0.1 | 10.0s |
動画作成例
スマホのスクリーンショットから作成したデモ動画です。(200万~800万)
さいごに
今回は、単純に動画をつなげましたが、ffmpeg には、フェードイン・フェードアウトといったように動画間にエフェクトを付けることができます。やり方はまた投稿しようと思います。
Xfade – FFmpeg
https://trac.ffmpeg.org/wiki/Xfade