回答:
正確に機能させるには、まずビデオをRAW YUVビットストリームに変換します(まだ変換していない場合)。
ffmpeg -i input.mp4 -an -vcodec rawvideo -pix_fmt yuv420p rawbitstream.yuv
次のステップ:select
フィルターは式を取りますn
。ここで、はフレーム番号です。
ffmpeg -r 2 -s WxH -i rawbitstream.yuv -filter:v select="mod(n-1\,2)" \
-c:v rawvideo -r 1 -format rawvideo -pix_fmt yuv420p -an odd.yuv
ffmpeg -r 2 -s WxH -i rawbitstream.yuv -filter:v select="not(mod(n-1\,2))" \
-c:v rawvideo -r 1 -format rawvideo -pix_fmt yuv420p -an even.yuv
持っているためにffmpeg
重複はないフレームを、あなたの入力のフレームレートの半分を強制する必要があります-あなたは出力に入力し、「1」と「2」を設定するようにします。WxHをクリップの実際のサイズに置き換えることを忘れないでください。生のビットストリームには、この情報を伝えるヘッダーがありません。
上記の代わりに、別の可能性setpts
としては、出力に新しいタイムスタンプを設定するためのフィルターを追加することです。ただし、フレームが正確にドロップされないため注意してください。ここで、25は実際の出力フレームレートです。
ffmpeg -i input.mp4 -filter:v select="mod(n-1\,2)",setpts="N/(25*TB)" \
-c:v rawvideo -r 12.5 -format rawvideo -pix_fmt yuv420p -an odd.yuv
ffmpeg -i input.mp4 -filter:v select="not(mod(n-1\,2))",setpts="N/(25*TB)" \
-c:v rawvideo -r 12.5 -format rawvideo -pix_fmt yuv420p -an even.yuv
もちろん、別のピクセル形式(のいずれかffmpeg -pix_fmts
)を選択できます。ファイルを読み取るときに、ピクセルサイズとピクセル形式を確認してください。
ffmpeg -f rawvideo -s:v 1280x720 -pix_fmt yuv420p input.yuv …
ffmpegがAviSynthフラグを使用して構築されている場合、.avs
ファイルを渡すことができると思います。
実行して構成データffmpeg
を検索することで確認できます。
--enable-avisynth
そこにある場合は、次のように使用できますffmpeg -i blahEven.avs blahEven.yuv
。
blahEven.avs
単純なところは:
ffvideosource( "blah.yuv")。SelectEven()
奇数フレームの場合、を使用しますSelectOdd()
。
より高度な使用法については、SelectEveryのドキュメントを参照してください。
--enable-avisynth
あったら、それはAviSynthがffmpegに組み込まれていることを意味すると思っていましたが、それについてはわかりません。