V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kongque2016
V2EX  ›  问与答

怎么无损的把一种“有损压缩格式”的视频转成另一种“有损压缩格式”?

  •  
  •   kongque2016 · 2018-09-06 13:42:23 +08:00 · 5551 次点击
    这是一个创建于 2056 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我想剪辑个视频上传到 bilibili,但是手上的素材都是 mpeg 编码的 mp4 格式(大约 720p),premiere 导入不支持。

    我现在要先用格式工厂转成 avc h264 格式,但是在配置输出选项时,不知道怎么选?
    举个例子,有一个素材是 250 兆,我把输出设定成 1080p,发现转换后的大小约 570 兆。
    把输出设定成 720p,发现转换后的大小约 300 兆。
    我不知道该怎么选了。

    mpeg 编码和 avc h264 编码都是有损的,那两者之间转码的话,是不是必然又有损失?
    能不能用一种方法,把我现在 mpeg 编码的素材里的信息,全部用 h264 还原出来?
    如果损失是必然的,我怎么尽可能的减少损失,拿上面的例子说,把 720p 的 mpeg 素材转成 avc h264 格式,是不是输出成 1080p 要比输出成 720p 要好一些,不然,那多出的 270 兆是什么呢?

    我正在搜索码率,采样率这些东西,小白一只,偷个懒想先请教一下各位。
    第 1 条附言  ·  2018-09-06 17:49:07 +08:00
    谢谢各位的无私帮助。
    我现在是采取的方案是,用 ffmpeg 把视频转码成 h264 编码的无损模式:
    ffmpeg -i demo.mp4 -c:v libx264 -preset ultrafast -qp 0 output.mp4
    然后用的是开源的 shotcut 视频编辑器,基本功能跟 premiere 相当,挺好用。

    一些细节:
    * x264 无损转码的话,一个 300M 的视频大概膨胀成 8G (跟 preset 参数有关)。可以接受。
    *shotcut 其实能直接导入 mpeg 编码的 mp4,但是具体剪辑时,空格键的暂停 /播放功能有好几秒的画面卡顿,我用过 kndelive,也有这个问题。所以还是转一下再导入。
    *之所以从 permiere 转到 shotcut,是觉得这个开源软件相见恨晚,比 kndelive 在 windows 上的表现好多了。

    回复里还有一些别的方案,一并谢过,很多知识点受益匪浅。
    第 2 条附言  ·  2018-09-08 11:25:06 +08:00
    修正一下,还是 kdenlive 比 shotcut 好,shotcut 有很一些基础的功能缺失,而且看到其开发者在论坛里的一些回复,就更失望了。不过 kdenlive 在 windows 上好像没有 linux 上好用(可能是我没用惯),我现在又切换回 ubuntu 了。
    第 3 条附言  ·  2018-09-08 11:27:14 +08:00
    还有,h264 采用无损模式编码的视频,premiere (我的是 cc pro2),绘声绘影(我的是 x8)是导入不了的。
    23 条回复    2018-09-06 18:36:24 +08:00
    InternetExplorer
        1
    InternetExplorer  
       2018-09-06 13:48:07 +08:00
    调一下码率,和原来差不多就行了吧
    xmoiduts
        2
    xmoiduts  
       2018-09-06 14:00:57 +08:00 via Android
    不知道原来的视频是什么格式,不过 ffmpeg 应该有更精细的调节方法。就是使用比较复杂。
    要求不高可选 1080p,多出的内容是玄学,剪辑完成后再压回去即可。
    hhsuan
        3
    hhsuan  
       2018-09-06 14:08:16 +08:00 via Android
    不可能,绝对做不到
    GeruzoniAnsasu
        4
    GeruzoniAnsasu  
       2018-09-06 14:14:09 +08:00
    转 yuv 再重新压
    kongque2016
        5
    kongque2016  
    OP
       2018-09-06 14:29:28 +08:00
    @xmoiduts ”多出的内容是玄学“您指的是我例子中 720p mpeg ===> 1080p h264 多出的 270 兆是玄学吗?既然是玄学,那转成 720p h264 怎么样?我看设置成 720p 时,生成的 h264 码率也比原来 mpeg 的码率高。
    ynyounuo
        6
    ynyounuo  
       2018-09-06 14:31:36 +08:00 via iPhone
    不可能。
    kokutou
        7
    kokutou  
       2018-09-06 14:33:16 +08:00   ❤️ 1
    mpeg 的 mp4 我记得是支持的啊?你用的精简版 premiere ?

    1、无损转有损格式到有损格式,是不可能的。
    2、格式工厂是个很老很挫的软件。建议换 https://handbrake.fr/
    3、参数不同,转码后的文件,可能大可能小。根据参数不同,720p 的文件也可以比 1080p 大。根据参数不同,1080p 也可以比 720p 模糊。
    4、即使目标码率相同,目标格式相同,源文件相同,但是压制的参数不一样,也会导致清晰度不一样。
    KevZhi
        8
    KevZhi  
       2018-09-06 14:34:37 +08:00 via iPhone   ❤️ 2
    解压成 Uncompressed AVI,然后再压制,可以最大限度的达到你的要求(及心理需求)。
    一般我们在小型数字电影的剪辑流程中,来自不同设备的素材,统一会转换成理论无损的数字母带的专业格式,如 ProRes、DNxHD,(这个过程是由剪辑软件自动完成的),最后一直到渲染使用的都是这个格式,以这个格式作为母带,为各个发行渠道压制对应的格式,是无损的
    KevZhi
        9
    KevZhi  
       2018-09-06 14:52:38 +08:00 via iPhone   ❤️ 2
    另外你可以去参考一下 ffmpeg 的原理流程,源文件压制成另外一种格式,也是要在内存中解压到 YUV 的。就好比让你把五捆每捆六本绑得很紧的书,弄成六捆每捆五本,你必须要把绳子解开,把书拆散,重新打包。所以直接转换,他就会按你的参数要求达到你的格式。

    你还可以去了解一下视频编码的原理,MPEG 和 H264 有着本质的区别,你若问是否能将 MPEG 里边的信息无损保留转换到 H264,那么答案就是就像把中文翻译成英文了一样。讲的故事和意思都差不多,但是中文里面的成语和一些东西是永远无法在英文里以完全完整的意思再现的。

    想给你说的是需要注意的一点是,正规的剪辑流程中(包括你自己用 pr 也是)所有素材直接转化为母带格式,切忌二次转换压制,我前面也说了,剪辑软件内部都会用解压成无损母带格式(否则剪辑会十分卡顿),你直接解压成 YUV 就行。你的出发点就错误了

    就好比你打开 adobe audition 剪一段音频,你会清楚的看到他有一个提示框,正在打开 mp3 文件,这就是在把 mp3 转成 wav,只不过视频流程中大部分情况不用无压缩作为母带,因为太不经济了,ProRes 和 DNxHD 就好比 FLAC 一样,既无损,空间占用也小。
    kongque2016
        10
    kongque2016  
    OP
       2018-09-06 15:01:10 +08:00
    @kokutou 我从新浪共享下载的 premiere pro 2,好像有点儿老旧了。但新的又找不到。我也买不起正版的,你们不要打我。
    KevZhi
        11
    KevZhi  
       2018-09-06 15:05:14 +08:00 via iPhone
    另外 720 转成 1080 纯属脱裤子放屁
    msg7086
        12
    msg7086  
       2018-09-06 15:05:20 +08:00   ❤️ 2
    「有损」压缩格式就是在压缩的过程中有损。不存在既无损又有损的压缩方式。
    AVC 并不一定是有损的,AVC 和 HEVC 都有无损编码方式,x264 中使用--qp 0,x265 中使用--lossless,可以保证输出结果与原始输入完全一致。我们编码一部片的时候,有时候需要输出 720P 和 1080P 两个版本,这时候如果前期处理时间很长,我们就会先输出到无损文件,再解码并重新编码到目标参数。

    最近在做的一部 DVDRip,原档是 24 分钟的 NTSC DVD,1.5G ,waifu2x 完的 720p 用 x265 压缩到无损后是 14G,再次 x265 转压到发布用参数,成 180M。

    720p 转换成 1080p 会变大只是因为二次压缩效率变低了。
    比如 24fps/1.001 的 720p YUV420P8 的码率是 253mbps,你的素材如果是 24 分钟 250M 的话,差不多是 1.4mbps。

    所以你前后做的工作是:
    1.4mbps (素材) -> 253mbps (解码后的素材) -> 569mbps (拉伸到 1080p 后的素材) -> 3.2mbps (压缩完的 h264 1080p)。

    你这里的 3.2mbps,这「多出来的 270M 」,和素材的码率其实并没有太大的关系。
    msg7086
        13
    msg7086  
       2018-09-06 15:13:13 +08:00
    如果你用商业工具剪辑,一般是用 ProRes 编码。
    如果你要导入视频进商业工具,除了 x264 的无损以外,也可以试试 Lagarith。我不确定 x264 的无损编码(需要 High444 )那些商业工具能不能正常解码,你都可以试试看。
    fnscar
        14
    fnscar  
       2018-09-06 15:14:44 +08:00   ❤️ 1
    视频格式转换分两种:
    封装格式的转换,比如 mp4 转为 mkv,只是换个 container,这种是无损的。
    编码格式的转换,比如 mpeg2 转为 avc,需要先把 mpeg2 解码为无压缩的 yuv 再重新编码为 avc,除非编码 avc 的时候用 loseless 否则一定是有损的。
    请卸载格式工厂。建议用 ffmpeg:
    ffmpeg -i input.mp4 -c:v libx264 -preset slower -crf 18-c:a copy output.mp4
    menhood
        15
    menhood  
       2018-09-06 16:09:27 +08:00
    你可能只是需要最新版的 Pr …… http://www.lookae.com/pr-cc-2018/
    digimoon
        16
    digimoon  
       2018-09-06 16:26:46 +08:00   ❤️ 1
    建议直接用碾压级别的码率来尽量达到“无损”的效果,毕竟 lz 目的只是给人看的只要看不出来就行了
    简单 x264 用 crf 10 转一个就是了,我平时用 15 都觉得足够了
    BFDZ
        17
    BFDZ  
       2018-09-06 16:28:29 +08:00
    了解一下视频封装格式的概念,您需要就是把视频转封装格式。先提取出视频和音轨,再用目标格式的封装工具做封装,这个过程中视频信息是无损的,或者用 ffmpeg 也可以转。

    格式工厂默认是转码。
    imn1
        18
    imn1  
       2018-09-06 16:37:00 +08:00
    综合 LZ 的所述,不像是专业的视频编辑,而且目的只是上传 web
    建议#7 所说的 handbrake,里面可选 bitrate 和 web 优化等等,基本足够了,里面也有些预设模板可选
    另外,这样做建议保留原文件,这个转码后的文件肯定没有源文件高质量,适合 web 播放而已,以后再有类似需求还应从原文件处理

    如果需要很细致的编辑,就需要把原文件优质解码到 raw,然后用可按帧编辑的工具,加增益滤镜等等,复杂多了
    hehe520347
        19
    hehe520347  
       2018-09-06 17:15:27 +08:00
    下个 ffmpeg 前几天刚做的 mkv 转 mp4 基本支持所有格式互相转换 无损的
    一行命令搞定
    ffmpeg -i C:\Users\user08\Desktop\aria2\downloads\1.mkv -cKv copy -c:a copy 01.mp4

    还能去水印
    ffmpeg -i C:\Users\user\Desktop\2.mp4 -b:v 548k -vf delogo=x=1070:y=25:w=175:h=55 C:\Users\user\Desktop\delogo2.mp4
    timonwong
        20
    timonwong  
       2018-09-06 17:17:33 +08:00
    容器格式互相转可以「无损」
    音视频的 codec 转换不能
    coderluan
        21
    coderluan  
       2018-09-06 17:20:19 +08:00
    分辨率 /帧率 /码率 这三个属性都影响体积,帧率一般不变,所以你把码率调小点就好了。
    yksoft1
        22
    yksoft1  
       2018-09-06 17:22:07 +08:00 via Android
    @KevZhi 你是说一个是封装一个是编码?如果都是编码,MPEG-2 视频和 H.264 一个是 H261 的儿子,一个是 H261 的曾孙
    Shy07
        23
    Shy07  
       2018-09-06 18:36:24 +08:00 via iPhone
    无可避免,视频的本质是图片,图片解码后在内存中的 buffer 就是“无损”的,就算直接把 buffer 编码成另一种有损压缩的图片格式,其中损失信息是无可避免的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1338 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:36 · PVG 01:36 · LAX 10:36 · JFK 13:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.