http://www.mobile01.com/topicdetail.php?f=510&t=3734550
FFmpeg 範例:
http://www.mobile01.com/topicdetail.php?f=510&t=4487462
---------------
參考資料
FFmpeg 官方資料:
https://trac.ffmpeg.org/wiki/Create%20a%20mosaic%20out%20of%20several%20input%20videos
子母畫面 (PIP)
若要製作子母畫面 (PIP),可以使用 scale video filter 將副畫面縮小後用 overlay video filter 將它覆蓋至主畫面某處作為子畫面。
![[FFmpeg] 子母畫面 (PIP) 與 多重畫面 (PBP)](http://attach.mobile01.com/attach/201507/mobile01-3ba5a843188fc4db3e7b62995de1a41c.png)
例如將第二個(#1)輸入檔的影像寬高都縮小為1/4然後覆蓋到第一個(#0)輸入檔的影像,
也就是 1:v 作為子畫面而 0:v 作為主畫面,並使子畫面距離左邊界與上邊界各 16 像素:
filter_complex:
"[1:v]scale='w=iw/4:h=ih/4'[pip],[0:v][pip]overlay='x=16:y=16'"
x, y 參數包含這些常數: main_w main_h overlay_w overlay_h,
你可以使用這些常數來寫出計算式來自動得到 x 或 y 值。
例如,若要使子畫面距離右邊界與下邊界各 16 像素:
"[1:v]scale='w=iw/4:h=ih/4'[pip],[0:v][pip]overlay='x=main_w-overlay_w-16:y=main_h-overlay_h-16'"
完整的命令例如這樣:
ffmpeg -i input1.mkv -i input2.mkv -filter_complex "[1:v]scale='w=iw/4:h=ih/4'[pip],[0:v][pip]overlay='x=main_w-overlay_w-16:y=main_h-overlay_h-16'" output.mkv
多重畫面 (PBP)
如果要做出2x2多重畫面的效果,可以用 nullsrc video filter 建立一個空白影像,並使用 scale video filter 將輸入片源的寬高都縮小為1/2,然後使用 overlay video filter 將4個輸入片源分別覆蓋在左上方、右上方、左下方、右下方。
※必須使用 shortest=1 來避免無限空白影像
完整的命令例如這樣:
ffmpeg -i input1.m2ts -i input2.m2ts -i input3.m2ts -i input4.m2ts -filter_complex "nullsrc='size=1280x720'[base],[0:v]scale='640x360'[upperleft],[1:v]scale='640x360'[upperright],[2:v]scale='640x360'[lowerleft],[3:v]scale='640x360'[lowerright],[base][upperleft] overlay='shortest=1'[tmp1],[tmp1][upperright]overlay='x=640'[tmp2],[tmp2][lowerleft] overlay='y=360'[tmp3],[tmp3][lowerright]overlay='x=640:y=360'" output.mkv
![[FFmpeg] 子母畫面 (PIP) 與 多重畫面 (PBP)](http://attach.mobile01.com/attach/201507/mobile01-d5cff1e7d479d230e314383f65a92539.png)