【问题标题】:FFMPEG, Blur an area of a video using Image Select Areas PluginFFMPEG,使用图像选择区域插件模糊视频区域
【发布时间】:2016-11-12 08:34:45
【问题描述】:

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

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

我的意思是四个数字,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是图片插件选中区域的左、上、宽、高。

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

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

不要弄糊涂。此外,Dimension 207x207 的视频也没有变得模糊。

【问题讨论】:

    标签: javascript jquery css video ffmpeg


    【解决方案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"
    

    我已经对影片进行了缩放,以确保我们始终处理的是方形像素视频。

    【讨论】:

    • 非常感谢。这是我用来模糊矩形的代码ffmpeg -i 1_test.mov -filter_complex "[0:v]crop=50:50:20:10,boxblur=10[b0];[0:v][b0]overlay=10:10" intro-blur.mov。我想我可以简化过滤器,对吧? 50:50 是模糊区域的宽度/高度,overlay=10:10 是它的顶部/左侧。如何通过替换您上面提到的新值来简化此代码?其实我需要重写这段代码
    • 查看编辑。请注意,top 是 Y,left 是 X,所以就您的原始名称而言,它是 overlay=left:topcrop=width:length:left:top
    • [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=10[b0]; [bg][b0]overlay=20*W/800:10*W/800中Image Select Plugin的变量在哪里使用?
    • 但是这段代码运行的很完美,比上一个要好。再次感谢
    • 还有一个问题。我从http://superuser.com/questions/901099/ffmpeg-apply-blur-over-face 获得了模糊代码。他说 叠加层中的 x 和 y 偏移量必须与裁剪偏移量匹配。我使用上述变量进行模糊的代码不会转换某些视频。有没有更简单的模糊代码?
    猜你喜欢
    • 2013-12-09
    • 2013-01-10
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多