macOS下FFmpeg视频转码介绍及进阶教程

可以播放,并且在系统中能够正确预览并生成缩略图的视频文件。进阶篇修改视频分辨率这类的参数,但自己尝试后发现一个问题,视频观看的感觉有跳跃性,不流畅,很像是丢帧的感觉。),此法既可用在提高帧率上,也可以用于降低帧率,最终的结果都是提高视频播放的流畅度。来解决帧率、嵌入视频,和保留一条音轨的问题。视频转码和压缩的话题就聊到这里,下次见。...

原文链接:

现在比较常见的视频封装格式有mp4和mkv等,内部视频编码格式也逐渐开始从前几年流行的H.264/x264过渡到新一代的HEVC/x265(High Video High Video ),而常见的音频编码格式无非是AC3、DTS或AAC等。无论是借助GUI编码软件,还是使用命令行,它都是使用最广泛的工具,理论上支持各种平台,包括macOS、iOS等。@mac在操作系统下使用。通过简单的命令,可以大致了解视频转换的威力,视频编码部分也重点介绍了x264、x265,以及如何抑制mac OS High 和 iOS 11 可以正确识别和生成 HEVC 10bit 视频。文末还会用一个更复杂的例子,应用——视频帧率插值,嵌入pgs图形字幕,最后输出HEVC编码来说明。

安装

如果你看过我之前的文章,你可能已经注意到编译 mpv 的一个重要依赖是。但是如果用于视频转码,默认编译会缺少一些组件,所以这里可能需要重新安装。以我个人编译的版本为例,使用--HEAD匹配最新的mpv,在里面输入如下命令:

brew install ffmpeg --HEAD --with-fdk-aac --with-sdl2 --with-freetype --with-libass --with-libbluray --with-libvorbis --with-libvpx --with-opus --with-webp --with-x265

等待安装完成。

抑制 x264 编码的视频文件

ffmpeg -i input.mp4 -c:a libfdk_aac -c:v libx264 -crf 20 -preset slow output.mp4

使用编码的基本规则,-i后面的文件为输入视频文件,即input.mp4,支持mkv、flv、vob等多种格式。文件可以包含目录,使用<@ macOS 文件拖放功能非常方便。.mp4为输出文件,文件名可自定义,视频封装格式建议与编码格式对应mac转码播放软件,mpeg-2或vp8编码的视频不宜封装为mp4。-c:a 后表示输出文件的音频编码器。一般mp4常用的音频编码是AAC-LC。根据官方维基指南,建议使用编码器代替aac,音质更好。-with-fdk-aac 的原因。-c:v 表示输出文件的视频编码器,可用于抑制 x264 编码的视频流。-crf 20 表示视频编码的比特率系数。数字越大,抑制效果越差。推荐选择范围为16 - 28电子图库精灵 ,抑制高质量视频的推荐值在20以下。 -slow表示一组控制压缩时间和文件大小的参数,通常选择fast,slow经常选择。

以上都是基于one-pass抑制。如果需要严格控制码率,则需要使用二通。更详细的介绍可以参考/H.264。

压缩 HEVC 10bit 编码的视频文件

其实HEVC(x265)视频转码早就支持了,但是改了很多,最新版终于支持编码macOS高可以播放,并且可以正确在系统中预览并生成缩略图视频文件,对编码命令的改动很小,只需添加一个标签参数,如下:

ffmpeg -i input.mp4 \
       -c:v libx265 -preset medium -crf 18 -pix_fmt yuv420p10le \
       -c:a libfdk_aac -b:a 256k \
       -tag:v hvc1 \
       output_10bit.mp4

mac转码播放软件_js实时转码播放视频_优酷mac客户端转码

和抑制x264视频很相似,主要区别是需要更换-c:v视频编码器,抑制10bit需要指定色彩空间,加-。在音频编码参数中,如果加上-b:a,就可以控制音频文件的码率reaConverter Lite(图片转换软件),按需使用。最后很重要的一点,参数tag:v hvc1一定要加上,这样输出的Video会被标记为hvc1,macOS和iOS 11都可以原生播放,否则会被标记为hev1 默认不会被 支持播放,第三方播放器没问题。

高级章节修改视频分辨率

如果原始视频的分辨率是,为了减小文件大小,最简单的方法就是将其转换成较低分辨率的版本,比如720p,也就是我们可以使用scale video 对视频进行缩放:

ffmpeg -i input.mp4 -vf scale=-2:720 -c:v libx264 -crf 20 -preset slow -c:a copy output.mp4

-vf scale=-2:720 会自动计算对应的水平分辨率(需要是2的倍数,所以是-2),源文件的音频编码不变,所以可以设置在特殊情况下,当遇到源文件的视频比例出错时,除了修改分辨率值外简易PS,还需要设置dar参数,例如:

ffmpeg -i input.avi -vf scale=722x406,setdar=16/9 -c:v libx264 -c:a libfdk_aac -preset slow -crf 20 output.mp4

另外,绝对不建议提高分辨率,因为它没有任何意义,而且受原始视频的视频质量限制。除了增加音量之外,增加分辨率只会让画质变差。

去交错()

偶尔会碰到一些早期VCD/DVD时代编码的视频,其中一个重要的特点就是隔行扫描,直接转码的结果就是视频中快速移动的物体可以看到非常明显的扫描线。解决方案还需要应用vf视频滤镜中的yadif去隔行,如下:

ffmpeg -i input.vob -vf yadif -c:v libx264 -preset slow -crf 20 -c:a libfdk_aac -b:a 256k output.mp4

如果抑制效果不好(还有扫描线),可以尝试将vf部分改成-vf yadif=1:-1:0,=2:1:10。

旋转视频

js实时转码播放视频_mac转码播放软件_优酷mac客户端转码

原始视频需要旋转,也可以应用视频滤镜来达到目的,如下:

ffmpeg -i input.mov -vf "transpose=1" -c:a copy output.mov

在,

0 = 90 Counter Clockwise and Vertical Flip (default) 
1 = 90 Clockwise 
2 = 90 Counter Clockwise 
3 = 90 Clockwise and Vertical Flip

如果要将视频翻转180度,则需要更改为-vf "=2,=2"。值得注意的是,旋转视频意味着重新编码视频,输出质量会受到轻微影响。您可以添加 crf 参数来控制视频输出质量,您可以对音频部分使用 copy。

复杂的“栗子”

mac转码播放软件_优酷mac客户端转码_js实时转码播放视频

最后一个例子是我最近看到的一个视频。简要编码信息如下:

Input #0, matroska,webm, from 'Input.mkv':
    Duration: 00:23:55.97, start: 0.000000, bitrate: 16372 kb/s
    Stream #0:0: Video: hevc (Main 10), yuv420p10le(tv, bt709), 1920x1080, SAR 1:1 DAR 16:9, 59.94 fps, 59.94 tbr, 1k tbn, 59.94 tbc (default)
    Stream #0:1(jpn): Audio: flac, 48000 Hz, stereo, s32 (24 bit) (default)
    Stream #0:2(jpn): Audio: flac, 48000 Hz, stereo, s32 (24 bit)
    Stream #0:3(chi): Subtitle: hdmv_pgs_subtitle (default)
    Stream #0:4(chi): Subtitle: hdmv_pgs_subtitle

如您所见,这是一个 HEVC 10bit 编码的视频文件,分辨率为 1080p,帧速率为 59.94 fps,带有两个 flac 编码的音轨和两个 pgs 格式的图形字幕。我自己的 Pro 无法再完整流畅地播放此视频。除了 HEVC 带来的巨大计算量之外,高帧率也是个麻烦。可惜网上没有其他好的资源,只好自己尝试压缩一下。目标:保持分辨率但帧率减半,即降低到29. 97 fps,只需要第一条音轨,重新编码为AAC-LC,原片是日文,所以必须有字幕,字幕直接嵌入到视频中,最后用HEVC 10bit重新编码,稍微降低码率。

改变帧率,一般使用-vf fps=fps=29.97等参数,但是我自己试了一下,发现有问题。看视频的感觉是跳动的,不流畅,很像丢帧的感觉。. 因为将帧率减半就意味着丢弃了一半的信息,而普通的降低帧率算法只有简单的插值操作,甚至根本没有,造成视频不连贯的效果。因此,改变帧率的正确方法是执行运动插值( )。此方法可用于提高或降低帧速率。最终的结果是提高了视频播放的流畅度。这里我们将使用 - 代替 vf,结合应用和地图来解决帧率、嵌入视频和保留音轨。

ffmpeg -i input.mkv \
-filter_complex "[0:v]minterpolate='fps=29.97:mi_mode=mci:me_mode=bidir:mc_mode=aobmc:vsbmc=1'[bg],[bg][0:s:0]overlay[v]" -map "[v]" -map 0:a:0 \
-c:v libx265 -preset medium -crf 18 -pix_fmt yuv420p10le \
-c:a libfdk_aac -b:a 256k \
-tag:v hvc1 \
output_10bit.mp4

这里看起来很复杂,其实像管道一样工作,[0:v] 表示输入文件的视频流,对应#0:0。from 到 vsbmc=1 是插值滤波器的设置参数,具体作用可以看官方文档。[bg] 表示此过滤器输出的视频流并传递给下一个过滤器。[0:s:0]表示输入文件的第一个字幕pass,对应#0:3,所以如果是[0:s:1],则对应#0:4。将图形字幕嵌入到视频中,然后输出为[v],继续。视频取处理后的[v],音频取原始输入文件的第一个音频通道,[0:a:0]表示#0:1。最后压缩视频的参数和之前完全一样mac转码播放软件,压缩后的视频文件是HEVC 10bit编码的。

需要注意的是,运动插值操作非常耗时,CPU使用率确实不高。应该是因为过滤器只能调用单核。在我的电脑上,压制这个23分钟的视频大约需要20个小时,请谨慎使用。

好了,视频转码压缩就到这里了,我们下期再见。和平!

相关文章

发表评论