LoginSignup
1
0

More than 1 year has passed since last update.

ffmpegの進捗率、予測残り時間、その他もろもろを表示する方法

Last updated at Posted at 2022-09-20

ffmpegの出力は邪魔なので今まで捨ててましたが、進捗率が表示できるという記事を見つけたので、それを参考に加工してみました。
個人的には、いつ頃終わるか分かるようになったのが良かったです。

使い方

パイプでawkに渡してください。

shell
$ ffmpeg -i <入力ファイル> <出力ファイル> | awk -f progress.awk

パイプを使うので、$?でステータスが取れなくなります。
$[PIPESTATUS[0]]などで拾ってください。

呼び出されるスクリプト

gawk 前提です。5% 進むごとに表示します。

progress.awk
BEGIN{RS="frame="}
/Duration: /{
    match($0, /[0-2][0-3]:[0-5][0-9]:[0-5][0-9]/)
    TIME=substr($0, RSTART, RLENGTH)
    split(TIME, array, ":")
    Dura=array[1]*3600+array[2]*60+array[3]
    Start=systime()
    Old=-1
}
/time=/{
    match($0, /[0-2][0-3]:[0-5][0-9]:[0-5][0-9]/)
    Now=substr($0, RSTART, RLENGTH)
    split(Now, array1, ":")
    Prog=array1[1]*3600+array1[2]*60+array1[3]
    Ratio=int(Prog/Dura*100)
    if ( Ratio != Old ) {
      if ( Ratio % 5 == 0 ) {
        Current=systime()
        px=Current-Start
        Remain=""
        if ( Prog != 0 ) {
          rx=(Dura*px)/Prog-px
          Remain=sprintf(" 予測残: %02d:%02d:%02d", int(int(rx)/3600), int(int(rx)/60)%60, int(rx)%60)
        }
        printf ("  全体: %s 進捗: %s 進捗率: %3d%% 経過: %02d:%02d:%02d%s\n", TIME, Now, Ratio, int(int(px)/3600), int(int(px)/60)%60, int(px)%60, Remain)
        system("")
      }
      Old=Ratio
    }
}

実行結果

実行結果はこんな感じです。

実行結果
  全体: 00:30:08 進捗: 00:00:00 進捗率:   0% 経過: 00:00:00
  全体: 00:30:08 進捗: 00:01:31 進捗率:   5% 経過: 00:03:58 予測残: 01:14:50
  全体: 00:30:08 進捗: 00:03:01 進捗率:  10% 経過: 00:08:08 予測残: 01:13:06
  全体: 00:30:08 進捗: 00:04:32 進捗率:  15% 経過: 00:12:22 予測残: 01:09:50
  全体: 00:30:08 進捗: 00:06:02 進捗率:  20% 経過: 00:16:41 予測残: 01:06:38
    ・
    ・
    ・

それぞれの項目の意味は次のとおり

全体
動画全体の長さ
進捗
どこまで変換したか
進捗率
率で表したもの
経過
経過時間
予測残
あとどれくらいで終わるかの予測値

参考にしたサイト

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0