如何将视频大小压缩90%?

科技   2024-10-22 13:32   江苏  

前阵子,有一款视频压缩工具在网络上火了。这个工具叫做 tools.rotato.app,只需要在网页上传视频,就能给你几乎无损地压缩到原视频的10%左右大小。

然后你可以下载压缩好的视频,也可以在网页上快速对比压缩前后的视频质量。

这个工具背后其实是利用ffmpeg这个强大的开源多媒体工具,对视频进行了转码和压缩的操作。

你在电脑上安装一下ffmpeg,也可以用一行命令实现类似效果:

ffmpeg -i "input.mp4" -c:v libx264 -tag:v avc1 -movflags faststart -crf 30 -preset superfast "output.mp4"

而如果你希望通过Python代码进行视频压缩,则可以使用ffmpeg-python库来实现:

import ffmpegdef compress_video(input_file, output_file, target_size_mb=50):    # 获取输入视频的信息    probe = ffmpeg.probe(input_file)    # 获取视频流信息    video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None)        # 获取原始视频的比特率    original_bitrate = int(video_stream['bit_rate'])        # 计算目标比特率(假设音频比特率为128k)    target_total_bitrate = (target_size_mb * 8192) / (int(video_stream['duration']))    target_video_bitrate = target_total_bitrate - 128    # 确保目标视频比特率不低于原始比特率的10%    min_bitrate = original_bitrate * 0.1    if target_video_bitrate < min_bitrate:        target_video_bitrate = min_bitrate    # 设置输出参数    output_params = {        'vcodec': 'libx264',        'acodec': 'aac',        'video_bitrate': str(int(target_video_bitrate)),        'audio_bitrate': '128k'    }    # 进行视频压缩    (        ffmpeg        .input(input_file)        .output(output_file, **output_params)        .overwrite_output()        .run()    )    print(f"视频已压缩并保存为 {output_file}")# 使用示例input_file = 'input_video.mp4'output_file = 'compressed_video.mp4'compress_video(input_file, output_file, target_size_mb=50)

通过代码调用的好处是可以更灵活地与其他任务整合,比如批量压缩。

从算法原理上来说,对于视频的压缩,一方面是对单帧画面内容的压缩,比如大片的蓝天,信息量较少,就可以用更少的空间来存储。另一方面是对不同帧之间内容的压缩,比如一段连续的场景,背景都是相同的,只有少部分区域在变化,就可以只记录变化的部分。

那既然视频可以很容易地压到这么小,为什么我们不直接用压缩好的视频呢?

答案是:已经用上了

现在你在视频平台上看到的,基本上全是压缩过的视频。

但问题也来了:前面我们说到,这种压缩是「几乎」无损。换句话说,那就是有质量上的损失。只不过这种损失不仔细看不太看得出来。

前阵子,头部视频UP主『影视飓风』就做了一期视频,分析了现在各大平台上的视频画质,结果甚至不如四年前清晰。而这里面主要原因,就是因为选择了更高压缩率的编码方式和更低的码率。

虽说压缩是几乎无损,但不同人对于这个「几乎」的感知是不一样的。有的人用手机看短视频,对于画质的要求就不那么重要;而有的人用高清显示器看大片,则更容易感觉到压缩带来的模糊。

因此视频压缩在这个问题上已经不单单是一个技术问题。

它也是一个商业问题:既然大多数观众不太能感觉出来,而压缩后更小的体积可以为公司节省大量的流量成本,那么在观众可接受的范围内尽可能压到极致就是一个商业公司的最佳选择。

那到底什么程度才算是用户可接受的?这没有一个定量上的标准。

就好比,假如你写一行代码就会掉一根头发。但满头秀发的你,多掉一根也不并会变秃。那么再多掉一根呢?再多掉一根呢?再多掉一根呢……

直到最后,你秃了,也变强了。但到底什么时候收手可以让自己算不上秃,又足够强呢?没人说得清。

于是这甚至上升到了一个哲学问题。

或许他们的想法就是,不断在用户容忍度的边缘疯狂试探,直到有很多人表示不可接受为止

而几年前的「高清」时代,也只是平台高速增长期,赔本赚吆喝的「烧钱」行为,恐怕无法再重现。

除非像美剧《硅谷》中一样,从技术上实现一种无损的超高压缩率,同时编解码效率又极高的压缩算法。目前来看,这是一个不可能三角。

如果真的有这样的算法,那么绝对可以像剧中主角团队一样,获得巨大的商业价值,甚至再次改变世界。



Crossin的新书《码上行动:用ChatGPT学会Python编程》已经上市了。本书以ChatGPT为辅助,系统全面地讲解了如何掌握Python编程,适合Python零基础入门的读者学习。【点此查看详细介绍】

购买后可加入读者交流群,Crossin为你开启陪读模式,解答你在阅读本书时的一切疑问。
Crossin的其他书籍:



添加微信 crossin123 ,加入编程教室共同学习~

感谢转发点赞的各位~

Crossin的编程教室
每天5分钟,轻松学编程。点击关注这里有浅显易懂的 Python 入门教程。 编程世界的新手指南。
 最新文章