
私のアプリケーションでは、ユーザーは特定の位置 (media.currentPosition) に移動し、保存ボタンを押すと画像がエクスポートされます。これを実現するために使用している ffmpeg コマンドは次のとおりです。
"-i",Video.mp4,"-filter_complex","[1:v][0:v]scale2ref=iw:ih[ovr][base];[ovr]colorchannelmixer=aa=0.7[ovrl];[base][ovrl]overlay[v]","-map","[v]","-ss",GetPositionInVideo,"-vframes","1","-q:v","2", "-preset", "ultrafast",directoryToStore+"/"+"Image.jpg"};
これは Android アプリケーションなので、文字列配列になっています。コマンドは完璧に動作しますが、完了するまでに非常に時間がかかります。
私のログにはこれが繰り返し表示されます:
[Progress]: frame= 0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed= 0x
フレームに到達するまで、次のように表示されます。
[Progress]: frame= 1 fps=0.0 q=2.0 Lsize=N/A time=00:00:00.04 bitrate=N/A speed=0.00151x
その後、すぐに終了します。
つまり、ffmpeg は目的のフレームに到達するまで各フレームを処理し、その後それを処理すると考えられます。
私の質問:
ビデオから画像に 1 つのフレームをエクスポートする速度/処理時間を向上させる方法はありますか? - 不要なフレームをスキップして、ユーザーがエクスポートしたいフレームに直接移動するなどでしょうか?
答え1
"-ss",GetPositionInVideo,
"-i",Video.mp4
高速シークの場合は直前に移動します。