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: select
Filter mengambil ekspresi , di mana n
nomor 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 ffmpeg
frame 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 setpts
filter 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 …