我有不同分辨率的视频。我希望它们全部都能以480x320的分辨率播放。我尝试了以下命令:
ffmpeg -i %s_ann.mp4 -vf scale=480x320,setsar=1:1 %s_annShrink.mp4' %(dstfile,dstfile)
但是视频的输出文件大小为0 kb。
我做错了什么?
我有不同分辨率的视频。我希望它们全部都能以480x320的分辨率播放。我尝试了以下命令:
ffmpeg -i %s_ann.mp4 -vf scale=480x320,setsar=1:1 %s_annShrink.mp4' %(dstfile,dstfile)
但是视频的输出文件大小为0 kb。
我做错了什么?
我猜这里实际上有两个问题...
以下脚本应该能解决问题...
Windows
for %%i in (*.mp4) do (
ffmpeg -y -i "%%i" << TODO >> "%%~ni_shrink.mp4"
)
Linux(未经测试!)
for i in *.mp4;
do
ffmpeg -y -i "$i" << TODO >> "${i%.mp4}_shrink.mp4";
done
(我不太确定Linux脚本中的输出文件扩展名,值得验证一下。)
这有点棘手。由于您已经有了命令,因此可能会破坏宽高比。以下是您可以选择的选项...
选项2将是首选解决方案,否则您(可能没有必要地)增加输出文件的大小。对于选项3,我将提供部分经过测试的解决方案。选项4我甚至不会接触。
选项2:缩放视频,保持宽高比,调整高度以适合
ffmpeg -y -i "%%i" -vf scale=480:-2,setsar=1:1 -c:v libx264 -c:a copy "%%~ni_shrink.mp4"
选项三:按比例缩放视频,并用黑色条填充以保持视频大小恰好为480x320
ffmpeg -y -i "%%i" -vf "[in]scale=iw*min(480/iw\,320/ih):ih*min(480/iw\,320/ih)[scaled]; [scaled]pad=480:320:(480-iw*min(480/iw\,320/ih))/2:(320-ih*min(480/iw\,320/ih))/2[padded]; [padded]setsar=1:1[out]" -c:v libx264 -c:a copy "%%~ni_shrink.mp4"
-vf scale=-2:320,setsar=1:1
吗? - Sodjffmpeg -i input.mp4 -vf scale=480:320 output_320.mp4
或者如果您想更改视频宽高比,请使用setdar。ffmpeg -i input.mp4 -vf scale=480:320,setdar=4:3 output_320.mp4
ffmpeg -i input.mp4 -vf "scale=480:320" output_320.mp4
。 - Alexey Antonenko我之前没有能够从以前的答案中正确地使视频缩放工作,所以我自己研究了一下,想要添加一个当前和更详细的答案。
参考:https://trac.ffmpeg.org/wiki/Scaling - 请查看此内容以了解这里未涵盖的任何内容。 这个页面清楚地介绍了缩放命令及其示例。 scale
命令适用于图像和视频。
以下是最基本的缩放命令,它将简单地将视频调整为所需的像素大小。 如果输入和输出的长宽比不同,则可能会导致视频失真。
ffmpeg -i input.mov -vf scale=320:240 output.mp4
为了保持纵横比,您可以仅指定宽度,然后接上 -1
,它将计算出高度以保持输入的纵横比:
ffmpeg -i input.mov -vf scale=320:-1 output.mp4
如果您还希望压缩视频大小,则会发现经常推荐使用 libx265
编解码器。 但是,这不适用于缩放命令:在我的测试中,我发现颜色通道的位置不同,因此存在可见的幽灵重叠。
相反,请使用 libx264 编解码器并添加 -crf 标志。这应该是 .mp4 输出的默认设置,但我建议指定它以为您的脚本提供未来的保障。
ffmpeg -i input.mov -vf scale=1920:-2 -vcodec libx264 -crf 20 output.mp4
注意:在缩放中,您还需要使用 -2
而不是 -1
。 这确保纵横比始终符合编解码器要求。
我使用 Canon 5Div 拍摄了一个 4K RAW 视频进行了一些测试:
原始文件大小为 2,128,665 KB
-crf 0
的参数将分辨率扩大至1920:-2
,导致文件大小为847266 KB,因为重新缩放而出现轻微质量损失。-crf 1
的参数将分辨率扩大至1920:-2
,导致文件大小为747738 KB,因为重新缩放而出现轻微质量损失。-crf 10
的参数将分辨率扩大至1920:-2
,导致文件大小为191491 KB,因为重新缩放而出现轻微质量损失。-crf 20
的参数将分辨率扩大至1920:-2
,导致文件大小为19735 KB,会有进一步的质量损失,但依然相当不错。-crf 30
的参数将分辨率扩大至1920:-2
,导致文件大小为4537 KB,会有更进一步的质量损失,只能用作预览质量。ffmpeg -i input.mp4 -vf scale=640x480:flags=lanczos -c:v libx264 -preset slow -crf 21 output_compress_480p.mp4
使用FFMPEG进行视频升级
ffmpeg -i input.mp4 -vf scale=1920x1080:flags=lanczos -c:v libx264 -preset slow -crf 21 output_compress_1080p.mp4