登录
  • 人们都希望被别人需要 却往往事与愿违
  • Stay hungry. Stay foolish@史蒂夫·乔布斯引自《全球概览》

自行编译ffmpeg并压制带字幕的视频、一键编译non-free ffmpeg

IT Benny小土豆 15708次浏览 7397字 1个评论
文章目录[显示]
这篇文章在 2017年09月29日10:09:47 更新了哦~

不改变视频、音频编码格式及参数,将字幕压制

ffmpeg –i Lantern.mp4-vf "ass=Lantern.ass" out.mp4

使用H264(AVC)重新编码视频、不改变其他参数,不改变音频编码格式

ffmpeg -i Lantern.mp4 -vcodec libx264 -preset fast -crf 20 -vf "ass=Lantern.ass" out.mp4

关于preset参数:

预设是一系列参数的集合,这个集合能够在编码速度和压缩率之间做出一个权衡。一个编码速度稍慢的预设会提供更高的压缩效率(压缩效率是以文件大小来衡量的)。这就是说,假如你想得到一个指定大小的文件或者采用恒定比特率编码模式,你可以采用一个较慢的预设来获得更好的质量。同样的,对于恒定质量编码模式,你可以通过选择一个较慢的预设轻松地节省比特率。

如果你很有耐心,通常的建议是使用最慢的预设。目前所有的预设按照编码速度降序排列为:
ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo默认为medium

如果你蒙圈了,那就这么说的,ultrafast处理的最快,但是文件大;placebo处理的慢,但是文件小;建议medium或者fast就可以了……有耐心的话,veryslow也够了。

crf(Constant Rate Factor)

该方法在输出文件的大小不太重要的时候,可以使整个文件达到特定的视频质量。该编码模式在单遍编码模式下提供了最大的压缩效率,每一帧可以按照要求的视频质量去获取它需要的比特数。不好的一面是,你不能获取一个特定大小的视频文件,或者说将输出位率控制在特定的大小上。

crf的参数值中,其中0为无损模式,23为缺省值,51可能是最差的。该数字越小,图像质量越好。从主观上讲,18~28是一个合理的范围。18往往被认为从视觉上看是无损的,它的输出视频质量和输入视频一模一样或者说相差无几。但从技术的角度来讲,它依然是有损压缩。

我觉得选择20就差不多啦~~

以H.264、Lame自定义参数重新编码、压制

ffmpeg -i Lantern.mp4 -vcodec libx264 -preset fast -crf 20 -vf "ass=Lantern.ass" -acodec libmp3lame -ab 128k lame.mp4

如果想压制AAC的音频,就在最后把acodec libmp3lame改成acodec aac

其中-ab 128k指的是平均码率为128k

以H.264自定义分辨率、AAC自定义参数缩放压制视频

ffmpeg -i Lantern.mp4 -vcodec libx264 -preset fast -crf 20 -vf "ass=Lantern.ass,scale=800:-1" -acodec aac -ab 128k aac.mp4

其中的scale=800:-1指的是输出800:对应比例的视频。假如你要压制720P的,那就把800改成1280;假如你要1080的,那就改成1920。通常来说,分辨率高的压分辨率低的好办,低的压高的就麻烦了……

两遍模式

如果你的目标是一个确定大小的文件而且帧与帧之间的视频质量并不重要,这个方法很适用。这通过一个例子可以得到很好地解释。你的视频有10分钟(600秒)的时长同时要求输出为50MB,因为比特率=文件大小/时长,

50MB*8192(MB转kilobits)/600秒=683 kbps(全局比特率)

683kbps-128kbps(音频比特率)=555kbps(视频比特率),

两遍编码的例子:

ffmpeg -y -i input -c:v libx264 -preset medium -b:v 555k -pass 1 -an -f mp4 /dev/null &&
ffmpeg -i input -c:v libx264 -preset medium -b:v 555k -pass 2 -c:a libfdkaac -b:a 128k mp4 output.mp4

分割视频(拷贝视频和音频流,速度比较快)

ffmpeg -ss 01:00:00 -i input_file_h264.mp4 -vcodec copy -acodec copy -t 00:06:00 output_file.mp4

总结

我这上面这几个小标题写的乱乱糟糟的,在这里统一做一个总结吧:

需要原封不动的把字幕压进去

ffmpeg –i Lantern.mp4-vf "ass=Lantern.ass" out.mp4

需要快速的压制质量较好的H264视频

ffmpeg -i Lantern.mp4 -vcodec libx264 -preset fast -crf 20 -vf "ass=Lantern.ass" out.mp4

需要快速压制质量较好的H264、720P视频

ffmpeg -i Lantern.mp4 -vcodec libx264 -preset fast -crf 23 -vf "ass=Lantern.ass,scale=1280:-1" out.mp4

需要压制超高质量的、缓慢的压制H264视频

ffmpeg -i Lantern.mp4 -vcodec libx264 -preset veryslow -crf 18 -vf "ass=Lantern.ass" out.mp4
这个……crf的质量大家自己掂量着办!0最好,53最差,默认23,合理范围18~28
preset也看着办
ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo
越慢,压缩率越高。

后记

视频编码这是个长久的技术活啊,而且需要很多的经验!自己多编码多玩玩,自然就有懂啦!

下一页是给懒虫们留着的哦~~


文章版权归原作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/ffmpeg.html
喜欢 (5)
分享:-)
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论(代码和日志请使用Pastebin或Gist)
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(1)个小伙伴在吐槽
  1. 优秀的文章即使埋没三年也有被挖出的那一天,赞土豆 :grin:
    BobMaster2021-01-23 20:59 回复