FFmpeg:将任何视频转换为边栏模糊的正方形 1:1 视频
FFmpeg: convert any video to square 1:1 video with blurred side bars
与这个主题非常相似:
我正在尝试为自己制作一个 bat 文件,以自动创建我的 Instagram 视频。
我的想法是制作可变分辨率和可变纵横比的视频。我不想花时间在每个视频上只是为了让它合适。
所以这是我使用该 bat 文件的目标:
- 必须输出方形视频
- 原始视频无论是什么都必须保持其原始宽高比
- 填补原始视频空白的空白和方形宽高比必须用原始视频的方形和模糊版本填充
- 可选,让我选择输出分辨率(为了节省编码时间,因为 AFAIK Instagram 仅显示 600px² 视频(?))
到目前为止,我设法获得了仅适用于垂直或水平视频但不能同时适用于两者的结果。或者最终裁剪原始视频,这是我不想要的:我按照自己的意愿构图我的主题,我不想预先构图 FFmpeg 编码可以做的额外裁剪。
到目前为止,这是我的脚本:
echo off
:again
ffmpeg.exe -i "%~1" ^
-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 ^
-c:a aac -ac 2 -b:a 128k ^
-movflags faststart ^
"%~p1%~n1_Instagramized.mp4" -y
if NOT ["%errorlevel%"]==["0"] pause
shift
if "%~1" == "" goto:eof
goto:again
编辑:
感谢@Gyan,我得到了 。我也添加了我的输入:
由于我可能经常重复使用该 bat 文件并且可能想要更改输出分辨率,因此将分辨率硬编码在六个不同的地方并不方便。
所以我创建了一个名为 SquareSize
的变量,它使用 %SquareSize%
(而不是硬编码分辨率)调用,并使用 set SquareSize=XXX
在文件开头设置。所以现在我可以在需要时轻松更改,只需打开它并编辑 XXX。
echo off
:again
set SquareSize=600
ffmpeg.exe -i "%~1" ^
-c:v libx264 -crf 23 ^
-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" ^
-profile:v baseline -level 3.0 -pix_fmt yuv420p -preset faster -tune fastdecode ^
-c:a aac -ac 2 -b:a 128k ^
-movflags faststart ^
"%~p1%~n1_Instagramized.mp4" -y
if NOT ["%errorlevel%"]==["0"] pause
shift
if "%~1" == "" goto:eof
goto:again
这就是 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
替换为代表边长的文字数字或变量。
与这个主题非常相似:
我正在尝试为自己制作一个 bat 文件,以自动创建我的 Instagram 视频。
我的想法是制作可变分辨率和可变纵横比的视频。我不想花时间在每个视频上只是为了让它合适。
所以这是我使用该 bat 文件的目标:
- 必须输出方形视频
- 原始视频无论是什么都必须保持其原始宽高比
- 填补原始视频空白的空白和方形宽高比必须用原始视频的方形和模糊版本填充
- 可选,让我选择输出分辨率(为了节省编码时间,因为 AFAIK Instagram 仅显示 600px² 视频(?))
到目前为止,我设法获得了仅适用于垂直或水平视频但不能同时适用于两者的结果。或者最终裁剪原始视频,这是我不想要的:我按照自己的意愿构图我的主题,我不想预先构图 FFmpeg 编码可以做的额外裁剪。
到目前为止,这是我的脚本:
echo off
:again
ffmpeg.exe -i "%~1" ^
-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 ^
-c:a aac -ac 2 -b:a 128k ^
-movflags faststart ^
"%~p1%~n1_Instagramized.mp4" -y
if NOT ["%errorlevel%"]==["0"] pause
shift
if "%~1" == "" goto:eof
goto:again
编辑:
感谢@Gyan,我得到了
由于我可能经常重复使用该 bat 文件并且可能想要更改输出分辨率,因此将分辨率硬编码在六个不同的地方并不方便。
所以我创建了一个名为 SquareSize
的变量,它使用 %SquareSize%
(而不是硬编码分辨率)调用,并使用 set SquareSize=XXX
在文件开头设置。所以现在我可以在需要时轻松更改,只需打开它并编辑 XXX。
echo off
:again
set SquareSize=600
ffmpeg.exe -i "%~1" ^
-c:v libx264 -crf 23 ^
-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" ^
-profile:v baseline -level 3.0 -pix_fmt yuv420p -preset faster -tune fastdecode ^
-c:a aac -ac 2 -b:a 128k ^
-movflags faststart ^
"%~p1%~n1_Instagramized.mp4" -y
if NOT ["%errorlevel%"]==["0"] pause
shift
if "%~1" == "" goto:eof
goto:again
这就是 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
替换为代表边长的文字数字或变量。