Python 怎样将视频压缩?并且尽量不会影响到清晰度

2019-08-15 16:11:36 +08:00
 awli

视频压缩

项目详情

我目前在做一个项目,关于短视频压缩的,但是我不知道怎么可以更加良好的将视频转化为更小,但是清晰度不太多的方式,之前我了解了一些 ffmpeg 的方式压缩视频,但是,这些会对视频产生较不好的影响,或者压缩力度不太够. 现在的话,我可以获取到视频的空间复杂度,时间复杂度,及其它的参数.我应该怎样做,可以按照一定的规则.让他给我算出一个参数,让我转换呢

6019 次点击
所在节点    Python
30 条回复
rogwan
2019-08-15 16:17:02 +08:00
用时间换质量。时间、压缩率、清晰度之间,找到一个符合自己产品需求的就好,不如,你不需要快速完成转码,那就用高质量的压缩方式,但是很耗时;相反,如果必须很快完成,那就只能降低清晰度要求,或者加大算力,压缩视频很耗 CPU 的。
augustheart
2019-08-15 16:19:47 +08:00
这个算法做出来就可以发表了……
linhua
2019-08-15 16:22:06 +08:00
hu8245
2019-08-15 16:23:39 +08:00
没有可能啊兄弟,你这违背力学三大定律啊 DXXX
挑一个各方面比较均衡的 codec 比较可行
expy
2019-08-15 16:28:36 +08:00
常用的编码不就是 H264/H265 么,要低码率下可看,只能调高参数拿 cpu 慢慢压缩了。

开源的编码器有 x264/x265,计算密集型的任务应该不会拿 py 实现。
awli
2019-08-15 16:29:52 +08:00
@rogwan 目前是这样的,我很清楚自己的需求,是要求清晰度.压缩率的话,压缩 30%-20%之间都可以.但是如果说我单单指定转码格式为 h264 的话,这个压缩率达不到我的预期.
awli
2019-08-15 16:31:35 +08:00
不知道你们了不了解阿里云的窄带高清,我就是想实现一个类似他的程序.但是会差很多
BlackBerry999
2019-08-15 16:34:51 +08:00
@awli h265 还不满足吗?
loveour
2019-08-15 16:38:16 +08:00
各种编码的效率都是有定数的,能到到什么码率什么分辨率什么效果基本也是定的,参数可以调整,但是一种新的编码格式不是随随便便就能研发出来的。如果现有的编码格式调整参数以后满足不了你的需求,那这个问题对个人乃至小的团队应该都是无解的。
annielong
2019-08-15 16:46:05 +08:00
反正自己设置同样的画面尺寸和压缩率,压缩出来还是不如从小草下的视频
awli
2019-08-15 16:46:39 +08:00
@BlackBerry999 嗯,我的团队比较小,但是他们不满足于这样,我已经可以转为 h265 了
awli
2019-08-15 16:48:22 +08:00
@loveour 我就是想动态的获取这些参数,现有的 h265 其实可以满足我们的需求的.只是,数据量有些大
msg7086
2019-08-15 16:50:53 +08:00
x264 和 x265 都可以通过更改量化来丢弃细节数据,达到减少信息熵的目的。
不过因为不知道你原本的视频压缩程度如何,所以没办法给你确切的压缩效果。
(而且不仅我不能,任何人都不能。)

比如说蓝光碟一般会把视频压缩到 5.5%左右,有线电视节目一般会压缩到 4.5%左右,PT 站发布的高清视频一般压缩到 2%,在线网站一般压缩到 0.5%以下。

