ffmpeg教程及加速视频转码

ffmpeg教程及加速视频转码

1、ffmpeg简介:

ffmpeg来自MPEG视频编码标准。

是一套可以用来记录,转换数字音频、视频,并能将其转化为流的开源计算机程序。

可以轻易的实现多种视频格式之间的相互转换。

2、基础知识:

  • 容器、文件(conainer、file)

    即特定格式的多媒体文件,比如MP4、flv、mkv等

  • 媒体流(stream):

    表示时间轴上的一段连续数据,如一段声音数据、一段视频数据或一段字幕数据。

    可以是压缩的,也可以是非压缩的,压缩的数据需要关联特定的编解码器。

  • 数据帧、数据包(frame、packet)

    一个媒体流是由大量的数据帧组成,对于压缩数据,帧对应着编解码器的最小处理单元,分属于不同媒体流的数据帧交错存储于容器之中。

    frame对应压缩前的数据,packet对应压缩后的数据。

  • 编解码器:

    以帧为单位实现压缩数据和原始数据之间的转换。

  • 复用:

    把不同的流按照某种容器的规则放入容器。

  • 解复用:

    把不同的流从某种容器中解析出来。

在这里插入图片描述

在这里插入图片描述

3、码率和帧率:

码率和帧率是视频文件的最重要的基本特征,对于他们的特有设置会决定视频质量。

如果我们知道码率和时长,可以很容易的计算出文件的大小。

帧率:是视频文件中每一秒的帧数。肉眼想看到连续移动图像至少需要15帧。

码率:也叫比特率,是一个确定整体视频、音频质量的参数,秒为单位处理的位数,码率和视频质量成正比,在视频文件中比特率用bps来表达。

4、Windows搭建ffmpeg

1、官网下载编译好的shared库;

在这里插入图片描述

2、将执行文件ffmpeg.exe、ffplay.exe、ffprobe.exe拷贝到C:\Windows目录;

或者将这三个执行文件添加至Path环境变量中,就不需要2、3步骤了。

在这里插入图片描述

3、将相应的动态库拷贝到C:\Windows\SysWOW64日录;注:WOW64(Windows-on-Windows 64-bit)

4、查看是否安装完成:ffmpeg -version

5、ffmpeg、ffplay、ffprobe区别:

  • ffmpeg:超快音视频编码器(类似爱剪辑)
  • ffplay:简单媒体播放器
  • ffprobe:简单多媒体流分析器
6、ffmpeg命令查看:

ffmpeg -h、ffmpeg -h long、ffmpeg -h full

ffplay -h

ffprobe -h

7、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

在这里插入图片描述

在这里插入图片描述

5、ffmpeg参数说明:

1、主要参数:

  • -i :设定输入流
  • -f:设定输出格式
  • -ss:开始时间
  • -t:时间长度

2、音频参数:

  • -aframes:设置要输出的音频帧数
  • -b:a:音频码率
  • -ar:设定采样率
  • -ac:设定声音的channel数
  • -acodec:设定声音编解码器,如果用copy表示原始编解码器数据必须被拷贝
  • -an:不处理音频
  • -af:音频过滤器

3、视频参数:

  • -vframes:设置要输出的视频帧数
  • -b:设定视频码率
  • -b:v:视频码率
  • -r:设定帧速度
  • -s:设定画面的宽与高
  • -vn 不处理视频
  • -aspect aspect 设置纵横比4:3,或者16:9
  • -vcodec:设定视频编解码器,如果用copy表示原始编解码器数据必须被拷贝
  • -vf 视频过滤器

在这里插入图片描述

强制格式:-vcodec libx264

