Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

動画・音楽ファイルの秒数を算出するにはffprobeを使うと便利

動画ファイルや音楽ファイルの長さを知りたいことがある。例えばファイルをエンコードし直して一定のファイルサイズに収めたいときなどは、ターゲットとなるビットレートを算出するために秒数を得る必要がある。

メディアファイルの秒数を得るには、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());
★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?