Doğru şekilde çalışmak için, önce videoyu RAW YUV bit akışına (zaten değilse) şu şekilde dönüştürün:
ffmpeg -i input.mp4 -an -vcodec rawvideo -pix_fmt yuv420p rawbitstream.yuv
Sonraki adım: select
filtre alır bir ifade , n
çerçeve sayısıdır.
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
Sahip olmak ffmpeg
değil yinelenen kareleri, doğrudan giriş yapmanız frame oranının kuvvet yarısına sahip - ayarladığınız yüzden "2" çıkışına giriş ve "1" olarak. Ham bit akımının bu bilgileri taşıyan bir başlığı olmadığından Gxy'yi klibinizin gerçek boyutlarıyla değiştirmeyi unutmayın.
Yukarıdakilerin yerine setpts
, çıkış için yeni zaman damgaları ayarlamak üzere filtre eklemek başka bir olasılık olabilir . Ancak çerçeveleri doğru bir şekilde düşürmediğinden dikkatli olun. Burada 25, istediğiniz gerçek çıktı kare hızıdır:
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
Elbette başka bir piksel formatı (herhangi biri ffmpeg -pix_fmts
) seçebilirsiniz . Dosyayı okurken piksel boyutunu ve piksel biçimini bildiğinizden emin olun:
ffmpeg -f rawvideo -s:v 1280x720 -pix_fmt yuv420p input.yuv …