这个问题可能很基础
有没有办法减少有损压缩(WMV、MPEG)格式的帧大小/速率,以获得具有相同格式的更小、更小尺寸的视频。
是否有任何开源或专有 api 用于此?
这个问题可能很基础
有没有办法减少有损压缩(WMV、MPEG)格式的帧大小/速率,以获得具有相同格式的更小、更小尺寸的视频。
是否有任何开源或专有 api 用于此?
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 KB/秒的视频,并仅复制原始音频流。当然,您可以插入您需要的任何值,并使用大小和比特率来实现您正在寻找的质量/大小权衡。文档中还描述了许多其他选项
运行ffmpeg -formats
或ffmpeg -codecs
获取所有可用格式和编解码器的列表。如果您不必针对最终输出使用特定的编解码器,则可以使用 H.264 等最先进的编解码器以最小的质量损失实现更好的压缩比。
如果要保持相同的屏幕尺寸,可以考虑使用 crf 因子: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
除了选择固定比特率,使用 H.264 编解码器,您还可以选择不同的预设,如https://trac.ffmpeg.org/wiki/x264EncodingGuide中所述。我还在KeyJ 的博客(存档版本)上发现了视频编码器比较,这是一本有趣的读物,它将 H.264 与 Theora 等进行了比较。
以下是我尝试的各种选项的比较。录制的视频最初大小为 673M,是在 iPad 上使用RecordMyScreen 拍摄的。它的持续时间约为 20 分钟,分辨率为 1024x768(视频的一半是空白的,所以我将其裁剪为 768x768)。为了减小尺寸,我将分辨率降低到 480x480。没有音频。
结果,采用相同的 1024x768 作为基础(并应用裁剪、缩放和过滤器):
-b 512k
添加后,大小降至 77M(编码时间:1m17s)。-preset veryslow
(和没有-b
),它变成了70M(编码时间:6m14s)-b 512k
和-preset veryslow
,大小变为 77M(比 仅小 100K -b 512k
)。-preset veryslow -crf 28
,我得到一个 39M 的文件,耗时 5m47s(对我来说没有视觉质量差异)。N = 1,因此对结果持保留态度并执行您自己的测试。
有一个适用于 Mac 和 Windows 的应用程序调用 Handbrake,我知道这不是命令行的东西,而是用于快速打开文件 - 选择输出文件格式和粗略的输出大小,同时保留大部分关于视频的好东西,那么这很好,它只是 ffmpeg 最好的图形视图......它确实支持那些顽固的文本用户的命令行输入.. https://handbrake.fr/downloads.php
I found myself wanting to do this too recently, so I created a tool called Shrinkwrap that uses FFmpeg to transcode videos, while preserving as much of the original metadata as possible (including file modification timestamps).
You can run it as a docker container:
docker run -v /path/to/your/videos:/vids bennetimo/shrinkwrap \
--input-extension mp4 --ffmpeg-opts crf=22,preset=fast /vids
Where:
Then it will recursively find all of the video files that match the extension and transcode them all into files of the same name with a -tc
suffix.
For more configuration options, presets for GoPro etc, see the readme.
Hope this helps someone!
ffmpeg -i <input.mp4> -b:v 2048k -s 1000x600 -fs 2048k -vcodec mpeg4 -acodec copy <output.mp4>
-i 输入文件
-b:v 以千字节为单位的输出视频的视频比特率(你必须尝试)
-s 输出视频的尺寸
-fs以千字节为单位的输出视频文件大小
-vcodec videocodec(用于ffmpeg -codecs
列出所有可用的编解码器)