ffmpeg教程及加速视频转码

news/2024/9/17 14:01:19/ 标签: ffmpeg, 音视频

ffmpeg_0">ffmpeg教程及加速视频转码

ffmpeg_2">1、ffmpeg简介:

ffmpeg来自MPEG视频编码标准。

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

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

2、基础知识:

  • 容器、文件(conainer、file)

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

  • 媒体流(stream):

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

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

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

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

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

  • 编解码器:

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

  • 复用:

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

  • 解复用:

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

在这里插入图片描述

在这里插入图片描述

3、码率和帧率:

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

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

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

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

ffmpeg_57">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:简单多媒体流分析器
ffmpeg_81">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

在这里插入图片描述

在这里插入图片描述

ffmpeg_102">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.ppmy.cn/news/1516437.html

相关文章

ZooKeeper--基于Kubernetes部署ZooKeeper

ZooKeeper 服务 服务类型: 无头服务(clusterIP: None),这是 StatefulSet(有状态集)必需的配置。 端口: 2181 (客户端): 用于客户端连接。 2888 (跟随者): 用于 ZooKeeper 服务器之间的连接。 3888 (领导者): 用于领导者…

多平台谷歌浏览器驱动下载地址分享

多平台谷歌浏览器驱动下载地址分享 一、概述二、windows、linux、mac平台下载地址2.1windows平台下载地址2.2linux、mac平台下载地址 三、arm平台下载地址参考文档 一、概述 在使用一些自动化网页测试工具时,往往需要下载谷歌浏览器驱动文件,用于配合工…

虚幻5|按键触发学习

一,如图参考 1.下移 驱动阈值 越大按时间长才会触发,越小很快就可以触发 2.按下 当按下超出驱动阈值大小就会触发一次,这里的驱动阈值只能设置再0.1~1的大小 3.已松开 当按下的时候,先触发单次的started,如果按压…

[多线程] linux中的线程调度策略

文章目录 多线程调度如何设置调度策略Reference 多线程调度 包含5种线程调度: SCHED_OTHER:SCHED_FIFO:SCHED_RR:SCHED_BATCH:SCHED_IDLE: 如何设置调度策略 在Linux系统中,线程调度策略可以…

分组汇总后再根据数量拼上不同文字

Excel某表格有2列。 AB1Apples32Apples03Bananas14Bananas65Cantaloupe06Kiwis27Kiwis28Kiwis1 要求:按第1列分组,如果组内第2列大于0则对当前行进行计数,否则不计数;计数结果等于1则附加Occurrence,否则附加 Occurr…

一个php快速项目搭建框架源码,带一键CURD等功能

介绍: 框架易于功能扩展,代码维护,方便二次开发,帮助开发者简单高效降低二次开发成本,满足专注业务深度开发的需求。 百度网盘下载 图片:

OpenGL3.3_C++_Windows(36)

PBR_IBL镜面部分 镜面部分并不能像漫反射部分一样将常量提取出来,因为它受到wi和w0的影响,就比如一个x的等式,不能把x部分提取出来一样,他是随着等式变化的但是如果放在等式中,计算所有的可能性,计算量会极…

大模型网络安全能力和风险评估框架Cybench

大模型网络安全能力和风险评估框架Cybench 前言 语言模型在网络安全领域的双重应用,既可以用于攻击(如识别并利用代码漏洞),也可以用于防御(如渗透测试和漏洞检测)。当前的研究包括对CTF挑战、代码片段中的…

100101-批量将指定文件夹下视频时长快进或慢放到指定时长,指定比例尺寸,例如将50S视频转为1:1尺寸的30S-UI

程序功使用环境▶适用的系统环境说明:win7以上64位win系统注意:win32位系统/mac系统需要额外定制▶使用期限:无需注册、不绑电脑、无时间限制▶如何安装:不需要安装程序功能说明▶子文件夹穿透:支持▶支持的文件格式&a…

graphRAG原理解析——基于微软graphRAG+Neo4j llm-graph-builder

