![如何使用 Avidemux 重新压缩具有类似质量的 H264 视频?](https://linux22.com/image/1510120/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Avidemux%20%E9%87%8D%E6%96%B0%E5%8E%8B%E7%BC%A9%E5%85%B7%E6%9C%89%E7%B1%BB%E4%BC%BC%E8%B4%A8%E9%87%8F%E7%9A%84%20H264%20%E8%A7%86%E9%A2%91%EF%BC%9F.png)
我用手机拍摄了许多视频,这些视频的长度相当大(例如,1920×1080 的 3 分钟视频超过 400MB)。
我猜想这是因为手机更看重电池寿命和质量而不是存储空间,所以我认为我可以通过 Avidemux 来重新编码它们并减小它们的大小,同时又不会过多地损害它们的质量。我意识到一些质量下降是不可避免的。但由于压缩空间很大,我认为应该可以避免大量的可察觉的降解。
视频以 H264/AAC 编码,放在 MP4 容器中。我可以直接在 Avidemux 中复制音频。但是,如何推导出 H264 编码器的一些近似值以保持视频质量?我认为 H264 格式不会保留有关其输入参数的信息。可以选择一种质量级别,使文件大小完全膨胀而没有任何增益,也可以选择一种质量级别,使视频变得很糟糕;有没有办法分析输入,找出一个“最佳点”,即视频大小减小而不会对质量产生太大影响?
我意识到这个问题有一定的主观性;我认为是“可察觉的”质量下降?但是,鉴于视频编码器传统上是通过感知质量来参数化的,是否有可能得出一些基本参数的近似范围?
答案1
有多个命令行或 GUI 工具可以显示 H264 视频的一些简化的编码参数,ffmpeg
例如mediainfo
:
$ mediainfo myvideo.mp4
[... look for the "Video" section ...]
Format profile : High@L4
Bit rate : 17.0 Mbps
$ ffprobe -show_streams myvideo.mp4
[... look for a [STREAM] header followed by codec_type=video ...]
profile=High
level=40
bit_rate=16996359
注意中的profile
和参数。不要担心比特率,它实际上并没有告诉你文件大小没有告诉你的任何信息。我level
ffmpeg
思考level
的输出ffmpeg
是真实值的 10 倍(即40
意味着级别 4、41
意味着 4.1,等等)。
Avidemux 允许您使用简化的设置,您可以设置这些设置并将更精细的设置保留为 Avidemux 的默认设置。
我认为这些是相应的设置:
- 使用高级配置未选中。
- 轮廓高。
- IDC级别为 4。
使用较慢的预设值将提高这些参数内的质量(直到一定程度)。
您还可以使用两遍编码来进一步减小文件大小。我不知道有什么好方法可以预测合理的文件大小,但 1920×1080 的两遍平均比特率最好在 6-8Mbps 之间。不要以原始文件大小为目标或比特率:您最终只会得到一个相同大小的文件。
就我而言,只需在质量等级 20(Avidemux 的默认设置)下进行一次单次编码,文件大小就会减半,使用 Bino 和 Kinovea 进行比较,我发现两者并无差异,即使是运动模糊或高对比度帧也是如此。在 7Mbps 下进行两次编码(这是单次编码的结果),文件大小会降低 40%。