自分のいる領域に合うように、より大きなビデオのサイズを変更しようとしています。これを実現するために、最初にサイズ変更されたビデオのサイズを計算して自分の領域に合わせ、次にこのビデオにパディングを追加して、アスペクト比も維持しながら最終結果が目的のサイズになるようにします。
つまり、元のビデオのサイズが1280x720で、405x320の領域に合わせるには、最初にビデオのサイズを405x227に変更する必要があるとします。私がする。この時点ではすべて問題ありません。計算を行ったところ、上部と下部に46ピクセルのパディングを追加する必要があることがわかりました。
したがって、そのためのコマンドのパディングパラメータは-vf "pad=405:320:0:46:black"
になります。しかし、コマンドを実行するたびに、Input area 0:46:405:273 not within the padded area 0:0:404:226
のようなエラーが発生します。
私が見つけたパディングの唯一のドキュメントはこれです http://ffmpeg.org/libavfilter.html#pad 。
何が間違っているのかわかりません。誰かが以前にこの問題を抱えていましたか?何か提案はありますか?
-vf "scale=iw*min(405/iw\,320/ih):ih*min(405/iw\,320/ih),pad=405:320:(405-iw)/2:(320-ih)/2"
を試してください
その行で何が起こっているかを明確にするために編集します。あるボックスを別のボックス内に収まるように拡大縮小する方法を尋ねています。ボックスのアスペクト比が異なる場合があります。含まれている場合は、一方の寸法を塗りつぶし、もう一方の寸法に沿って中央に配置します。
# you defined the max width and max height in your original question
max_width = 405
max_height = 320
# first, scale the image to fit along one dimension
scale = min(max_width/input_width, max_height/input_height)
scaled_width = input_width * scale
scaled_height = input_height * scale
# then, position the image on the padded background
padding_ofs_x = (max_width - input_width) / 2
padding_ofs_y = (max_height - input_height) / 2
これは、スケーリング(アスペクト比の維持)および任意のソースサイズを任意のターゲットサイズにパディングするための一般的なフィルター式です。
-vf "scale=min(iw*TARGET_HEIGHT/ih\,TARGET_WIDTH):min(TARGET_HEIGHT\,ih*TARGET_WIDTH/iw),
pad=TARGET_WIDTH:TARGET_HEIGHT:(TARGET_WIDTH-iw)/2:(TARGET_HEIGHT-ih)/2"
TARGET_WIDTH
とTARGET_HEIGHT
を希望の値に置き換えます。これを使用して、任意のビデオから200x120の埋め込みサムネイルを取得します。小道具 数学の彼の素晴らしい概要のためのdavin 。
これを試して:
-vf 'scale=640:480:force_original_aspect_ratio=decrease,pad=640:480:x=(640-iw)/2:y=(480-ih)/2:color=black'
FFmpegのドキュメントによると、force_original_aspect_ratio
オプションは、スケーリング時に元のアスペクト比を維持するのに役立ちます。
force_original_aspect_ratio
Enable decreasing or increasing output video width or height if
necessary to keep the original aspect ratio. Possible values:
disable
Scale the video as specified and disable this feature.
decrease
The output video dimensions will automatically be decreased if
needed.
increase
The output video dimensions will automatically be increased if
needed.