繁体   English   中英

更改视频分辨率 ffmpeg

[英]Change video resolution ffmpeg

我有不同分辨率的视频。 我希望所有这些都具有 480x320 的分辨率。 我试过命令:

ffmpeg -i %s_ann.mp4 -vf scale=480x320,setsar=1:1 %s_annShrink.mp4' %(dstfile,dstfile)

但是视频的output是大小为0 kb的文件。

我做错了什么?

我想这里真的有两个问题......

  1. 如何批量转换文件?
  2. 如何自动缩放视频?

如何批量转换文件?

这些脚本应该可以解决问题...

视窗

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 脚本中的输出文件扩展,值得验证。)


如何自动缩放视频?

这有点棘手。 当你有你的命令时,纵横比可能会搞砸。 这里的选项...

  1. 缩放视频,忽略纵横比。 结果 = 视频失真
  2. 缩放视频,保持纵横比,以便调整缩放的高度(或宽度)以适应。 结果 = 最佳
  3. 缩放视频,保持纵横比并用黑条填充,使视频大小正好为 480x320。 结果 = 浪费/增加的文件大小
  4. 在缩放之前裁剪输入,使其“填充”480x320 分辨率。 结果 = 不完整的视频

选项 2 将是首选解决方案,否则您(可能不必要地)增加输出文件大小。 选项 3,我将给出一个经过部分测试的解决方案。 选项4我什至不会碰。

选项 2:缩放视频,保持纵横比,以便调整高度以适应

ffmpeg -y -i "%%i" -vf scale=480:-2,setsar=1:1 -c:v libx264 -c:a copy "%%~ni_shrink.mp4"

选项 3:缩放视频,保持宽高比并用黑条填充,使视频大小正好为 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"

您可以使用 ffmpeg 工具并输入命令

ffmpeg -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=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

我没有设法使视频缩放从以前的答案中正确工作,所以我自己研究了这个,我想为这些添加一个当前和更详细的答案。

缩放:

参考: https://trac.ffmpeg.org/wiki/Scaling - 请查看此处未涵盖的内容。 这通过示例非常清楚地涵盖了缩放命令。 scale命令适用于图像和视频。

下面最基本的缩放命令将简单地将视频调整为所需的像素大小。 如果输入和 output 纵横比不同,这可能会导致视频失真。

ffmpeg -i input.mov -vf scale=320:240 output.mp4

要保持纵横比,您可以只指定宽度,然后是-1 ,它将计算高度以保持输入的纵横比:

ffmpeg -i input.mov -vf scale=320:-1 output.mp4

压缩

如果您还想压缩视频大小,您会发现通常推荐使用libx265编解码器。 然而,这不适用于缩放命令:在我的测试中,我发现颜色通道的位置不同,因此有可见的重影覆盖。

而是使用 libx264 编解码器并添加 -crf 标志 这应该是 for.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

  • 缩放到1920:-2 at -crf 0会产生一个 847,266 KB 的文件,仅由于重新缩放而导致轻微的质量损失
  • -crf 1处缩放到1920:-2会产生一个 747,738 KB 的文件,仅由于重新缩放会导致轻微的质量损失
  • 缩放到1920:-2 at -crf 10导致 191,491 KB 文件轻微质量损失,仅由于重新缩放
  • 缩放到1920:-2 at -crf 20会产生一个 19,735 KB 的文件,质量会进一步下降,但仍然相当不错
  • 缩放到1920:-2 at -crf 30会产生一个 4,537 KB 的文件,质量损失更大,仅用作预览质量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM