2016-02-16 40 views
0

我想要做的是以16:9的寬高比拍攝視頻,並通過裁剪生成另一種1:1的寬高比,以便作物區域隨時間變化。例如,假設源是1920×1080:MLT,隨時間變化的作物

  • 幀從0到1080
  • 框架200作物X 0作物x在240〜1080 + 240
  • 幀350-380順暢地滑動

最終以給定分辨率(比如640x640)生成1:1寬高比的視頻。

ffmpeg可以靜態執行此操作(即,vf crop = x:y:w:h,scale = 640x640),但是我正在執行此操作,以便裁剪出的部分變化。基本上我希望適應寬屏視頻在谷歌紙板(和類似的)上觀看。

這是直接與mlt?到目前爲止,我已經嘗試過附加仿射過濾器,設置transition.geometry,但我很困惑我正在使用哪個座標(我想用哪些源座標映射到極端的左/右來指定事情)。

回答

1

仿射濾波器是一種很好的方法。

下面是一個例子:

echo " 
description=Square 
frame_rate_num=24 
frame_rate_den=1 
width=640 
height=640 
progressive=1 
sample_aspect_num=1 
sample_aspect_den=1 
display_aspect_num=1 
display_aspect_den=1 
colorspace=708 
" > square_profile.txt 

melt -profile ./square_profile.txt clip.mp4 -filter affine transition.geometry="0=0,0:1138x640; 720=-498,0:1138x640" 

該示例假定:

  • clip.mp4是一個16×9源(1920×1080將工作)
  • 剪輯是720幀長(例如30秒在24 fps)

讓我爲你分解的例子。

第一部分指定一個640x640的自定義配置文件,它具有正方形的寬高比。您不需要每次創建文件。您可以根據您的規格進行定製。

-profile ./square_profile.txt 

這告訴融化使用您的自定義配置文件。

transition.geometry= ... 

這就是你如何告訴仿射過渡(仿射過濾器在內部使用)你想要它做什麼。每個幾何條目的第一個數字是它適用的幀號。過濾器將在幀之間插值。幾何條目的語法是:「K = X,Y:WxH」,其中「K」是幾何圖形適用的關鍵幀。

0=0,0:1138x640 

第一幾何條目告訴仿射濾波器到圖像縮放到1138x640和所述圖像(0,0)處的位置。

640是輸出高度 - 告訴仿射將原始圖像縮放到640的高度以填充輸出幀。 1138是640像素高的16x9圖像的寬度。 1138比輸出圖像寬。而且由於我們將圖像指定爲0,0,圖像的右側部分將被仿射過濾器剪切掉。

720=-498,0:1138x640 

第二幾何條目告訴仿射濾波器,以保持相同的縮放,但是到圖像的-498的x位置進行定位。 489 = 1138 - 640.也就是說,在第一幀中從圖像中裁剪出的像素數量。否定信息表示將圖像定位在輸出框的左側,以便將圖像的左側部分裁剪掉。 「720 =」指定這是第720幀的幾何圖形。

0到720之間的所有幀的x位置將由仿射濾波器自動插值。所以你會看到圖像從左到右滾動。

您可以將更多關鍵幀添加到幾何圖形,以使其在特定位置暫停或使其前後移動。仿射過渡(仿射過濾器使用)也有其他有趣的操作,如鏡像和循環。你可以在這裏看到完整的文檔: http://www.mltframework.org/bin/view/MLT/TransitionAffine#scale

+0

謝謝。我確實閱讀了「完整」文檔。在「幾何」一個只發現: 標題:矩形 類型:幾何 只讀:沒有 要求:沒有 像你這樣的解釋,以什麼參數做。我確實注意到(0,0)將縮放剪輯的左上角放置在左上角(而不是右下角)。 –

+0

好點。我編輯了答案以減少混淆。 – Brian

+0

沒有很多志願者加強文檔。所以有時候需要一些發現。我發現理解這些參數的最簡單方法之一是安裝使用MLT(即KDENLIVE或Shotcut或Flowblade)的開放源代碼視頻編輯器,使用GUI製作您正在查找的效果,然後檢查保存的項目文件。 MLT項目文件是XML,易於閱讀,並可幫助發現參數(如幾何)的工作方式。 – Brian