FFmpegで偶に使うオプション【WAV抽出・連番画像・切り出し・チャプター】

清親畫帖. [1] コンピュータ
出典:国立国会図書館「NDLイメージバンク」 (https://rnavi.ndl.go.jp/imagebank/)
FFmpegは、たまにしか使わないので、使った用途とオプションを記録しておきたいと思います。

連番画像ファイルからwebp

ffmpeg -framerate 60 -i 001-1_export%04d.png -c:v libwebp -pix_fmt yuva420p -lossless 1 -loop 0 ..\001-1.webp

PNG形式の画像ファイルを可逆圧縮

動画から音声(wav)分離

ffmpeg -i "入力ファイル名.mp4" -vn "出力ファイル名.wav"

動画から連番画像出力

ffmpeg -i "入力ファイル名.mp4" -vcodec png img%03d.png
解像度を指定する場合は-s 1280x720

動画を時間を指定して切り出し

動画の開始20秒から40秒間切り出し
ffmpeg -ss 00:00:20 -i "入力ファイル名.avi" -to 00:00:40 -c copy "出力ファイル名.avi"

動画にチャプターを追加

mp4に含まれるメタデータにチャプターを打つことに成ります。まず、mp4ファイルからメタデータをテキストファイルへ出力。任意のテキストエデッタでテキストファイルにチャプターを追加。mp4ファイルにチャプターを含んだメタデータを戻す(追加)。という流れになります。

動画からメタデータを出力

ffmpeg -i "入力ファイル名.mp4" -f ffmetadata ffmetadata.ini

ffmetadata.iniにチャプターを追加

[CHAPTER]
TIMEBASE=1/1000
START=0
END=19999
title=001

テキストエディターでチャプター情報を入力し保存

動画にメタデータを追加

ffmpeg -i "入力ファイル名.mp4" -i ffmetadata.ini -map_metadata 1 -map_chapters 1 -c copy "出力ファイル名.mp4"
チャプターのTIMEBASEが1/1000ですのでSTARTとENDはミリ秒単位の指定だと思われます。
HH:MM:SS.fff形式との変換プログラムがあると便利かもしれません。

連番画像ファイルから動画を作成

ffmpeg -framerate 元のフレームレート -i "入力ファイル名%03d.png" -vcodec libx264 -pix_fmt yuv420p -r 動画のフレームレート "出力ファイル名.mp4"
“入力ファイル名%03d.png”の%03dは000,0001,002…という感じの連番数値
元のフレームレートは連番画像を動画から抽出した場合、元となった動画のフレームレート。

フレームを指定して動画の切り出し

ffmpeg -i "入力ファイル名.mp4" -vf "select='between(n\,1000\,2000)'" -vsync vfr -c:a copy "出力ファイル名.mp4"

between(n\,1000\,2000) は、フレーム番号 n が1000から2000の間にあるフレームを選択するという条件を定義しています。

動画を結合

結合用リストファイル (filelist.txt) を作成

file 'frame_cut1.mp4'
file 'frame_cut2.mp4'

結合コマンド

ffmpeg -f concat -safe 0 -i filelist.txt -c copy "output_video.mp4"

コメント