如果你对 0.5%还不满足,还想着往下压缩 20-30%还不想明显影响清晰度的话,那就老老实实花大钱吧。5 倍 10 倍的时间压 AV1 去,说不定能接近你的要求。
awli
2019-08-15 16:53:17 +08:00
@msg7086 我本身的数据目前的数据,'{
'streams': [
{
'index': 0,
'codec_name': 'h264',
'codec_long_name': 'H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10',
'profile': 'High',
'codec_type': 'video',
'codec_time_base': '3/179',
'codec_tag_string': 'avc1',
'codec_tag': '0x31637661',
'width': 1088,
'height': 512,
'coded_width': 1088,
'coded_height': 512,
'has_b_frames': 2,
'pix_fmt': 'yuv420p',
'level': 31,
'chroma_location': 'left',
'refs': 1,
'is_avc': 'true',
'nal_length_size': '4',
'r_frame_rate': '179/6',
'avg_frame_rate': '179/6',
'time_base': '1/11456',
'start_pts': 0,
'start_time': '0.000000',
'duration_ts': 171648,
'duration': '14.983240',
'bit_rate': '2850063',
'bits_per_raw_sample': '8',
'nb_frames': '447',
'disposition': {
'default': 1,
'dub': 0,
'original': 0,
'comment': 0,
'lyrics': 0,
'karaoke': 0,
'forced': 0,
'hearing_impaired': 0,
'visual_impaired': 0,
'clean_effects': 0,
'attached_pic': 0,
'timed_thumbnails': 0
},
'tags': {
'language': 'und',
'handler_name': 'VideoHandler'
}
},
{
'index': 1,
'codec_name': 'aac',
'codec_long_name': 'AAC (Advanced Audio Coding)',
'profile': 'LC',
'codec_type': 'audio',
'codec_time_base': '1/44100',
'codec_tag_string': 'mp4a',
'codec_tag': '0x6134706d',
'sample_fmt': 'fltp',
'sample_rate': '44100',
'channels': 2,
'channel_layout': 'stereo',
'bits_per_sample': 0,
'r_frame_rate': '0/0',
'avg_frame_rate': '0/0',
'time_base': '1/44100',
'start_pts': 0,
'start_time': '0.000000',
'duration_ts': 657399,
'duration': '14.907007',
'bit_rate': '128207',
'max_bit_rate': '128207',
'nb_frames': '644',
'disposition': {
'default': 1,
'dub': 0,
'original': 0,
'comment': 0,
'lyrics': 0,
'karaoke': 0,
'forced': 0,
'hearing_impaired': 0,
'visual_impaired': 0,
'clean_effects': 0,
'attached_pic': 0,
'timed_thumbnails': 0
},
'tags': {
'language': 'und',
'handler_name': 'SoundHandler'
}
}],
'format': {
'filename': './1.mp4',
'nb_streams': 2,
'nb_programs': 0,
'format_name': 'mov,mp4,m4a,3gp,3g2,mj2',
'format_long_name': 'QuickTime / MOV',
'start_time': '0.000000',
'duration': '14.984000',
'size': '5595214',
'bit_rate': '2987300',
'probe_score': 100,
'tags': {
'minor_version': '512',
'major_brand': 'isom',
'compatible_brands': 'isomiso2avc1mp41',
'comment': 'vid:v0200fcd0000bjp56e4ttc5jlrp1hp1g',
'encoder': 'Lavf58.20.100'
}
}
}' 但是我目前,转为 h265 压缩他的话大概是 18%左右,我希望不转 AV1,太慢了
msg7086
2019-08-15 16:54:18 +08:00
顺便一提,每一次二压(二次压缩)都会导致肉眼可见的裂化。要得到最高的压缩率,你的片源需要足够好,细节丰富、噪点少,banding 少,然后用 x265 这样的最新技术配合高参数(也就是花大钱搞压片集群)去压制。

(说个题外话,我觉得到最后你会发现你是在浪费时间。)
msg7086
2019-08-15 16:55:37 +08:00
@awli x265 的量化可以从 0 一直到 51,你说的 18%是开了多少量化跑出来的?
awli
2019-08-15 16:56:55 +08:00
@msg7086 您可不可以给我一条命令,您说的最新技术配合高参数.
awli
2019-08-15 17:01:17 +08:00
@msg7086 我并不是一个视频处理工作者,对不起.我无法给您这样专业的解释.我只是单独的用 ffmpeg 直接转了一个小视频指定的为 libx265 转出来后为 5.37m>4.2M.
msg7086
2019-08-15 17:02:23 +08:00
x265 --crf 23 --preset slower --tune vcbs -o out.mp4 in.mp4

请用我维护的 Yuuki mod x265 运行。

crf 23 请自己调节,觉得码率高了就调大,觉得码率低了就调小。
awli
2019-08-15 17:03:00 +08:00
@msg7086 谢谢指导.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/592161

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX