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
コンソールに表示される秒時間を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
フィルタで連結する場合、動画時間が長くなるほど、カット数が多くなるほど時間がかかる。