使用libjpeg yuv422格式压缩jpeg_使用格式工厂压缩视频

线上教育教学,视频课程分享,容量和质量是很关键的因素,容量太大网络存储、传输压力大,消耗流量大,如果容量小可能导致视频声画质量损失,听感观感下降,老师们在做视频的时候可以按高标准输出一个容量大、质量好的视频,然后再通过格式工厂来压缩,通过设置合适的参数来达到容量和质量的一个平衡。

格式工厂是目前一个免费的,压缩质量比较好的软件,本文以格式工厂软件为例进行操作说明,其他的视频压缩软件方法类似,可以借鉴。

软件推荐到官方网站上下载,在搜索引擎或别的网站下载的有可能被绑定广告软件或恶意软件。

e6d3361d30262f7ea565f88c2c02f0d0.png
格式工厂 官方主页 - 免费多功能的多媒体文件转换工具​www.pcgeshi.com

ac50f25c1a7756477109b14cad35cf55.png
格式工厂界面

cc0faabaf3601846526d974001b938cf.png
点击MP4格式进行压缩

一般压缩成MP4格式,这个格式是国际视频行业协会制定的标准,具有广泛的通用性,所有的平板电视,平板电脑,电脑,手机(安卓或苹果)原生都可以播放MP4格式的视频。

知乎视频​www.zhihu.com
zhihu-card-default.svg

压缩在不改变视频画面尺寸的情况下,参数主要设置CRF值,CRF是h.264和h.265中默认的质量/码率控制设置参数。这个值可以在0到51之间,值越低,质量越好,文件大小越大,一般取值为18-28之间,建议设为22。

214b455eef160058bc2a8b88261ec2ae.png

压缩后的视频容量视原视频的编码格式会有差异,一般20分钟的1080P网课视频,可以压缩到500MB以内,甚至200MB左右,大大方便了传输。

如何确定压缩之后的视频质量呢,我们用肉眼直接查看即可,如果没有觉察到明显的模糊、抖动、变形,或者破音的问题,那么这个视频质量就是可以的。也可以发到手机上,用手机的屏幕来观看以确定效果可以接受。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用libjpeg库将YUV420p压缩JPEG格式的C++代码示例: ```cpp #include <stdio.h> #include <jpeglib.h> void compress_yuv_to_jpeg(unsigned char* yuv, int width, int height, int quality, const char* filename) { struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; FILE* outfile = fopen(filename, "wb"); if (!outfile) { fprintf(stderr, "Failed to open output file.\n"); return; } cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); jpeg_stdio_dest(&cinfo, outfile); cinfo.image_width = width; cinfo.image_height = height; cinfo.input_components = 3; // YUV420p是3个颜色分量 cinfo.in_color_space = JCS_YCbCr; jpeg_set_defaults(&cinfo); jpeg_set_quality(&cinfo, quality, TRUE); JSAMPROW row_pointer[1]; int row_stride; jpeg_start_compress(&cinfo, TRUE); row_stride = width * 3; while (cinfo.next_scanline < cinfo.image_height) { row_pointer[0] = &yuv[cinfo.next_scanline * row_stride]; jpeg_write_scanlines(&cinfo, row_pointer, 1); } jpeg_finish_compress(&cinfo); fclose(outfile); jpeg_destroy_compress(&cinfo); } int main() { // 假设你已经将YUV420p数据存储在unsigned char* yuv中 unsigned char* yuv; int width, height; int quality = 80; // JPEG质量设置为80 const char* filename = "output.jpg"; // 假设你已经设置了yuv的宽度和高度 compress_yuv_to_jpeg(yuv, width, height, quality, filename); return 0; } ``` 这段代码使用libjpeg库中的函数和结构体来进行压缩。它将YUV420p数据写入到一个JPEG文件中,你可以通过调整quality参数来控制JPEG压缩质量。请确保你已经安装了libjpeg库并在编译时链接到对应的库文件。 注意:这只是一个简单的示例代码,实际使用中可能需要更多的错误处理和输入验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值