美文网首页
九、ffmpeg视频转码

九、ffmpeg视频转码

作者: LucXion | 来源:发表于2023-06-26 12:37 被阅读0次

    转码流程:ffmpeg会自动选择适合的工具对目标文件进行解码解封装,还原成原始文件PCM或YUV,然后使用用户指定的编码器进行编码封装。

    CPU软编码

    一般使用 libx264、libx265、librav1e 之类的编码器编码,当然也有人用 OpenH264 或者其他自己定制的编码器。

    libx264

    • 可通过命令行查看相关参数
    $ ffmpeg -h encoder=libx264
    
    • libx264 提供预置模板来解决设置编码参数太多,太琐碎的问题。默认用的是 medium 模板,也就是平衡画质与编码速度的最优选择。


    如果使用性能调优类模版 zerolatency,它包含了很多低延迟编码参数,常应用于画面延迟低的直播流。
    -sliced-threads,将每一帧图片分成多份,放到多线程去并发处理。
    --sync-lookahead O、--rc-lookahead 0,不需要提前预存帧,也没有双向参考帧,最大限度降低画面延迟
    恒定码率:nal-hrd cbr、maxrate、minrate 与 bufsize,一般 bufsize 控制比 maxrate 小大概 1/3 ~ 1/2

    • 使用libx264编码器进行工作时,如果libx264的参数不能满足需求,可以使用ffmpeg的命令行,通过 -x264opts 设置 libx264中没有但x264中包含的参数,因为libx264本身就是x264的封装,所以不需要重新编译libx264,新设置的参数会透传到x264中。

    • 转码命令

    ffmpeg -i  input.mp4 -pix_fmt yuv420p -vcodec libx264 -nal-hrd cbr -tune zerolatency -preset superfast -maxrate 900k -minrate 890k -bufsize 300k -x264opts "open-gop=1" output.ts
    // 可通过 ffprobe -show_entries frame=pict_type -select_streams v -of xml a.mp4 查看 nal-hrd cbr 是否已经生效
    
    GPU硬编码
    // 查看mac的videotoolbox框架支持的视频编码器
    ffmpeg -encoders | grep videotoolbox
    // 使用 h264_videotoolbox 编码器进行转码操作
    ffmpeg -i a.mp4 -vcodec h264_videotoolbox -b:v 2000k output.mp4
    

    相关文章

      网友评论

          本文标题:九、ffmpeg视频转码

          本文链接:https://www.haomeiwen.com/subject/fhgwydtx.html