J'ai essayé de comprendre cela moi-même, mais la myriade d'options me déconcerte.
Je veux utiliser idéalement soit ffmpeg
ou mencoder
(ou autre chose, mais ces deux que je sais que je travaille) pour convertir toute vidéo entrante en une taille d'écran fixe.
Si la vidéo est plus large ou trop courte, recadrez la vidéo au centre. Si ce n'est pas la bonne taille, redimensionnez-la vers le haut ou vers le bas pour en faire exactement la taille d'écran fixe.
La dernière chose dont j'ai besoin est de 720x480 dans un XVid AVI avec une piste audio MP3.
J'ai trouvé beaucoup de pages montrant comment redimensionner à une résolution maximale, mais j'ai besoin que la vidéo soit exactement cette résolution (avec des parties supplémentaires coupées, pas de barres noires).
Quelqu'un peut-il me dire la ligne de commande à exécuter - ou au moins me faire une partie de la plupart du chemin? S'il doit s'agir de plusieurs lignes de commande (exécutez X pour obtenir la résolution, faites ce calcul, puis exécutez Y avec la sortie de ce calcul), je peux l'écrire.
la source
Réponses:
Je ne suis pas un gourou ffmpeg, mais cela devrait faire l'affaire.
Tout d'abord, vous pouvez obtenir la taille de la vidéo d'entrée comme ceci:
Avec un ffmpeg raisonnablement récent, vous pouvez redimensionner votre vidéo avec ces options:
Vous pouvez définir la largeur ou la hauteur
-1
afin de laisserffmpeg
redimensionner la vidéo en conservant le rapport hauteur / largeur. En fait,-2
c'est un meilleur choix car la valeur calculée devrait être égale. Vous pouvez donc taper:Une fois que vous obtenez la vidéo, elle peut être plus grande que prévu
720x480
car vous laissezffmpeg
calculer la hauteur, vous devrez donc la recadrer. Cela peut être fait comme ceci:Enfin, vous pouvez écrire un script comme celui-ci (peut facilement être optimisé, mais je l'ai gardé simple pour la lisibilité):
la source
echo "scale=3; ${in_width}/${out_width}*1000"| bc | awk '{printf "%d", $0}'
h_rate =echo "scale=3; ${in_height}/${out_height}*1000"| bc | awk '{printf "%d", $0}'
# Prenons le côté le plus court, pour que la vidéo soit au moins aussi grande # que la taille souhaitée, et recadrez le côté le plus long: crop_side = 'n' if [$ {w_rate} -gt $ {h_rate}]; alors scale = "- 2: $ {out_height}" crop_side = 'w' else scale = "$ {out_width}: - 2" crop_side = 'h' fi 'Remplacez "input.file" par le nom de votre fichier d'entrée.
la source
-c:a copy scaled_result.mp4
Si vous souhaitez recadrer et redimensionner en une seule fois, vous pouvez créer une chaîne de filtres recadrer puis redimensionner comme suit:
Ce qui précède recadre d'abord une vidéo au format 16: 9, puis redimensionne à 400 pixels de haut x la largeur appropriée (nombre pair).
la source
Je suis nouveau sur ffmpeg mais j'ai maintenant un joli petit convertisseur en VB.NET qui crée des films bruts de différents formats de sortie pour une utilisation dans de petits appareils qui ont accès à la carte SD mais pas assez de puissance pour décoder des vidéos complexes.
En raison de la façon dont cela fonctionne lors du redimensionnement et du recadrage, j'ai dû le coder manuellement et créer les paramètres. Fondamentalement, j'ai besoin de connaître la largeur et la hauteur résultantes.
J'ai 2 cases à cocher pour les options: -
Conserver le rapport hauteur / largeur (X) Remplir tous les pixels (X)
Seules 4 variables sont nécessaires en entrée (1) Largeur de la vidéo d'origine, (2) Hauteur de la vidéo d'origine, (3) Largeur de l'appareil, (4) Hauteur de l'appareil.
Bien que VB.NET puisse être adapté assez facilement pour n'importe quelle langue.
la source