减少相同格式的视频大小和减少帧大小

这个问题可能是非常基本的

有没有办法减少有损压缩(WMV,MPEG)格式的帧大小/速率,以获得一个较小的视频,较小的尺寸,同样的格式。

是否有任何开放源码或专有的 API?

116016 次浏览

Ffmpeg 提供了这个功能

ffmpeg -i <inputfilename> -s 640x480 -b 512k -vcodec mpeg1video -acodec copy <outputfilename>

对于较新的 ffmpeg 版本,您需要将 -b更改为 -b:v:

ffmpeg -i <inputfilename> -s 640x480 -b:v 512k -vcodec mpeg1video -acodec copy <outputfilename>

使用 MPEG 1视频编解码器将输入的视频文件转换为大小为640 x 480,比特率为512千比特/秒的视频,并只复制原始音频流。当然,您可以插入任何您需要的值,并使用大小和比特率来实现您所寻找的质量/大小权衡。文件中还描述了大量其他选项

运行 ffmpeg -formatsffmpeg -codecs获取所有可用格式和编解码器的列表。如果您不必为最终输出设定特定的编解码器,您可以使用像 H.264这样的最先进的编解码器,以最小的质量损失获得更好的压缩比。

与使用 H.264编解码器选择固定比特率不同,您还可以选择 https://trac.ffmpeg.org/wiki/x264EncodingGuide中描述的不同预置。我还发现 在 KeyJ 的博客上比较视频编码器(存档版本)是一个有趣的读物,它比较了 H.264和 Theora 等。

下面是我尝试过的各种选项的比较。录制的视频最初大小为673M,使用 记录我的屏幕在 iPad 上拍摄。它的分辨率为1024x768,持续时间约为20分钟(视频中有一半是空白的,所以我将其剪切为768x768)。为了减小尺寸,我把分辨率降低到了480x480。没有声音。

结果表明,以1024x768为基准(适用于种植、缩尺和 过滤器) :

  • 没有特殊选项: 95M (编码时间: 1m19s)。
  • 只添加了 -b 512k,大小下降到77M (编码时间: 1m17s)。
  • 只有 -preset veryslow(没有 -b) ,它变成了70M (编码时间: 6m14s)
  • 使用 -b 512k-preset veryslow,大小变为77M (比 -b 512k小100K)。
  • 使用 -preset veryslow -crf 28,我得到一个39M 的文件,需要5m47s (对我来说没有视觉质量差异)。

N = 1,因此对结果持保留态度,并执行您自己的测试。

如果希望保持相同的屏幕大小,可以考虑使用 crf factor: https://trac.ffmpeg.org/wiki/Encode/H.264

下面是适合我的命令: (在 mac 上,你需要添加 -strict -2才能使用 aac 音频编解码器。

ffmpeg -i input.mp4 -c:v libx264 -crf 24 -b:v 1M -c:a aac output.mp4
ffmpeg -i <input.mp4> -b:v 2048k -s 1000x600 -fs 2048k -vcodec mpeg4 -acodec copy <output.mp4>
  • 我输入文件

  • - b: v 以千字节为单位的输出视频的视频比特率(你必须试一试)

  • 输出视频的尺寸

  • - 以千字节为单位的输出视频的 fs 文件归档

  • - vcodec video codec (使用 ffmpeg -codecs列出所有可用的编解码器)

  • - 输出视频的 acodec 音频编解码器(只复制音频流,不要调整)

有一个应用程序为 Mac 和 Windows 调用手刹,我知道这不是命令行的东西,但为一个快速打开文件-选择输出文件格式和粗略的输出大小,同时保持大多数好东西的视频然后这是好的,这只是一个图形视图的 ffmpeg 在其最好的..。 它确实支持命令行输入为那些顽固的短信. 。 Https://handbrake.fr/downloads.php

最近我发现自己也想这么做,所以我创建了一个名为 心理医生的工具,它使用 FFmpeg来对视频进行转码,同时尽可能保留原始元数据(包括文件修改时间戳)。

您可以将其作为一个码头容器运行:

docker run -v /path/to/your/videos:/vids bennetimo/shrinkwrap \
--input-extension mp4 --ffmpeg-opts crf=22,preset=fast /vids

地点:

  • /path/to/your/video/是你想要的视频所在的位置 改变信仰
  • --输入-扩展是你想要处理的视频类型,这里是 mp4
  • —— FFmpeg-opts 是您希望用来定制代码转换的任意 FFmpeg 选项

然后,它将递归地找到所有与扩展名匹配的视频文件,并将它们全部转换为具有 -tc后缀的同名文件。

有关更多配置选项,GoPro 等预置,请参见 自述

希望这对谁有帮助!