V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
awli
V2EX  ›  Python

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

  •  
  •   awli · 2019-08-15 16:11:36 +08:00 · 6022 次点击
    这是一个创建于 1929 天前的主题,其中的信息可能已经有所发展或是发生改变。

    视频压缩

    项目详情

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

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

    开源的编码器有 x264/x265,计算密集型的任务应该不会拿 py 实现。
    awli
        6
    awli  
    OP
       2019-08-15 16:29:52 +08:00
    @rogwan 目前是这样的,我很清楚自己的需求,是要求清晰度.压缩率的话,压缩 30%-20%之间都可以.但是如果说我单单指定转码格式为 h264 的话,这个压缩率达不到我的预期.
    awli
        7
    awli  
    OP
       2019-08-15 16:31:35 +08:00
    不知道你们了不了解阿里云的窄带高清,我就是想实现一个类似他的程序.但是会差很多
    BlackBerry999
        8
    BlackBerry999  
       2019-08-15 16:34:51 +08:00
    @awli h265 还不满足吗?
    loveour
        9
    loveour  
       2019-08-15 16:38:16 +08:00
    各种编码的效率都是有定数的,能到到什么码率什么分辨率什么效果基本也是定的,参数可以调整,但是一种新的编码格式不是随随便便就能研发出来的。如果现有的编码格式调整参数以后满足不了你的需求,那这个问题对个人乃至小的团队应该都是无解的。
    annielong
        10
    annielong  
       2019-08-15 16:46:05 +08:00
    反正自己设置同样的画面尺寸和压缩率,压缩出来还是不如从小草下的视频
    awli
        11
    awli  
    OP
       2019-08-15 16:46:39 +08:00
    @BlackBerry999 嗯,我的团队比较小,但是他们不满足于这样,我已经可以转为 h265 了
    awli
        12
    awli  
    OP
       2019-08-15 16:48:22 +08:00
    @loveour 我就是想动态的获取这些参数,现有的 h265 其实可以满足我们的需求的.只是,数据量有些大
    msg7086
        13
    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
        14
    awli  
    OP
       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
        15
    msg7086  
       2019-08-15 16:54:18 +08:00   ❤️ 1
    顺便一提,每一次二压(二次压缩)都会导致肉眼可见的裂化。要得到最高的压缩率,你的片源需要足够好,细节丰富、噪点少,banding 少,然后用 x265 这样的最新技术配合高参数(也就是花大钱搞压片集群)去压制。

    (说个题外话,我觉得到最后你会发现你是在浪费时间。)
    msg7086
        16
    msg7086  
       2019-08-15 16:55:37 +08:00
    @awli x265 的量化可以从 0 一直到 51,你说的 18%是开了多少量化跑出来的?
    awli
        17
    awli  
    OP
       2019-08-15 16:56:55 +08:00
    @msg7086 您可不可以给我一条命令,您说的最新技术配合高参数.
    awli
        18
    awli  
    OP
       2019-08-15 17:01:17 +08:00
    @msg7086 我并不是一个视频处理工作者,对不起.我无法给您这样专业的解释.我只是单独的用 ffmpeg 直接转了一个小视频指定的为 libx265 转出来后为 5.37m>4.2M.
    msg7086
        19
    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
        20
    awli  
    OP
       2019-08-15 17:03:00 +08:00
    @msg7086 谢谢指导.
    tankren
        21
    tankren  
       2019-08-15 17:06:03 +08:00
    h265 音频挑个体积小的格式然后解析率弄差一点 反正旧听个响
    lancelock
        22
    lancelock  
       2019-08-15 17:18:09 +08:00
    主流的编码器就那几个,你只能改改参数调节效果,找到一个体积和质量的平衡点。想各个方面都达到完美是不存在的,没有那黑科技。
    lastpass
        23
    lastpass  
       2019-08-15 17:19:30 +08:00 via Android
    没有记错。楼主可以看看小丸工具箱。从里面找到转码的接口。
    douglas1997
        24
    douglas1997  
       2019-08-15 21:22:08 +08:00
    Deep learning based 压缩率似乎比 H264 高了 40%,可以参考一下。
    exev2
        25
    exev2  
       2019-08-16 07:45:48 +08:00
    @awli 如果方便的话,我想要楼主的片源试试手,刚好我也一直在用 ffmpeg,看我自己能压成什么样子。
    exev2
        26
    exev2  
       2019-08-16 13:03:12 +08:00
    @awli 对了,记得把需求详细说一下,要不然没有参考。
    awli
        27
    awli  
    OP
       2019-08-16 18:54:09 +08:00
    @exev2 邮箱给我,我给你发邮件
    exev2
        28
    exev2  
       2019-08-16 20:02:33 +08:00
    @awli T0RRNU56TTBNVEkxUUhGeExtTnZiUT09 [base64 解两次]
    awli
        29
    awli  
    OP
       2019-08-19 09:43:08 +08:00
    @exev2 我取出 100 个视频给你,你看一下,有什么好的建议和想法,咱们多交流
    upday7
        30
    upday7  
       2019-09-02 22:22:27 +08:00 via iPhone
    webm 格式挺不错的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5665 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:33 · PVG 09:33 · LAX 17:33 · JFK 20:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.