美文网首页
ffmpeg 转码

ffmpeg 转码

作者: 阳光男孩刚哥哥 | 来源:发表于2021-01-02 18:41 被阅读0次

    ffmpeg 转码使用

    下载地址:https://www.ffmpeg.org/download.html

    简要

    音视频文件本身其实是一个容器(container),如视频常用的容器 AVI、MP4,音频常用容器 MP3、mpeg,
    而将音视频转为指定容器即为转码,此时需要进行编码,常用的编码格式 H.264、H.265、MPEG-4、AAC 等

    ffmpeg -formats 可查看 ffmpeg 支持的容器种类;ffmpeg -codecs 可查看 ffmpeg 支持的编码

    转码命令

    一般情况下,使用 ffmpeg 转码参数分为几个部分:

    ffmpeg [全局参数(可省略)] [输入文件参数(可省略)] -i [输入文件地址] [输出文件参数(可省略)] [输出文件地址]
    

    如:ffmpeg -i input.avi -b 1500k -c:v libx264 -preset veryslow output.mp4

    指定了转码后文件比特率为 1500k,使用的编码格式为 H.264 ,转码速度调至最慢(时间最长,体积最小),转码后容器为 MP4

    ffmpeg 常用的命令行参数如下:

    • -c:指定编码器,通过 ffmpeg -encoders 命令可以获取 ffmpeg 默认支持的编码器,常用编码器如下:

      • libx264:最流行的开源 H.264 编码器
      • NVENC:基于 NVIDIA GPU 的 H.264 编码器(使用 GPU 硬件加速时)
      • libx265:开源的 HEVC 编码器
      • libvpx:谷歌的 VP8 和 VP9 编码器
      • libaom:AV1 编码器
    • -c:v:指定视频编码器,如 libx264 等,,同时也支持加拓展(源码编译时在 libavcodec/allcodecs.c 注册编码器)

    • -c:a:指定音频编码器,如 libfdk_aac

    • -i:指定输入文件,若只添加该参数,则可以查看音频信息,如 ffmpeg -i i.mp4

    • -an:去除音频流

    • -vn: 去除视频流

    • -vf:转化视频分辨率,如 ffmpeg -i i.mp4 -vf scale=1280:-1 o.mp4 将视频转为 1280 * 720 分辨率(720p),也可以使用 -s 1280*720 指定

    • -preset:指定输出的视频质量,会影响文件的生成速度和体积,有以下几个可用的值
      ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow,在进行压缩转码其不考虑时间成本时可以使用 veryslow

    • -y:不经过确认,输出时直接覆盖同名文件。

    • -b:v :指定视频的码率,ffmpeg -i i.mp4 -b:v 1.5M o.mp4 码率设置为小于等于 1.5Mb/s,在进行视频压缩时,一般可调整该值,PS:我们手机拍的视频体积很大,往往是该值偏高造成

    • -b:a : 指定音频的码率 ffmpeg -i i.mp3 -c:a aac -b:a 192k o.m4a

    • -r: 指定视频帧数 ffmpeg -i i.mp4 -r 20 o.mp4,将视频帧数改为 25 帧

    • -ar 设定声音采样率,ffmpeg -i i.mp3 -ar 24000 o.mp3,该值一般为 24000、48000

    转码效率

    使用 COU 进行转码时,往往一个核心只能同时转码一个文件,比如一个 6 核 CPU,只能同时转码 6 个文件,且占用率极高,在设计并发转码时需要考虑机器性能的问题。如果机器加装了 GPU,可以通过 GPU 加速转码,转码有着大量的浮点运算,所以使用 GPU 转码时,同一个文件大概能加快 40% 的速度

    使用 GPU 转码

    由于本人显卡位 N 卡,故只能说下 N 卡 GPU 转码的一些操作方法

    1. 下载 N 卡 CUDA 环境开发包并安装。下载地址:https://developer.nvidia.com/cuda-downloads

    2. 使用命令 ffmpeg -hwaccels 查看支持的硬件加速选项,使用 ffmpeg -codecs | grep cuvid 查看 cuvid 提供的GPU编解码器

    Hardware acceleration methods:
    cuda
    dxva2
    qsv
    d3d11va
    qsv
    cuvid
    
    1. 编写转码命令,使用 -hwaccel 指定加速的硬件(cuvid),此时解码器和编码器都需要由使用相关硬件提供

    ffmpeg -hwaccel cuvid -c:v h264_cuvid -i i.mp4 -c:v h264_nvenc -y o.mp4

    1. 突破 N 卡 GPU 转码并发限制,使用 N 卡进行转码时,当并发数量大于 2 时,将出现 OpenEncodeSessionEx failed: out of memory 的错误,此时可通过打补丁的方式突破限制,补丁地址及打补丁方法:https://github.com/keylase/nvidia-patch

    其他

    ffmepg 除了可以进行音视频的转码外,还可以进行音视频剪辑编辑,如音轨添加、图片水印添加,视频长度剪辑。同时,还可以进行桌面录制,视频推流等,市面上很多视频编辑、桌面录制软件核心都是 ffmpeg,这些如果大家感兴趣的话,可以在之后继续和大家分享

    相关文章

      网友评论

          本文标题:ffmpeg 转码

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