FFMPEG,使用图像选择区域插件

时间:2016-07-10 06:30:49

标签: javascript jquery css video ffmpeg

我正在建立一个在线视频编辑器。我需要允许用户模糊电影区域。这必须以图形方式完成,我的意思是用户应该能够使用屏幕截图选择视频区域,然后必须模糊所选区域。像这样的事情

enter image description here

是否有将此选定区域尺寸及其与边框的距离映射到必须应用于视频的实际值?

我的意思是使用此插件提供四个数字width, length, top, left,我需要使用这些数字来模糊视频区域。

我拍了一段视频截图。为了保持纵横比,我将宽度固定为800px并让高度按比例放大/缩小。很明显,屏幕截图所选区域的width, length, top, left是视频中必须模糊的区域width, length, top, left的因子。但我不知道如何得到这个因素。除此之外,我不知道如何获得视频分辨率。

提前致谢。

更新

这是我的PHP代码,它可以获取所选的区域尺寸和偏移量

$iLeft = $_POST['left'];
$iTop = $_POST['top'];
$iWidth = $_POST['width'];
$iHeight = $_POST['height'];
exec('ffmpeg -i '.$url.' -filter_complex "[0:v]scale=iw*sar:ih,setsar=1,split[bg][bb];[bb]crop='.$iWidth.'*iw/800:iw*'.$iHeight.'/800:'.$iWidth.'*iw/800:'.$iHeight.'*iw/800,boxblur=10[b0];[bg][b0]overlay='.$iLeft.'*W/800:'.$iTop.'*W/800"" '.$name.' > block.txt 2>&1');

$iLeft, $iTop, $iWidth, $iHeight是通过图片插件选定区域的左侧,顶部,宽度和高度。

它很好地模糊了许多选定的区域,但是像这样的区域

enter image description here

图片Left, Top, Width, Height257, 39.26666259765625, 10, 391

不要模糊。另外,尺寸为207x207的视频也不会模糊。

1 个答案:

答案 0 :(得分:1)

运行

ffprobe in.mp4 -loglevel quiet -select_streams v -show_entries stream=width,height,sample_aspect_ratio -of compact=p=0:nk=1

将生成如下所示的输出:

1280|720|1:1

第一个条目是视频宽度,然后是高度,最后是像素或样本宽高比,显示为num:den,因此它是num / den。这是您的视频分辨率。

使用该信息,因子为video-width*sar/800。这假设您使用scalesetsar过滤器将所有变形视频缩放为方形像素,并且800px屏幕截图也不会失真。如果您正在使用FFmpeg缩放屏幕截图,那么scale=800:ih*800/iw/sar

因此区域宽度的FFmpeg值为screenshot area width * video-width*sar/800

和FFmpeg Y坐标是screenshot top * video-width*sar/800,依此类推。

假设评论中的代码用于截图,对于全尺寸电影,它将是

"[0:v]scale=iw*sar:ih,setsar=1,split[bg][bb];[bb]crop=50*iw/800:50*iw/800:20*iw/800:10*iw/800,boxblur='min(min(cw/2\,ch/2)\,10)'[b0];
 [bg][b0]overlay=20*W/800:10*W/800"

我已经缩放了电影,以确保我们始终处理方像素视频。