知识图谱生成 llm-graph-builder(以下简称 LGB)也使用了最新的 graph RAG 的思路,使用知识图谱来加持RAG,提供更加准确和丰富的知识问答。知识图谱的生成上,利用大模型的泛化能力来自动生成和构建知识图谱&#xff0…

Qt使用usbcan通信

一.usbcan环境搭建 可以参照我的这篇博客&#xff1a;USBCAN-II/II使用方法以及qt操作介绍 二.项目效果展示 三.项目代码 这部分代码仅仅展示了部分功能&#xff0c;仅供参考。 #include"ControlCAN.h" #include<QDebug> #include <windows.h> #incl…

《Clean Code《代码整洁之道》解读

《Clean Code》&#xff08;《代码整洁之道》&#xff09;是软件开发领域的经典著作&#xff0c;由知名软件工程师Robert C. Martin&#xff08;又称"Uncle Bob"&#xff09;编写。本书详细探讨了如何编写整洁、易于维护、可读性强的代码。对于任何软件项目的长期维护…

el-form只对rules中个别字段进行校验

正常属性校验方式 const moveToErr () > {const errorDom document.getElementsByClassName(el-form-item__error);console.log(errorDom)if (errorDom.length) {errorDom[0].scrollIntoView({block: center,behavior: smooth})} };const saveItem async (formEl?: For…

机器学习——决策树,朴素贝叶斯

一.决策树 决策树中的基尼系数&#xff08;Gini Index&#xff09;是用于衡量数据集中不纯度&#xff08;或混杂度&#xff09;的指标。基尼系数的取值范围在0到0.5之间&#xff0c;其中0表示数据完全纯&#xff08;同一类别&#xff09;&#xff0c;0.5表示数据完全混杂。 基…

linux下部署数据库总结

数据库 数据库主要分为两大类&#xff1a;关系型数据库与 NoSQL 数据库 关系型数据库&#xff0c;是建立在关系模型基础上的数据库&#xff0c;其借助于集合代数等数学概念和方法来处理数据库 中的数据主流的 MySQL、Oracle、MS SQL Server 和 DB2 都属于这类传统数据库。 NoSQ…

大数据挖掘的步骤是怎样的呢?

大数据挖掘是一个复杂而系统的过程&#xff0c;它利用计算机科学的方法和技术&#xff0c;对大量、多样化、高速增长的数据进行深入挖掘&#xff0c;以发现有价值的信息和知识。以下是大数据挖掘的主要步骤和方法&#xff1a; 一、大数据挖掘的步骤 数据收集&#xff1a; 从各…

[Meachines] [Easy] BoardLight Dolibarr17.0.0-RCE+Enlightenment v0.25.3权限提升

信息收集 IP AddressOpening Ports10.10.11.11TCP:22,80 $ nmap -p- 10.10.11.11 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 06:2…

【Java】IDEA从零到一使用statemachine状态机模拟订单 (图解)

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容&#xff1a;三、问题描述四、解决方案&#xff1a;4.1 认识依赖4.2 使用状态机4.2.1 目录结构4.2.2 状态机解析4.2.2.1 概念4.2.2.…

【Python游戏】Joystick游戏手柄编程介绍

本文收录于 《一起学Python趣味编程》专栏&#xff0c;从零基础开始&#xff0c;分享一些Python编程知识&#xff0c;欢迎关注&#xff0c;谢谢&#xff01; 文章目录 一、前言二、正式开始2.1 认识游戏手柄结构2.2 了解pygame.joystick模块简单使用步骤2.3 了解pygame.joystic…

USB详解,配置及难点

一、USB发展历史 二、USB简介 USB有USB1.0/1.1/2.0/3.0多个版本&#xff0c;标准USB由4根线组成,VCC&#xff0c;GND&#xff0c;D&#xff0c;D-&#xff0c;其中D和D-是数据线&#xff0c;采用差分传输。在USB主机上,D-和D都是接了15K的电阻到地,所以在没有设备接入的时候,D、…