web-dev-qa-db-ja.com

ffmpegは、大きなビデオを希望のサイズに合わせてサイズ変更し、パディングを追加します

自分のいる領域に合うように、より大きなビデオのサイズを変更しようとしています。これを実現するために、最初にサイズ変更されたビデオのサイズを計算して自分の領域に合わせ、次にこのビデオにパディングを追加して、アスペクト比も維持しながら最終結果が目的のサイズになるようにします。

つまり、元のビデオのサイズが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

何が間違っているのかわかりません。誰かが以前にこの問題を抱えていましたか?何か提案はありますか?

20
misterjinx

-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
44
dooche

これは、スケーリング(アスペクト比の維持)および任意のソースサイズを任意のターゲットサイズにパディングするための一般的なフィルター式です。

-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_WIDTHTARGET_HEIGHTを希望の値に置き換えます。これを使用して、任意のビデオから200x120の埋め込みサムネイルを取得します。小道具 数学の彼の素晴らしい概要のためのdavin

8
Seth

これを試して:

-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.
4
Star Brilliant