Untuk bekerja secara akurat, pertama-tama konversikan video ke bitstream RAW YUV (jika belum) dengan:
ffmpeg -i input.mp4 -an -vcodec rawvideo -pix_fmt yuv420p rawbitstream.yuv
Langkah selanjutnya: selectFilter mengambil ekspresi , di mana nnomor bingkai.
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
Agar ffmpegframe tidak duplikat, Anda harus memaksa setengah dari framerate input Anda - jadi Anda menetapkan "2" sebagai input dan "1" ke output. Jangan lupa untuk mengganti WxH dengan dimensi sebenarnya dari klip Anda karena bitstream mentah tidak memiliki header yang membawa informasi ini.
Alih-alih di atas, kemungkinan lain adalah menambahkan setptsfilter untuk mengatur cap waktu baru untuk output. Tapi hati-hati karena menjatuhkan frame tidak akurat. Di sini, 25 adalah frame rate output aktual yang Anda inginkan:
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
Tentu saja Anda dapat memilih format piksel lain (salah satunya ffmpeg -pix_fmts). Pastikan bahwa saat membaca file Anda tahu ukuran piksel dan format piksel:
ffmpeg -f rawvideo -s:v 1280x720 -pix_fmt yuv420p input.yuv …