美文网首页
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,这些如果大家感兴趣的话,可以在之后继续和大家分享

相关文章

  • spring-boot & ffmpeg 搭建一个音频转

    利用FFMPEG实现一个音频转码服务 提供一个音频转码服务,主要是利用ffmpeg实现转码,利用java web对...

  • golang 运行ffmpeg命令

    golang 运行ffmpeg命令 系统命令 ffmpeg转码 ffmpeg录音 录音设备名由命令获取 录音

  • ffmpeg编译支持nvidia-GPU解码

    编译ffmpeg 在对视频数据进行转码时,通常使用 FFmpeg 库[https://www.ffmpeg.org...

  • ffmpeg 转码

    ffmpeg 转码使用 下载地址:https://www.ffmpeg.org/download.html[htt...

  • FFmpeg转码

    1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an output_fi...

  • FFmpeg转码

    1.分离视频音频流 2.视频解复用 3.视频转码 //-bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制...

  • Cannot find ffmpeg

    在使用ffmpeg进行音频转码时报错:Cannot find ffmpeg通过google找到解决办法:

  • FFmpeg工具

    ffmpeg在做音视频编解码时非常方便,所以很多场景下转码使用的是ffmpeg,通过ffmpeg –-help可以...

  • 记一次FFmpeg的编译过程的坑

    参考文章:iOS开发 - 超详细集成 FFmpeg 步骤 iOS集成FFmpeg及视频格式转码 以...

  • ffmpeg的转码问题

    //ffmpeg的转码问题 如果将pcm数据转码为mp3数据时需要设置 //AVSampleFormat samp...

网友评论

      本文标题:ffmpeg 转码

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