J'ai un lecteur vidéo html 5 de 700 pixels de large et 400 pixels de haut. J'essaie d'utiliser avconv
ffmpeg pour redimensionner (tout en conservant le rapport de format) et pour m'assurer qu'il s'intègre bien dans mon lecteur.
L'entrée peut être un fichier de n'importe quelle taille, je dois donc redimensionner les plus gros mais centrer les plus petits avec des barres noires. Jusqu'ici, j'ai essayé: -s
et -aspect
, j'ai déjà vu pad
être utilisé avec l' -vf
interrupteur mais je ne comprends pas comment cela fonctionne assez pour obtenir ce dont j'ai besoin.
Ceci est une idée approximative de ce dont j'ai besoin. Je ne sais pas si c'est même possible. C'est presque comme la largeur maximale / maximale de CSS. Je réalise que ce n'est peut-être qu'un mélange de mots, mais si quelqu'un comprenait de quoi je parle, j'apprécierais de l'aide, merci.
commande avconv:
avconv -y -i control.avi -vcodec libx264 -b 2000k -bufsize 20M -acodec aac -strict experimental -ar 44100 -ab 256k bigbuck_out.mp4
la source
Réponses:
Une méthode simple consiste à utiliser l'
force_original_aspect_ratio
option du filtre d'échelle .Image originale. Représente une vidéo au format 640x480, 4: 3.
Dans ces exemples, l'image d'origine sera mise à l'échelle pour tenir dans une sortie au format 16: 9 tout en préservant le rapport d'origine. Pour ce faire, vous pouvez soit:
Pilier ou boîte aux lettres
Image pilarbox. Insertion d’une entrée 640x480 (4: 3) dans une sortie 1280x720 (16: 9).
Cela va redimensionner l'image. Si vous voulez éviter la montée en gamme, voir l'exemple ci-dessous.
Le Letterboxing se produirait à la place si le format d'image en entrée est plus large que le format d'image en sortie. Par exemple, une entrée dont le format d'image correspond à 2,35: 1 dans une sortie 16: 9 entraîne un Letterboxing.
Comme ci-dessus mais sans upscaling
640x480 (4: 3) entrée en sortie 1280x720 (16: 9) sans conversion ascendante.
Surgir
Image recadrée. Rapport d'aspect d'entrée 4: 3, rapport d'aspect de sortie 16: 9.
la source
color
option, telle quepad=1280:720:(ow-iw)/2:(oh-ih)/2:color=red
(ou vous pouvez utiliser l'hexadécimal si vous préférez). Voir la liste des couleurs .Voici la commande qui ajouterait pillar ou letterboxing pour une largeur de sortie fixe. C'est un peu long, mais vous devrez spécifier le rembourrage d'une manière ou d'une autre.
Tout d’abord, définissez dans votre shell la largeur et la hauteur de la sortie:
Puis lancez la commande:
Ceci est réduit au strict nécessaire pour redimensionner et garnir: ajoutez vos autres options vidéo et audio à votre guise. Notez que les nombres pour
width
etheight
doivent être divisibles par 2 pour fonctionner avec la plupart des codecs.Voici l'explication de ce qui se passe:
min()
) et choisissons uniquement ce facteur pour le redimensionnement.iw*min(…):ih*min(…)
).$width:$height
est la largeur et la hauteur de sortiescale
filtre.la source
-movflags +faststart
à l'exemple de Slhck. Il permettra à votre vidéo téléchargée pour commencer progressivement la lecture avant la fin du téléchargement, et aussi voir le FFmpeg et x264 Guide de codage et FFmpeg et AAC Guide d' encodage pour plus d' instructions de codage et des exemples.pad=$width:$height:(ow-iw)/2:(oh-ih)/2"
ow-iw
.Il me semble que vous devez le faire en trois étapes:
FFmpeg / avconv peut effectuer la mise à l'échelle / le remplissage avec des filtres vidéo en une seule étape, en transcodant une seule fois. Par exemple, pour prendre une vidéo 16: 9, redimensionnez-la en largeur, puis en letterbox, les résultats:
... mais pour la première étape (détecter le rapport de format et le comparer au 7: 4 requis), vous devrez utiliser un script quelconque.
... vous obtiendrez le format de la vidéo, qui ressemblera à "16: 9" ou "4: 3". Dans un script bash, j'utiliserais quelque chose comme:
Évidemment, vous devrez l'adapter à vos besoins.
la source