web-dev-qa-db-ja.com

ffmpegでオーバーレイ画像を拡大縮小する方法

Ffmpegでオーバーレイ画像をscale=320:240に縮小するにはどうすればよいですか? scaleコマンドを配置しようとしても、結果が得られません。これが私が使用しているコマンドですが、実際には画像を引き伸ばしています。

ffmpeg -i video.mp4 -i image.jpg -b:v 1M -filter_complex "overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2, drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf: text='Test Text': x=1: y=1: fontsize=30" output.mp4
12
Henry The Least

フィルタチェーンでは、最初に画像を個別に拡大縮小してから、オーバーレイを実行する必要があります。フィルタチェーンの前に[1:v]scale=320:240 [ovrl],[0:v][ovrl]を付けるだけです。最終的なコマンドライン(読みやすくするために複数の行に分割):

ffmpeg -i video.mp4 -i image.jpg -b:v 1M \
-filter_complex "[1:v]scale=320:240 [ovrl], \
[0:v][ovrl]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2, \
drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf: \
text='Test Text': x=1: y=1: fontsize=30" output.mp4

ただし、ビデオが アナモルフィック (ストレージのアスペクト比(SAR)は、主にテレビ放送で使用されるディスプレイのアスペクト比(DAR)とは異なります)の場合、ビデオは再生時にサイズ変更(ストレッチ)されます。もちろん、オーバーレイされた画像もビデオの一部であるため、引き伸ばされます。
たとえば、PAL SDブロードキャスト(720x576ピクセルで保存、SAR = 5:4)は通常16:9 DARを使用して表示されるため、再生時に1024x576にサイズ変更されてDARが維持されます。したがって、そのようなビデオに320x240の画像をオーバーレイすると、その表示サイズは455x240になり、引き伸ばされたように見えます。

オーバーレイ画像のアスペクト比(4:3)を維持する必要がある場合は、ビデオのSARとDARを考慮し、オーバーレイ用に画像のサイズを変更するための正しいサイズを計算する必要があります。ビデオのSARとDARがわかっている場合は、次の式を使用して、オーバーレイ画像のサイズを変更するための正しい幅を計算できます(高さが240のままであると仮定):width = 320 * SAR/DAR

22
Weaver