ffmpeg selectフィルターを使用して正確なフレームでビデオをカットする
あまり正確ではないように見えるパラメータを使用-ssおよび-to検索する代わりに、特定のフレーム番号のビデオをカットできますか?例えば; ffmpeg -i video.webm -startingframe 80 -endingframe 560 output.webm [80番目のフレームと560番目のフレームが含まれています。したがって、合計で(560-80 +1)フレームになります] 答えと少し検索した後、いくつかのコマンドを試しました。しかし、これまでのところ、私は受け入れられる方法を見つけることができませんでした。 誰かが250番目と750番目のフレームの間でビデオストリームをカットしたい場合、これが道です。出力として501フレームを提供します。 注: movie.mp4には25 fpsがあり、そのオーディオサンプルレートは48kです。 ffmpeg -i movie.mp4 -an -vf "select=between(n\,250\,750),setpts=PTS-STARTPTS" v_stream.webm 予想どおり、出力の長さは正確に20秒です。 オーディオに同じ方法を使用する: ffmpeg -i movie.mp4 -vn -af "aselect=between(n\,480\,1440),setpts=PTS-STARTPTS" a_stream.webm 予想外に、これは非常に低い精度を持っています。オーディオが20秒に等しい960001(960k + 1)サンプルが提供されているはずです。しかし、代わりに、出力の長さは20.505秒で、984240のサンプルがあります。また、期間を長くすると、エラーも増加します。 次に、-ss -toパラメータを使用してオーディオストリームをカットしようとしました。 ffmpeg -i movie.mp4 -vn -ss 10.000 -to 30.000 a_stream.webm 古い古典的な方法ははるかに優れています。出力は20.003秒で、960144個のサンプルがあります。さらに、期間を延長してもエラーは増加せず、エラーは一定であり、その入力ファイルには常に144サンプルの余剰があります。 要約: selectフィルターはほとんどの場合うまく機能しますが、選択はうまくいきません。古典的な-ssパラメーターは、オーディオではより良く機能しますが、サンプル精度ではありません。また、-vf selectと-ssパラメータを一緒に使用することはできません。これは-ss、オーディオとビデオの両方のストリームに影響を与える一方で、オーディオのみに影響を与えるためです。 …