我正在尝试在FFmpeg中编写一个命令,该命令首先将一个视频流叠加在另一个视频流之上。然后我希望叠加的视频在已知时间从一个像素坐标移动,然后在另一个像素坐标处结束。
我对-filter_complex
的基础知识感到满意,但我无法弄清楚如何应用任何算术表达式 - 就像这里引用的那样:https://www.ffmpeg.org/ffmpeg-utils.html#Expression-Evaluation
这是我想要完成的一个例子。
ffmpeg -i [INPUT1] -i [INPUT2] -filter_complex "[0:v][1:v]overlay=shortest=1:x=720:y=0:enable='between(t,10,20)'[overlay];...
在此示例中,叠加层在从第10秒到第20秒的像素坐标720x0处静止。
但是,我想让它以线性方式移动到新位置并以不同的像素坐标结束。
例如,在10秒覆盖期间,我希望它从720x0开始,但以1000x100结束。
这可能吗?
答案 0 :(得分:2)
这是关于你要找的东西吗?
这个糟糕的例子持续时间为6秒。红色框在2秒后出现,并在3秒后结束。
示例:
<html>
<head>
<meta http-equiv="content-type" content="text/html;" charset="UTF-8">
<style>
/** Specify a font named "MyFont",
and specify the URL where it can be found: */
@font-face {
font-family: "MyFont";
<!-- you can set Custom font here -->
src: url('file:///android_asset/fonts/BLKCHCRY.TTF');
}
h3 { font-family:"MyFont"}
</style>
</head>
<body>
<h3>
Welcome to CustomFont Demo
</h3>
</body>
在10秒内将public class MainActivity extends Activity {
WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Getting reference to WebView of the activity_main layout
mWebView = (WebView) findViewById(R.id.webview);
// Loading an html page into webview
mWebView.loadUrl("file:///android_asset/demo.html");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
从位置720移至1000。这相当于28像素/秒。
ffmpeg -i bg.mp4 -i fg.mkv -filter_complex \
"[0:v][1:v]overlay=enable='between=(t,10,20)':x=720+t*28:y=t*10[out]" \
-map "[out]" output.mkv
很容易。
x
是以秒为单位的时间戳。
重叠的视频(此示例中为y
)在显示的持续时间内已经是10秒。