drawtextフィルタを使って時間とフレーム数を表示する方法。ただしこの方法は固定フレームでしか使えない。30000/1001 などの部分を動画のフレーム数で指定する。表示される内容は左から秒時間、hms時間、フレーム数、フレーム数を5で割った余り、ピクチャータイプ

30000/1001fpsの動画。
ffplay -i input -vf "drawtext=fontsize=30:box=1:boxcolor=white@0.5:fontcolor=black:fontfile='C\\://WINDOWS/Fonts/arial.ttf':text='%{pts\:flt}-%{pts\:hms}-%{eif\:t*(30000/1001)\:d}-%{eif\:mod(t*(30000/1001)\,5):d}-%{pict_type}'"

24000/1001fpsの動画。
ffplay -i input -vf "drawtext=fontsize=30:box=1:boxcolor=white@0.5:fontcolor=black:fontfile='C\\://WINDOWS/Fonts/arial.ttf':text='%{pts\:flt}-%{pts\:hms}-%{eif\:t*(24000/1001)\:d}-%{eif\:mod(t*(24000/1001)\,5)\:d}-%{pict_type}'"

上のコマンドを使っても時間やフレーム数が正しく表示されない動画。時に TS ファイルなどの場合、ずれる時間を先に調べ下のコマンドで再生する。
ffprobe -v error -f lavfi -i "movie=input.ts" -show_entries frame=pkt_pts_time -select_streams v:0 -read_intervals %+#1 -of csv=p=0

ffprobe の使い方

コンソールに表示される秒時間をsetptsフィルタに指定する。表示される内容は左からhms時間、フレーム数、フレーム数を5で割った余り、ピクチャータイプ
ffplay -i input.ts -vf "setpts=PTS-秒時間/TB,drawtext=fontsize=30:box=1:boxcolor=white:fontcolor=black:fontfile='C\\://WINDOWS/Fonts/arial.ttf':text='%{pts\:hms}-%{eif\:t*(30000/1001)\:d}-%{eif\:mod(t*(30000/1001)\,5)\:d}-%{pict_type}'"

TS ファイルのフレームをtileフィルタで前フレームを下に表示しながら確認する。適宜出力解像度をscaleフィルタで指定する。
ffplay -i input.ts -vf "setpts=PTS-7276.221467/TB,drawtext=fontsize=130:box=1:boxcolor=white:fontcolor=black:fontfile='C\\://WINDOWS/Fonts/arial.ttf':text='%{pts\:hms}-%{eif\:t*(30000/1001)\:d}-%{eif\:mod(t*(30000/1001)\,5)\:d}-%{pict_type}',crop=iw:3*ih/4:0:0,split[a],tile=8x1:overlap=8,scale=1440:-2,[a]vstack"

調べたフレームからtrimフィルタを使ってカットして連結するもできる。ただしこの方法だと音声はカットできないのでatrimフィルタを使いフレーム数を PTS 変換、またはサンプル数に変換する。さらにconcatフィルタで連結する場合、動画時間が長くなるほど、カット数が多くなるほど時間がかかる。

windows – Displaying the current frame of a video after skipping using drawtext/start_number not evaluation any variables – Stack Overflow

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)