6、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
  1. ffmpeg: 调用 FFmpeg 工具,开始进行视频处理。
  2. -i /home/mysftp/mydrive/4K/dsls/1/1.ts: 指定输入文件的位置和名称。在这里,输入文件是 /home/mysftp/mydrive/4K/dsls/1/1.ts
  3. -color_primaries bt2020: 设置颜色原点为 BT.2020。BT.2020 是一种广色域标准,常用于 4K 和 8K 视频。
  4. -color_trc smpte2084: 设置色彩传递特性(色调映射曲线)为 SMPTE 2084。SMPTE 2084 又称为 PQ(Perceptual Quantizer),用于 HDR 视频的色彩处理。
  5. -colorspace bt2020nc: 设置颜色空间为 BT.2020 non-constant luminance(非恒定亮度)。这是 BT.2020 标准的一种变体,主要用于 HDR 内容。
  6. -color_range tv: 设置色彩范围为电视标准(TV),通常表示色彩范围在 16-235 之间。这与 PC 标准(PC)的 0-255 色彩范围不同。
  7. -pix_fmt yuv420p: 指定像素格式为 YUV 4:2:0 平面。YUV 4:2:0 是一种常见的视频压缩格式,具有较低的色彩分辨率,但能够有效减少文件大小。
  8. -c:v libx264: 设置视频编码器为 libx264。这是一个用于 H.264/AVC 编码的开源库,广泛用于视频压缩。
  9. -preset ultrafast: 设置编码预设为 ultrafastultrafast 是 FFmpeg 提供的一个编码预设选项,速度最快,但压缩效率较低。这通常用于需要快速编码的场景。
  10. -b:v 35500k: 设置视频比特率为 35500 kbps(35.5 Mbps)。这是视频编码的目标比特率,影响视频的质量和文件大小。
  11. -minrate 35500k: 设置最小比特率为 35500 kbps。确保视频编码过程中不会低于此比特率,以避免质量下降。
  12. -bufsize 35500k: 设置缓冲区大小为 35500 kbps。这影响码率控制,特别是在动态场景中,以平滑比特率的波动。
  13. -maxrate 40500k: 设置最大比特率为 40500 kbps(40.5 Mbps)。此设置允许视频编码在瞬间使用更高的比特率,以提高高复杂度场景的质量。
  14. -nal-hrd cbr: 设置 NAL(网络抽象层)单元的码率控制模式为 CBR(恒定比特率)。这确保了编码过程中输出的比特率保持稳定。
  15. -s 3840\*2160: 设置输出视频的分辨率为 3840x2160,即 4K 分辨率。
  16. -y: 强制覆盖输出文件。如果输出文件已经存在,使用此选项会自动覆盖它。
  17. /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 编码器)。如果你愿意接受一些质量上的折中,可以尝试其他较快的预设如 superfastveryfast

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. 减少视频处理操作

  • 避免复杂滤镜: 如果没有应用滤镜或处理(如去噪、锐化等),转码速度会更快。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/412258.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FDM3D打印系列——创想三维打印机卡料修复后续处理

大家好,我是阿赵。   之前我的创想三维Sermoon v1打印机卡料了,我自己拆开打印头组件,把卡料的地方修复了。   但问题并没有彻底的解决。在后续打印之中,还是经常出现卡料。有些需要打印实际个小时的模型,在打印了…

基于Material Design风格开源的Avalonia UI控件库

前言 今天大姚给大家分享一款基于Material Design风格开源、免费(MIT License)的Avalonia UI控件库:Material.Avalonia。 当前项目还处于alpha阶段。 Avalonia介绍 Avalonia是一个强大的框架,使开发人员能够使用.NET创建跨平台应…

内网穿透的应用-如何使用跨平台终端Tabby结合内网穿透工具异地远程ssh访问Ubuntu系统

文章目录 前言1. Tabby下载安装2. Tabby相关配置3. Tabby简单操作4. ssh连接Linux4.1 ubuntu系统安装ssh4.2 Tabby远程ssh连接ubuntu 5. 安装内网穿透工具5.1 创建公网地址5.2 使用公网地址远程ssh连接 6. 配置固定公网地址 前言 今天和大家分享一下如何在Windows系统使用Tabb…

Trimming项目完整流程

