Redimensionner des vidéos avec différentes largeurs à une hauteur fixe en préservant le rapport hauteur / largeur avec ffmpeg

17

J'aimerais convertir un grand nombre de fichiers vidéo en vidéo flash pour le site Web de notre entreprise. J'ai une exigence que toutes les vidéos doivent être au format 360p, donc leur taille serait Nx360.

FFMpeg utilisations de l'argument pour spécifier la résolution cible en tant que W x H . Je ne sais pas W idth, car cela dépend de format de fichier source. Si la source est 640x480, la cible sera 480x360. Si la source est 848x480, la cible sera 636x360.

Existe-t-il un moyen de le faire avec un commutateur de ffmpeg? Qu'il préservera le rapport hauteur / largeur et je ne spécifierai que la hauteur de la vidéo cible?

Je pourrais facilement le résoudre en créant un programme qui lancera ffprobe pour obtenir la taille de la vidéo source, calculer le rapport d'aspect, puis calculer une nouvelle largeur.

Axarydax
la source

Réponses:

15

Vous pouvez essayer d'ajouter ce filtre vidéo:

-vf "scale=-1:360" 

-1 dans ce cas, signifie variable / inconnu, donc ce filtre redimensionne la vidéo pour conserver le rapport d'aspect de l'entrée, en gardant 360 comme hauteur.

Pour moi, cela a atteint le même résultat que vous recherchez.

user65600
la source
6

Je n'ai pas encore assez de points pour commenter une réponse existante, mais cela suit la réponse de user65600 et va plus loin lorsque des codecs spécifiques nécessitent une largeur / hauteur divisible par 2 (par exemple, libx264)

Lorsque vous utilisez -1 (variable / inconnu), il peut renvoyer un # impair. Pour garantir un # pair, vous devez utiliser quelque chose comme trunc(ow/a/2)*2, qui calculera automatiquement le # pair le plus proche tout en préservant le rapport d'aspect.

-vf "scale=trunc(ow/a/2)*2:360"

Source: https://ffmpeg.org/trac/ffmpeg/ticket/309

Toland H
la source
3

-vf "scale=trunc(ow/a/2)*2:360" ne fonctionne pas en raison d'une erreur "d'auto-référencement".

Au lieu de cela, les travaux suivants:

-vf "scale = -1: 360, scale = trunc (iw / 2) * 2: 360"

L'auto-référencement est ainsi évité par deux échelles consécutives, et l'arrondi se fait dans la deuxième étape. Mignon, non? :)

ddystill
la source
Échelle de filtre graphique simple = -1: 480; scale = trunc (iw / 2) * 2: 480 'n'a pas exactement une entrée et une sortie. Erreur lors de l'ouverture des filtres!
digitalPBK