FFmpeg 截取 webp 动图

FFmpeg 支持对动态 webp 图片的编码,但是默认参数下编码后的图片有两个比较明显的问题:

  • 动图不会自动循环播放,会停留在最后一帧画面
  • 图像质量差,有比较明显的马赛克
阅读更多

视频编辑器 ffcutter

ffcutter 初版写完有段日子了。本想着把功能再丰富下, UI 规范后再开源,无奈此后一连数月都忙于新家的智能家居系统的设计开发,ffcutter 就淡忘了。就以现状开源了吧,献给有缘人 。

阅读更多

FFmpeg 编码 H264 视频码率过高问题解决方法

转码 mp4 的时候发现,输出的 H264 视频流码率高达 10M kbps+,而源码率只有约 2M kbps,这明显是不对的。明明已经通过 AVCodecContext::bit_rate 字段设定了码率却没有生效。

通过这篇 wiki,找到了答案。H264 有一套很复杂的码控规范,不能简单通过一个固定的码率数值指定输出码率——H264 基本上做不到这么精确的码控。推荐做法是启用 CRF 码控,设置合适的压缩率:

1
2
3
4
5
6
// 启用 CRF 码控
// CRF 参数值取值范围为 [0,51]。0 为无损,51 最差;23 是 libx264 默认值。
if (codec->id == AV_CODEC_ID_H264)
{
av_opt_set_int(_context, "crf", 23, AV_OPT_SEARCH_CHILDREN);
}

avcodec_open2() 之前加入上边代码块,输出视频流码率下降明显。

基于 FFmpeg 的视频编辑器开发—踩坑记

折腾了两周,视频编辑器已初具规模:

  • 解封装
  • 解码
  • 快速跳转和精准跳转
  • 格式转换
  • 缩放
  • 重采样
  • 添加文字
  • 添加 srt 字幕
  • 编码
  • 封装

基本满足了当初想做一个 gif 生成器的需求,也是时候回顾下过去两周踩过的坑了。

阅读更多