寒假在家,我开始搜索各种电视剧电影来充实自己的寒假生活,最近正在看的是Netflix的美剧「巫师」。但是下载的 1080P .mkv 原片一集大小高达 3.3 G,我们能否通过合理的视频转码压缩在保证视频观感体验的同时,尽可能减少视频文件的大小呢?
事实上是可能的,我们可以通过视频的重新编码,使得在保留一定画面质量的同时,尽可能的减少视频的大小。比如这一次就将从 .mkv 文件转码成 .mp4 文件,以换取更小的体积和更大的兼容性(.mkv文件在手机平板等移动端支持往往没有 .mp4 好。)
几个概念
视频封装 一般视频文件格式有 .mp4 .mov .mkv 等等,这些格式往往都包含着一条或者多条视频、声音和字幕通道。
视频编码 未经压缩的画面往往非常大,需要通过帧间编码或者帧内编码的方式来对视频大小进行压缩。常见的视频编码格式有 H264, H265 等等。H265作为比较新的编码方案具有压缩率较高,画面较好的优点。
音频编码 场景的音频编码有 .mp3 .aac .flac等。
分辨率 视频的分辨率是视频画面的大小,通常分辨率越高,视频的画面就越精细。常见的分辨率有 720p, 1080p, 4K 等。
帧率 是指一秒钟内有多少帧图片。帧率越高,视频就越连贯,普遍的码率有 25fps, 50fps, 30fps, 60fpx 等
码率 码率最终决定了视频的大小,是指一秒视频使用多少字节来描述。一般蓝光视频的码率在 10-20 Mbps,而更多网络视频的码率一般在 2-6 Mbps 之间。码率越高,画面压缩率越低,画面越精细。
分析一下
首先使用 ffmpeg -i xxxx.mkv
命令来查看一下原始的视频的一些编码细节,这里截取了部分比较关键的输出内容。
Metadata:
encoder : libebml v1.3.5 + libmatroska v1.4.8
creation_time : 2019-12-20T08:18:01.000000Z
Duration: 01:01:04.58, start: 0.000000, bitrate: 6468 kb/s
Stream #0:0: Video: h264 (Main), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 24 fps, 24 tbr, 1k tbn, 48 tbc (default)
Stream #0:1(eng): Audio: eac3, 48000 Hz, 5.1, fltp (default)
Stream #0:2(eng): Subtitle: subrip
Stream #0:3(eng): Subtitle: subrip
Stream #0:4(ara): Subtitle: subrip
Stream #0:5(cze): Subtitle: subrip
Stream #0:6(dan): Subtitle: subrip
...
Stream #0:30(chi): Subtitle: subrip
Stream #0:31(chi): Subtitle: subrip
得到的信息有:
- 这个文件长度是1小时1分04秒。有32个通道。平均比特率是 6468 kbps。
- 有一个视频通道,h264编码,1080p分辨率,
- 有一个音频通道,eac3编码,48kHz采样率,5.1声道。这个格式比较不通用。
- 有30个字幕通道,分别是各个国家语言的字母,其中我们只需要留下30通道,也就是简体中文字幕。
如何转码?
下面是我的转码思路:
- 一般 1080p的码率在3-6Mbps 直接较合适, 720p 的在 1-3 Mbps直接较合适。原始视频码率是 6000kbps 作用,我们选择一个中等偏低的码率,将降低码率到 3000kbps,足以满足 iPad或者iPhone 上观看。同时较小的文件也便于传输。
- 将音频格式转为同样音质优秀但更为常见的 aac 格式。
- 将无用的字幕去掉,只留下 30 通道的简体中文字幕。
ffmpeg 命令。
ffmpeg -i xxxxxx.mkv -map 0:0 -map 0:1 -map 0:31 -b:v 3M -c:s mov_text xxxxxx.mp4
-i xxxxx.mkv
选取了输入文件为原始视频文件-map 0:0 -map 0:1 -map 0:31
选取了原始视频中的第零(视频)、第一(音频)和第三十(简中字母)-b:v 3M
设置视频码率转为 3000kbps-c:s mov_text
设置字幕的编码方式为移动文字xxxxxx.mp4
是输出文件名
运行和结果
在运行完命令后到了一个 1.52 G的 .mp4 文件。打开后检查视频画质、音频和字母符合预期。再次运行 ffmpeg -i xxxxx.mp4
得到了转码后的视频文件的相关信息:
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.29.100
Duration: 01:01:04.58, start: 0.000000, bitrate: 3325 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 2931 kb/s, 24 fps, 24 tbr, 12288 tbn, 48 tbc (default)
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 388 kb/s (default)
Stream #0:2(chi): Subtitle: mov_text (tx3g / 0x67337874), 0 kb/s (default)
视频、音频和字幕通道各一条,相关参数符合预期,视频转码完成。
本人保留对侵权者及其全家发动因果律武器的权利
版权提醒
如无特殊申明,本站所有文章均是本人原创。转载请务必附上原文链接:https://www.elliot98.top/post/tech/ffmpeg/。
如有其它需要,请邮件联系!版权所有,违者必究!