FFmpeg教程及视频转码加速指南
创作时间:
作者:
@小白创作中心
FFmpeg教程及视频转码加速指南
引用
CSDN
1.
https://blog.csdn.net/weixin_53060366/article/details/141562456
FFmpeg是一个功能强大的开源多媒体处理工具,广泛应用于视频和音频的编码、转换和流媒体处理。本文将详细介绍FFmpeg的基础知识、安装方法、常用参数以及如何加速视频转码,帮助读者快速掌握这一实用工具。
FFmpeg简介
FFmpeg源自MPEG视频编码标准,是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它可以轻易地实现多种视频格式之间的相互转换。
基础知识
- 容器、文件(container、file):即特定格式的多媒体文件,比如MP4、FLV、MKV等。
- 媒体流(stream):表示时间轴上的一段连续数据,如一段声音数据、一段视频数据或一段字幕数据。可以是压缩的,也可以是非压缩的,压缩的数据需要关联特定的编解码器。
- 数据帧、数据包(frame、packet):一个媒体流是由大量的数据帧组成,对于压缩数据,帧对应着编解码器的最小处理单元,分属于不同媒体流的数据帧交错存储于容器之中。frame对应压缩前的数据,packet对应压缩后的数据。
- 编解码器:以帧为单位实现压缩数据和原始数据之间的转换。
- 复用:把不同的流按照某种容器的规则放入容器。
- 解复用:把不同的流从某种容器中解析出来。
码率和帧率
码率和帧率是视频文件的最重要的基本特征,对于他们的特有设置会决定视频质量。如果我们知道码率和时长,可以很容易地计算出文件的大小。
- 帧率:是视频文件中每一秒的帧数。肉眼想看到连续移动图像至少需要15帧。
- 码率:也叫比特率,是一个确定整体视频、音频质量的参数,秒为单位处理的位数,码率和视频质量成正比,在视频文件中比特率用bps来表达。
Windows搭建FFmpeg
- 官网下载编译好的shared库;
- 将执行文件ffmpeg.exe、ffplay.exe、ffprobe.exe拷贝到C:\Windows目录;
或者将这三个执行文件添加至Path环境变量中,就不需要2、3步骤了。 - 将相应的动态库拷贝到C:\Windows\SysWOW64目录;注:WOW64(Windows-on-Windows 64-bit)
- 查看是否安装完成:ffmpeg -version
- ffmpeg、ffplay、ffprobe区别:
- ffmpeg:超快音视频编码器(类似爱剪辑)
- ffplay:简单媒体播放器
- ffprobe:简单多媒体流分析器
- ffmpeg命令查看:
ffmpeg -h、ffmpeg -h long、ffmpeg -h full
ffplay -h
ffprobe -h - ffmpeg处理流程:
先看两条命令:
ffmpeg -i test_1920x1080.mp4 -acodec copy -vcodec libx264 -s 1280x720 test_1280x720.flv
ffmpeg -i test_1920x1080.mp4 -acodec copy -vcodec libx265 -s 1280x720 test_1280x720.mkv
FFmpeg参数说明
- 主要参数:
- -i :设定输入流
- -f:设定输出格式
- -ss:开始时间
- -t:时间长度
- 音频参数:
- -aframes:设置要输出的音频帧数
- -b:a:音频码率
- -ar:设定采样率
- -ac:设定声音的channel数
- -acodec:设定声音编解码器,如果用copy表示原始编解码器数据必须被拷贝
- -an:不处理音频
- -af:音频过滤器
- 视频参数:
- -vframes:设置要输出的视频帧数
- -b:设定视频码率
- -b:v:视频码率
- -r:设定帧速度
- -s:设定画面的宽与高
- -vn 不处理视频
- -aspect aspect 设置纵横比4:3,或者16:9
- -vcodec:设定视频编解码器,如果用copy表示原始编解码器数据必须被拷贝
- -vf 视频过滤器
强制格式:-vcodec libx264
IPTV影片转码详解
ffmpeg -i /home/mysftp/mydrive/4K/dsls/1/1.ts -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -color_range tv -pix_fmt yuv420p -c:v libx264 -preset ultrafast -b:v 35500k -minrate 35500k -bufsize 35500k -maxrate 40500k -nal-hrd cbr -s 3840*2160 -y /home/mysftp/mydrive/4K/dsls/1/1_1724639135824_transcoding.mp4
- ffmpeg:调用 FFmpeg 工具,开始进行视频处理。
- -i /home/mysftp/mydrive/4K/dsls/1/1.ts:指定输入文件的位置和名称。在这里,输入文件是/home/mysftp/mydrive/4K/dsls/1/1.ts。
- -color_primaries bt2020:设置颜色原点为 BT.2020。BT.2020 是一种广色域标准,常用于 4K 和 8K 视频。
- -color_trc smpte2084:设置色彩传递特性(色调映射曲线)为 SMPTE 2084。SMPTE 2084 又称为 PQ(Perceptual Quantizer),用于 HDR 视频的色彩处理。
- -colorspace bt2020nc:设置颜色空间为 BT.2020 non-constant luminance(非恒定亮度)。这是 BT.2020 标准的一种变体,主要用于 HDR 内容。
- -color_range tv:设置色彩范围为电视标准(TV),通常表示色彩范围在 16-235 之间。这与 PC 标准(PC)的 0-255 色彩范围不同。
- -pix_fmt yuv420p:指定像素格式为 YUV 4:2:0 平面。YUV 4:2:0 是一种常见的视频压缩格式,具有较低的色彩分辨率,但能够有效减少文件大小。
- -c:v libx264:设置视频编码器为libx264。这是一个用于 H.264/AVC 编码的开源库,广泛用于视频压缩。
- -preset ultrafast:设置编码预设为ultrafast。ultrafast是 FFmpeg 提供的一个编码预设选项,速度最快,但压缩效率较低。这通常用于需要快速编码的场景。
- -b:v 35500k:设置视频比特率为 35500 kbps(35.5 Mbps)。这是视频编码的目标比特率,影响视频的质量和文件大小。
- -minrate 35500k:设置最小比特率为 35500 kbps。确保视频编码过程中不会低于此比特率,以避免质量下降。
- -bufsize 35500k:设置缓冲区大小为 35500 kbps。这影响码率控制,特别是在动态场景中,以平滑比特率的波动。
- -maxrate 40500k:设置最大比特率为 40500 kbps(40.5 Mbps)。此设置允许视频编码在瞬间使用更高的比特率,以提高高复杂度场景的质量。
- -nal-hrd cbr:设置 NAL(网络抽象层)单元的码率控制模式为 CBR(恒定比特率)。这确保了编码过程中输出的比特率保持稳定。
- -s 3840*2160:设置输出视频的分辨率为 3840x2160,即 4K 分辨率。
- -y:强制覆盖输出文件。如果输出文件已经存在,使用此选项会自动覆盖它。
- /home/mysftp/mydrive/4K/dsls/1/1_1724639135824_transcoding.mp4:指定输出文件的位置和名称。在这里,输出文件将保存为/home/mysftp/mydrive/4K/dsls/1/1_1724639135824_transcoding.mp4。
如何提升转码速度?
1. 使用更快的编码预设
- 当前设置: -preset ultrafast
- 建议: 如果使用 -preset ultrafast 仍然不够快,你可以尝试更高效的硬件加速方案(例如使用 NVIDIA 的 h264_nvenc 编码器)。如果你愿意接受一些质量上的折中,可以尝试其他较快的预设如 superfast 或 veryfast。
2. 硬件加速
- 使用 GPU 编码器:
- 对于 NVIDIA GPU 用户,可以使用 -c:v h264_nvenc 替代 -c:v libx264,它利用 GPU 进行编码,加速转码过程。
- 示例命令:
ffmpeg -i /home/mysftp/mydrive/4K/dsls/1/1.ts -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -color_range tv -pix_fmt yuv420p -c:v h264_nvenc -preset fast -b:v 35500k -minrate 35500k -bufsize 35500k -maxrate 40500k -nal-hrd cbr -s 3840x2160 -y /home/mysftp/mydrive/4K/dsls/1/1_1724639135824_transcoding.mp4
- 对于 AMD GPU 用户,可以使用 -c:v h264_amf。
3. 调整比特率设置
- 目标比特率: -b:v 35500k
- 建议: 适当降低比特率可以减小编码负担,从而加快转码速度。如果视频质量允许,可以尝试降低比特率,但需权衡质量和速度。
4. 分辨率和帧率调整
- 当前分辨率: -s 3840x2160
- 建议: 如果不一定需要保持 4K 分辨率,可以尝试降低输出分辨率。例如,720p 或 1080p 可以显著提高转码速度。
5. 使用多线程
- 当前设置: 默认情况下,ffmpeg 会自动使用多个线程,但可以手动调整线程数以优化性能。
- 示例:设置线程数为 8
ffmpeg -i /home/mysftp/mydrive/4K/dsls/1/1.ts -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -color_range tv -pix_fmt yuv420p -c:v libx264 -preset ultrafast -b:v 35500k -minrate 35500k -bufsize 35500k -maxrate 40500k -nal-hrd cbr -s 3840x2160 -threads 8 -y /home/mysftp/mydrive/4K/dsls/1/1_1724639135824_transcoding.mp4
6. 关闭不必要的功能
- 调整选项: 确保只使用必需的编码选项。避免使用冗余或不必要的过滤器和设置。
7. 优化硬盘和内存
- 磁盘 IO: 确保你的硬盘速度足够快。使用 SSD 而不是 HDD 可以显著提高速度。
- 内存: 确保系统有足够的内存来处理转码任务,避免因内存不足导致的性能瓶颈。
8. 减少视频处理操作
- 避免复杂滤镜: 如果没有应用滤镜或处理(如去噪、锐化等),转码速度会更快。
热门推荐
吉林满族姓氏文化:从“瓜尔佳”到“关”的历史变迁
辛亥革命后满族姓氏汉化:融合与流失的双重影响
从佟佳到佟:满族八大姓氏的汉化与文化融合
10亿光年外神秘信号破解:双黑洞系统潮汐破坏气体云
ESO发布银河系全景红外图,15亿天体创观测纪录
韩城历史名人谱:司马迁领衔,梁氏文化薪火相传
韩城古城:百座明清古建诉说千年风韵,夜景经济焕发文旅新活力
陕西韩城:明清古城、史圣祠墓、古村落里的冬日时光
林黛玉三首诗词里的宝黛爱情:从初见到诀别
经典越剧《红楼梦》亮相泉州,演绎传统戏曲新篇
解密食品添加剂黄原胶:用途广泛,安全性高
冰箱故障应急指南:从临时保存到日常维护
冰箱维修保养指南:从故障排查到日常维护
《红楼梦》三大女主:从黛玉到凤姐,看封建礼教下的女性悲剧
枸杞子泡水:古籍记载的养生智慧遇上现代营养学研究
蒙古风味炖猪鼻,让你秒变大厨!
情绪波动让你饭后打嗝不止?专家揭秘
三步过滤+智能监测,揭秘家用净水机工作原理
净水器到底值不值得装?四大维度帮你做出决定
银行理财牌照发放为何趋缓
解码情绪价值:从共情到职场竞争力
曲那丁肽对抽筋效果有限,专家建议采取综合防治方案
专家:预防抽筋不能只靠香蕉,还需均衡饮食和运动
老年人腿抽筋不止是缺钙,最新研究发现维生素K2有效
春秋古都郑韩故城:出土莲鹤方壶的千年遗址
从燕国边疆到高句丽都城:平壤古城的历史演变
如何高效应对舆情危机?揭秘专业的处理技巧与实战案例
应急撤离讲解
姚笛凭真实演绎走红,《裸婚时代》奠定演艺之路
兴安多羔羊:13月两胎三羔,内蒙古草原畜牧业创新标杆