Trimming项目完整流程 FsmStates状态机 public enum FsmStates {// 初始状态,FSM 启动后的第一个状态Initial,// 等待序列化过程控制器(SPS)启动的状态// 在此状态下,FSM 等待外部系统或设备准备就绪WaitOnSPSStart,// 加载数据库…

【使用python实现多目标批量ping】附案例

以下为使用 Python 实现批量 ping 的多种方法及代码示例: 方法一: import subprocessfilepath E:\\Python\\tools\\AutoMatic\\hosts.txt with open(filepath, r) as f:hosts f.readlines()for host in hosts:result subprocess.check_output((ping…

C语言典型例题55

《C程序设计教程(第四版)——谭浩强》 题目: 例题4.7 兔子的繁殖。这是一个有趣的古典问题:有一对兔子,从出生后的第3个月开始起每个月都生一对兔子。小兔子长到第3个月又生一对兔子。假设所有兔子都不死,…

大模型的latency(延迟)和throughput(吞吐量)有什么区别?

1. 导入 为了快速应用大模型,我们需要采购商业大模型。采购前,对接销售时,我们描述了我们的场景和需求: Q:我们的prompts token数量在1500-2000之间,completion token数量在500左右。这种情况下&#xff…

同三维S20和S20K系列高清和4K摄像机说明书:高清HDMI摄像机

同三维S20和S20K系列高清和4K摄像机 视频会议摄像机概述前言 非常感谢您使用本公司视频会议产品!在使用本产品之前,敬请仔细阅读使用手册。本手册详细介绍了多功能视频会议摄像机的功能、安装和使用操作的一般原则及方法。本系列视频会议摄像机是一款高性能、高灵敏…

设计模式 -- 外观模式(Facade Pattern)

1 问题引出 组建一个家庭影院 DVD 播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为: 直接用遥控器:统筹各设备开关 开爆米花机,放下屏幕 ,开投影仪 ,开音响&#xf…

【云原生】Kubernetes中如何通过Pod名称查询Docker容器ID,通过Docker容器ID查询Pod名称?

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

FGF23:家族靶向治疗先行者

成纤维细胞生长因子23(FGF23)属于FGF19亚家族成员,由成骨细胞、骨细胞和骨髓合成,是磷酸盐和钙稳态的重要调节剂,同时与铁稳态、炎症和红细胞生成也有关。 (数据来源AlphaFold) FGF23由251个氨…

Git 学习

一、基本使用 1. 基本理论 Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的项目;版本控制是一种记录一个或者若干个文件内容变化,以便来查阅特定版本修订情况的系统 集中化版本控制系统:SVN, CV…

应急响应--日志分析

应急响应–日志分析 文章目录 一、Windows日志二、Linux日志三、Web日志 3.1、IIS中间件日志3.2、Apache中间件日志3.3、Tomcat中间件日志3.4、Weblogic3.5、Nginx中间件日志 一、Windows日志 Windows日志记录着Windows系统中硬件、软件和系统问题的信息,同时还…

基于imx6ull平台opencv的图像采集、ffmpeg推流和Windows端拉流(多线程)

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 验证功能一、概述 本文档是针对imx6ull平台opencv的图像采集、ffmpeg推流和Windows端拉流。首先创建一个线程opencv通过摄像头采集视频图像,接着再创建两个线程,其中一个线程获取采集的视频图…

如何让ChatGPT说话更像人类

ChatGPT在多个领域展现了卓越的能力,但对话中仍不可避免地带有一定的机械感。幸运的是,OpenAI推出的GPTs功能可以让用户自定义prompt。最近,我发现了其中一个GPTs,它能让ChatGPT的对话更加贴近真人,现在就来与大家分享…

基于RS232的VGA显示

前言 基于ROM的VGA显示缺点:需要将图片转化为mif文件,使用的RAM是FPGA内部RAM模拟出来的,占用资源大切换显示图片需要重新转化,对ROM进行写入,使用极不方便,因此这里采用RS232进行VGA显示。 正文 一、基于…

多线程篇(基本认识 - 锁机制 - 乐观锁 悲观锁)(持续更新迭代)

一、Java层 乐观锁(CAS)和悲观锁(synchronized) 1. 锁 在代码中多个线程需要同时操作共享变量,这时需要给变量上把锁,保证变量值是线程安全的。 锁的种类非常多,比如:互斥锁、自…

【功能自动化】自动识别测试用例

1.创建unitWebtours.py 将unitWebtours.py放在test文件夹下 unitWebtours.py 代码实现 from selenium import webdriver from selenium.webdriver.support.select import Select from time import sleep import unittestdriver Noneclass Webtours(unittest.TestCase):clas…

Ubuntu24.04 安装向日葵远程访问工具

目录 安装向日葵远程访问工具 解决方案: 1.下载软件包 2.远程Ubuntu桌面控制卡住 卸载向日葵远程访问工具 安装向日葵远程访问工具 安装命令:sudo dpkg -i 文件名.deb sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 提示错误如下&#xf…

三级_网络技术_54_应用题

一、 请根据下图所示网络结构回答下列问题。 1.填写路由器RG的路由表项。 目的网络/掩码长度输出端口__________S0(直接连接)__________S1(直接连接)__________S0__________S1__________S0__________S1 2.如果将10.10.67.128/2…