web-dev-qa-db-fra.com

Déposez tous les cadres paires ou impairs à l'aide de FFMPEG?

Y a-t-il un moyen précis de prendre une vidéo brute et d'en extraire une nouvelle vidéo contenant uniquement des cadres impairs ou même des cadres (par choix)?

Par exemple:

J'ai "bla.yuv" avec 400 cadres (0-399). Je veux créer "blahodd.yuv" qui contient des cadres 1-399 (1,3,5,7 ... 399) et "blaheven" qui contient des cadres 0-398 (0,2,4,6 ... 398 ).

Des idées Comment le faire en utilisant uniquement FFMPEG?

14
Mark

Pour travailler avec précision, convertissez d'abord la vidéo en Bitstream RAW YUV (s'il n'est pas déjà) par:

ffmpeg -i input.mp4 -an -vcodec rawvideo -pix_fmt yuv420p rawbitstream.yuv

Étape suivante: le select filtre prend ne expression , où n est le numéro de cadre.

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

Pour avoir ffmpeg non des cadres en double, vous devez forcer la moitié de votre entrée de votre entrée - de sorte que vous définissez "2" comme entrée et "1" à la sortie. N'oubliez pas de remplacer le WXH avec les dimensions réelles de votre clip car le Bitstream brut n'a pas d'en-tête qui porte cette information.

Au lieu de ce qui précède, une autre possibilité serait d'ajouter le setpts filtre pour définir de nouveaux horodatages pour la sortie. Mais soyez prudent car il tombe des cadres de manière non précise. Ici, 25 est le taux de trame de sortie réel que vous souhaitez:

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

Vous pouvez bien sûr choisir un autre format de pixel (n'importe lequel de ffmpeg -pix_fmts). Assurez-vous que lorsque vous lisez le fichier, vous connaissez le format de pixel et le format pixel:

ffmpeg -f rawvideo -s:v 1280x720 -pix_fmt yuv420p input.yuv …
11
slhck