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.
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.Source: https://ffmpeg.org/trac/ffmpeg/ticket/309
la source
-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:
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? :)
la source