web-dev-qa-db-ja.com

FFmpeg:背景がぼやけている垂直のビデオを黒のサイドからビデオ16:9に変換する方法

Vertical video with blurred background sides

FFmpegを使用してこれを作成する方法?

FFmpegなしの例:
Adobe After Effects
Sony Vegas Pro

23
Andrey

解決しました!

ffmpeg -i input.mp4 -lavfi '[0:v]scale=ih*16/9:-1,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[bg][0:v]overlay=(W-w)/2:(H-h)/2,crop=h=iw*9/16' -vb 800K output.webm

入力: https://www.youtube.com/watch?v=17uHCHfgs6
出力: http://www.youtube.com/watch?v=CgZsDLfzrTs

40
Andrey

ここで受け入れられた答えは、不必要な計算を非常に多く行っているため、実行に永遠にかかります。出力ビデオのビューポートから外れることが確実にわかっているピクセルをぼかす必要はありません。

したがって、より良い解決策は、出力に表示されるビデオの部分を最初にトリミングすることです。次に、この部分を拡大縮小してビューポートを「塗りつぶし」ます。最後に、元のビデオをその上にオーバーレイします。

Below example assumes that input video has greater
aspect ratio than output video.
                    ┌─────────────┐
┌─────────────┐     │             │
│ Input video │     │   Output    │
│             │     │   video     │
└─────────────┘     │             │
                    │             │
                    └─────────────┘

filter graph を使用してこれを実現します。フィルターは、ドット表記で以下のようになります。

                [original]
 input --> split -------------------------------> overlay --> output
        │                                          ^
        │[copy]                           [blurred]│
        └──────> crop ──> scale ──> gblur ─────────┘

入力ビデオの解像度が1280 x 720であるとすると、コマンドは次のようになります。

ffmpeg -i input.mp4 -vf 'split [original][copy]; [copy] crop=ih*9/16:ih:iw/2-ow/2:0, scale=1280:2282, gblur=sigma=20[blurred]; [blurred][original]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2' output.mp4
5
Abhinav Chauhan

Windowsでffmpeg 3.4.2を使用して動作するように提供された以前のソリューションのいずれも入手できませんでした。

しかし、これはうまくいきました:

ffmpeg -i <input_file> -filter_complex "[0:v]scale=ih*16/9:-1,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[bg][0:v]overlay=(W-w)/2:(H-h)/2,crop=h=iw*9/16" <output_file>

<input_file>および<output_file>を適切なファイル名に置き換えることを忘れないでください。

4
Richard

このようなぼかし画像にビデオをオーバーレイしてみてください。

ffmpeg -i input_video -loop 1 -i input_image -t 10 -filter_complex "
[0:v]scale=-1:720[scaled_video];
[1:v]scale=1280:720,boxblur=50[blur_image];
[blur_image][scaled_video]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2[outv]" -c:v libx264 -aspect 1280/720 -map [outv] -map 0:a -c:a copy output_video

入力画像は-loop 1によって出力ビデオのデュレーションを通してループされます。そして-t 10は、出力ビデオの長さを10秒に制限します。この例では、出力ビデオ解像度として1280:720を使用し、この比率に一致するように入力をスケーリングしました。 0:vは入力ビデオを参照し、それに応じて幅が調整される720の高さにスケーリングされます。

ここでは boxblur フィルターを使用しましたが、sabsmartblurunsharpなどのフィルターがいくつかあります。 mapは、指定された処理済み入力ストリームを取得し、それに応じてを出力ストリームにマップします。

これがあなたに役立つことを願っています!

2
Chamath

私はあらゆる種類の動画について普遍的な決定をしました。垂直方向および水平方向のビデオに適しています。ビデオのサイズを1080p(720pでも使用可能)に変更し、すべての空のスペースをぼかしたビデオで埋めます。

ffmpeg -i input.mp4 -lavfi "[0:v]scale=1920*2:1080*2,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[0:v]scale=-1:1080[ov];[bg][ov]overlay=(W-w)/2:(H-h)/2,crop=w=1920:h=1080" output.mp4

結果1

結果2