動画ファイルや音楽ファイルの長さを知りたいことがある。例えばファイルをエンコードし直して一定のファイルサイズに収めたいときなどは、ターゲットとなるビットレートを算出するために秒数を得る必要がある。
メディアファイルの秒数を得るには、ffmpegに同梱されているffprobeを利用するのが便利だ。
以下のコマンドは、指定したメディアファイルの秒数を出力する。
% ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 FOOBARVIDEO.mp4 421.95
各オプションの説明
man ffprobe
したらよい話だが、ここでも説明しておこう。
-v error
- ログレベルを
error
に設定し、不要な情報をマスクする
- ログレベルを
-show_entries format=duration
- 特定のメタデータ(エントリ)を表示する。特に
format
エントリのうちduration
を表示する。
- 特定のメタデータ(エントリ)を表示する。特に
-of
- 出力フォーマットを規定する。これを指定しないと
[FORMAT]\nduration=421.95\n[/FORMAT]
といった形式になるため、wrapperもkeyも表示しないように指示する。
- 出力フォーマットを規定する。これを指定しないと
変換
時・分が必要な場合は適宜割る必要があるが、秒数があればなんでもできるのでこれで十分だろう。
Node.jsだとspawnSync
などで起動すればよい。
import { spawnSync } from 'node:child_process'; const fileDurationSec = Number(spawnSync("ffprobe", ["-v", "error", "-show_entries", "format=duration", "-of", "default=noprint_wrappers=1:nokey=1", filePath]).stdout.toString().trim());