J'enregistre mon bureau avec avconv (alias ffmpeg), puis je le redimensionne à 720p.
J'ai récemment ajouté à mon script pour qu'ils puissent sélectionner une fenêtre avec xwininfo et il enregistrera celle-ci spécifiquement.
Cependant, si le format de sortie n'est pas divisible par 2, l'encodeur panique et je ne reçois pas ma vidéo.
Existe-t-il un moyen de résoudre ce problème à l'intérieur de ffmpeg, donc je n'ai pas à faire de calculs manuels en bash pour définir les valeurs d'échelle?
Est-il possible d'avoir le filtre d'échelle soustraire / ajouter un à la largeur / hauteur s'ils sont inégaux? (rond?)
Est-il possible d'appliquer un autre filtre après l'échelle d'origine qui pourrait accomplir cela? (Cela arrondirait les vidéos qui ont une taille d'entrée inégale et sans mise à l'échelle)
#!/bin/bash
avconv \
-f x11grab -r $fps -s $capturesize -i :0.0$offset \
-vcodec libx264 \
-vf scale=-1:720 \
-pre:v lossless_ultrafast \
-threads 4 \
-y $@
Certaines anciennes listes de diffusion suggèrent une round()
fonction que vous pouvez utiliser dans le filtre mais je n'arrive pas à obtenir la bonne syntaxe. Si cela fonctionne, un scale=round(iw,2):round(ih,2)
filtre appliqué à la fin résoudrait tous mes problèmes à la fois. iw
et ih
ne semblent pas fonctionner.
ceil
placetrunc
pour obtenir un nombre de paires plus élevé comme dans le cas de 16: 9 480pEn fait, le filtre peut le gérer directement. Il suffit de passer à la
-2
place du-1
filtre: par exempleJ'ai été surpris de le découvrir dans un rapport de bogue d'il y a 3 ans .
la source
Après beaucoup d'expériences, il semble que le filtre suivant appliqué après que d'autres filtres d'échelle arrondissent la largeur et la hauteur à 2.
C'est fondamentalement une chose divisée, ronde, multipliée, je n'avais tout simplement pas la bonne syntaxe.
la source