FFmpeg:将任何视频转换为带有模糊侧边栏的方形 1:1 视频

L0L*_*ock 1 video command-line ffmpeg windows-scripting

与这个主题非常相似:

\n\n

FFmpeg:如何将带有黑边的垂直视频转换为背景边模糊的 16:9 视频

\n\n

我正在尝试为自己制作一个bat文件,以自动化我的Instagram视频创作。
\n我的想法是制作可变分辨率和可变长宽比的视频。我不想花时间在每个视频上只是为了让它适合。

\n\n

这就是我对该 bat 文件的目标:

\n\n
    \n
  • 必须输出方形视频
  • \n
  • 原始视频无论是什么都必须保持其原始宽高比
  • \n
  • 填充原始视频中的空白和方形纵横比必须用原始视频的方形和模糊版本来填充
  • \n
  • 或者,让我选择输出分辨率(为了节省编码时间,并且据我所知 Instagram 仅显示 600px\xc2\xb2 视频(?))
  • \n
\n\n

到目前为止,我设法获得仅适用于垂直或水平视频的结果,但不能同时适用于两者。或者最终原始视频被裁剪,这是我不想要的:我按照我想要的方式构图我的主题,并且我不想预先考虑 FFmpeg 编码可以进行的额外裁剪来构图它们。

\n\n

到目前为止,这是我的脚本:

\n\n
echo off\n:again\n\nffmpeg.exe -i "%~1" ^\n    -c:v libx264 -crf 23 -filter_complex "[0:v]scale=600*2:600*2,boxblur=luma_radius=min(h\\,w)/20:luma_power=1:chroma_radius=min(cw\\,ch)/20:chroma_power=1[bg];[0:v]scale=600:-1[ov];[bg][ov]overlay=(W-w)/2:(H-h)/2,crop=w=600:h=600"  -profile:v baseline -level 3.0 -pix_fmt yuv420p -preset faster -tune fastdecode ^\n    -c:a aac -ac 2 -b:a 128k ^\n    -movflags faststart ^\n    "%~p1%~n1_Instagramized.mp4" -y\n\nif NOT ["%errorlevel%"]==["0"] pause\nshift\nif "%~1" == "" goto:eof\ngoto:again\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑:

\n\n

感谢@Gyan 我得到了解决方案。我也添加了我的输入:

\n\n

由于我可能经常重复使用该 bat 文件并且可能想要更改输出分辨率,因此将分辨率硬编码在六个不同的位置并不方便。
\n因此,我创建了一个名为SquareSizeusing %SquareSize%(而不是硬编码分辨率)的变量,并使用set SquareSize=XXX. 所以现在我可以在需要时轻松更改,只需打开它并编辑 XXX.txt 文件即可。

\n\n
echo off\n:again\n\nset SquareSize=600\n\nffmpeg.exe -i "%~1" ^\n    -c:v libx264 -crf 23 ^\n    -filter_complex "[0:v]split=2[blur][vid];[blur]scale=%SquareSize%:%SquareSize%:force_original_aspect_ratio=increase,crop=%SquareSize%:%SquareSize%,boxblur=luma_radius=min(h\\,w)/20:luma_power=1:chroma_radius=min(cw\\,ch)/20:chroma_power=1[bg];[vid]scale=%SquareSize%:%SquareSize%:force_original_aspect_ratio=decrease[ov];[bg][ov]overlay=(W-w)/2:(H-h)/2" ^\n    -profile:v baseline -level 3.0 -pix_fmt yuv420p -preset faster -tune fastdecode ^\n    -c:a aac -ac 2 -b:a 128k ^\n    -movflags faststart ^\n    "%~p1%~n1_Instagramized.mp4" -y\n\nif NOT ["%errorlevel%"]==["0"] pause\nshift\nif "%~1" == "" goto:eof\ngoto:again\n
Run Code Online (Sandbox Code Playgroud)\n

Gya*_*yan 5

这就是filter_complex应该是的,

"[0:v]split=2[blur][vid];[blur]scale=L:L:force_original_aspect_ratio=increase,crop=L:L,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[vid]scale=L:L:force_original_aspect_ratio=decrease[ov];[bg][ov]overlay=(W-w)/2:(H-h)/2"

替换L为文字数字或变量,表示边的长度。