![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ffmpeg
文章平均质量分 83
Dontla
调包侠
展开
-
ffmpeg RTMP推流参数介绍(rtmp参数)
FFmpeg是一个开源的音视频处理软件库,它包含了丰富的音视频编解码器、格式转换等工具。通过命令行接口,用户可以调用FFmpeg内置的众多功能,对音视频数据进行各种处理。RTMP是Adobe Systems公司开发的一种用于实时传输音频、视频和数据的协议。RTMP基于TCP,支持低延迟的数据交互,适合用于实时音视频流的传输。通过上述介绍,我们对FFmpeg在进行RTMP推流时所使用的参数有了详细的理解。实际使用中,可以根据具体需求和环境条件,灵活调整这些参数,实现音视频数据的高效传输。原创 2024-01-19 08:45:00 · 2139 阅读 · 0 评论 -
Docker RTMP服务器搭建与视频流推送示例(流媒体服务器tiangolo/nginx-rtmp,推流客户端ffmpeg)
本文详细介绍了如何搭建一个RTMP服务器,如何使用ffmpeg进行视频推流,以及如何使用VLC播放RTMP流。希望这些信息能够帮助你快速地实现视频推流和播放。原创 2024-01-17 00:23:24 · 7246 阅读 · 2 评论 -
ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第四章:Fmpeg转码——FFmpeg输出MP3、FDK AAC编码、CBR、VBR、ABR、HE-AAC、HEv2-AAC
FFmpeg 从入门到精通日常生活中听音乐时大多数为 MP3 音乐,使用 FFmpeg 可以解码 MP3,同样 FFmpeg 也可以支持 MP3 编码, FFmpeg 使用第三方库 libmp3lame 即可编码 MP3 格式。不但如此,MP3 编码还是低延迟的编码,可以支持的采样率比较多,包含 44 100、48 000、32 000、22 050、24 000、16 000、11 025、12 000、8000 多种采样率,采样格式也比较多,包含 s32p (signed 32 bits, planar原创 2024-01-15 08:30:00 · 1225 阅读 · 0 评论 -
ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第四章:Fmpeg转码——ffmpeg硬编解码(硬件编解码)——Nvidia GPU、Intel QSV、树莓派、OS X
当使用 FFmpeg 进行软编码时,常见的基于 CPU 进行 H.264 或 H.265 编码其相对成本会比较高, CPU 编码时的性能也很低,所以出于编码效率及成本考虑,很多时候都会考虑采用硬编码,常见的硬编码包含 Nvidia GPU 与 Intel QSV 两种,还有常见的嵌入式平台,如树莓派、瑞芯微等,本节将重点介绍常见的 Nvidia 与 Intel 硬编码,以及树莓派的硬编码。原创 2024-01-15 09:00:00 · 3715 阅读 · 0 评论 -
Intel Quick Sync Video(QSV)(快速视频同步)介绍
Intel Quick Sync Video(QSV)是由Intel开发的专门用于视频编码和解码的技术。这项技术从Sandy Bridge微架构开始引入,自那时起,一直被集成在Intel的大多数桌面和移动处理器中。这项技术充分利用了内置在处理器中的专用媒体处理能力,提供了一种更快、更高效的方式来处理视频任务。使用QSV,可以大幅度减少CPU的负载,同时保持高质量的视频输出。原创 2024-01-14 08:30:00 · 2741 阅读 · 0 评论 -
ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第四章:Fmpeg转码——ffmpeg软编解码(软件编解码、Software Codec)
FFmpeg 从入门到精通参数全部为默认设置。关键帧(I帧)均匀分布在视频切片中的好处主要体现在两个方面:随机访问和搜索性能:每一个关键帧都是完全自我包含的,可以独立于其他帧进行解码。这意味着,如果你想跳转到视频中的某个特定时间点(例如,用户拖动进度条进行快进或者快退),播放器可以直接找到最近的关键帧开始播放,而无需从视频开头一路解码过来。因此,如果关键帧均匀地分布在视频中,将会提高视频的随机访问性能。错误恢复:如果视频流在传输过程中出现错误,丢失了一部分数据,那么从下一个关键帧开始原创 2024-01-13 13:17:30 · 1235 阅读 · 0 评论 -
ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第三章:FFmpeg转封装——视频文件切片;音视频流抽取;格式转换(封装转换)、编码转换的资源使用情况
只需要知道什么是切片,应用场景是什么,具体怎么切,用什么命令,这些都是相对来说没有那么重要的。原创 2024-01-13 12:28:46 · 1114 阅读 · 0 评论 -
NAL单元介绍(网络抽象层单元(Network Abstraction Layer Unit,简称NALU))(H.264/AVC或H.265/HEVC编码重要组成部分,用于封装视频数据和相关信息)
网络抽象层单元(Network Abstraction Layer Unit,简称NALU)是H.264/AVC或H.265/HEVC编码的重要组成部分。它用于封装视频数据和相关信息,并在网络中传输这些封装的单元。因为篇幅有限,我们能仅以H.264/AVC中的NALU作为案例来介绍。H.264/AVC是一种广泛使用的视频压缩标准,设计目标是以较低的比特率提供高质量的视频。它通过多种技术实现压缩效果,包括帧内预测、帧间预测、变换编码、环路滤波等。这些方法可以有效地减少视频的冗余信息,从而实现高效的压缩。原创 2024-01-10 09:45:00 · 1804 阅读 · 0 评论 -
AVCC(AVC Configuration)NALU封装格式介绍(一种描述H.264视频流信息的封装格式,包含了视频编码的关键元数据,是大多是MP4 H.264视频流的NALU封装格式)
AVCC (AVC Configuration) 是一种描述H.264视频流信息的格式,广泛用于MPEG-4和Flash视频中。这种封装方式使得解码器在处理视频数据之前能获取到关键的解码参数。在详细探讨AVCC封装格式之前,先了解一下H.264视频编码技术。H.264是一种常见的视频编码标准,也被称为MPEG-4 Part 10,或AVC(Advanced Video Coding)。它广泛应用于各种网络环境,从低速互联网连接到高清电视播放。原创 2024-01-10 09:15:00 · 1649 阅读 · 0 评论 -
AnnexB封装格式介绍(主要用于H.264和H.265视频编码标准,是一种常见的视频流NALU封装格式,常用于RTSP、RTP传输)
AnnexB是一种常见的封装格式,主要用于H.264和H.265视频编码标准。其特性包括插入开始代码以标识NAL单元的开始,以及使用字节流方式传输数据。原创 2024-01-08 23:34:38 · 1352 阅读 · 0 评论 -
视频文件切片介绍(视频切片)
通过将视频切片,可以按需加载和播放视频,而不需要一次性下载完整的视频文件,从而提高视频的加载速度和播放效率。原创 2024-01-09 09:15:00 · 4037 阅读 · 0 评论 -
ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第三章:FFmpeg转封装——视频文件转M3U8(转HLS)
M3U8 是一种常见的流媒体格式,主要以文件列表的形式存在,既支持直播又支持点播,尤其在 Android、iOS 等平台最为常用,下面就来看一下 M3U8 的最简单的例子:从这个例子中可以看到如下几个字段,其含义具体如下。可参考:ffmpeg转HLS参数介绍(ffmpeg转m3u8参数)原创 2024-01-08 09:45:00 · 1482 阅读 · 0 评论 -
ffmpeg转HLS参数介绍(ffmpeg转m3u8参数)
如果设置为0,那么将不再生成新的播放列表文件,而是覆盖旧的文件。此选项使得所有媒体数据都被写入一个单独的分段文件,同时生成一个与之配套的索引文件。这个参数对于某些特定场景非常有用,比如你希望继续一个已经存在的HLS流,并且不希望覆盖已经存在的切片。此选项强制每个分段文件都从新的关键帧开始,这样可以确保每个分段文件都可以独立解码。,它将生成一个"live"样式的播放列表,但如果新的分片被添加,旧的不会被删除。是输入文件的标志,后面紧跟着的是输入文件的路径。所设置的大小时,是否开始覆盖旧的分段文件。原创 2024-01-08 09:00:00 · 2473 阅读 · 0 评论 -
ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第三章:FFmpeg转封装——音视频转MP4、FLV——MP4格式标准、MP4 box列表
MP4 格式标准为 ISO-14496 Part 12、ISO-14496 Part 14 ,标准内容并不是特别多,下面就来着重介绍一些重要的信息。如果要了解 MP4 的格式信息,首先要清楚几个概念,具体如下。原创 2024-01-05 09:00:00 · 1139 阅读 · 0 评论 -
ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第二章:FFmpeg工具使用基础——第三节:ffplay常用命令
如果希望视频播放时播放器的窗口显示标题为自定义标题,则可以使用如下命令:ffplay -window_title “Hello World, This is a sample” output.mp4上述命令的显示窗口如图 2-4 所示。原创 2023-12-25 08:30:00 · 1240 阅读 · 0 评论 -
H.264运动补偿(Motion Compensation)概念(块匹配、运动矢量和残差编码、块划分和运动估计)(运动估计算法:全搜索、钻石搜索、六边形搜索)
H.264通过运动补偿技术有效地消除了视频帧之间的冗余信息,从而达到了高效的视频压缩效果。但与此同时,运动估计、残差编码等步骤也带来了一定的挑战。尽管如此,H.264依然是目前最广泛使用的视频压缩标准之一,其高效的压缩性能和灵活的编码选项使得它在各种应用场景中都有着广泛的应用。原创 2023-12-24 19:14:33 · 1773 阅读 · 0 评论 -
H.264宏块(Macroblock)概念(运动估计、变换编码、环路滤波)
在视频压缩技术中,宏块是最基本的处理单元。每个宏块通常包含16x16的像素点,这些像素点共享某些参数,例如运动矢量和编码模式等。这种方式极大地减少了必须处理的数据量,同时也提高了编码效率1。原创 2023-12-24 18:06:03 · 1291 阅读 · 0 评论 -
ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第二章:FFmpeg 工具使用基础——第二节:ffprobe常用命令
从输出的内容可以看到,输出的信息为 FLAT 格式的输出,从 Packet 的 stream_ind ex 的值可以直接得知 Packet 属于哪个 Stream ,从而获得 Stream 对应的 Packet 的信息。从输出的内容可以看出,输出的内容格式为 XML 格式,如果原有的业务本身就可以解析 XML 格式,那么就不需要更改解析引擎,直接将输出内容输出为 XML 格式即可,解析引擎解 Packet 信息时会很方便。通过各种格式的输出,可以使用对应的绘图方式绘制出可视化图形。原创 2023-12-23 07:45:00 · 901 阅读 · 0 评论 -
ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第二章:FFmpeg 工具使用基础——第一节:ffmpeg常用命令
ffmpeg 在做音视频编解码时非常方便,所以在很多场景下转码使用的是 ffmpeg ,通过 `ffmpeg -help` 可以看到 ffmpeg 常见的命令大概分为6个部分,具体如下。- ffmpeg 信息查询部分- 公共操作参数部分- 文件主要操作参数部分- 视频操作参数部分- 音频操作参数部分- 字幕操作参数部分原创 2023-12-20 08:45:00 · 1519 阅读 · 0 评论 -
ffmpeg ffprobe FRAME字段解析(best_effort_timestamp_time、pix_fmt、sample_aspect_ratio、pict_type等)
在数据流处理中,如果一个系统标记"best_effort_timestamp",那可能意味着它尝试为每个接收到的数据包分配一个时间戳,但由于各种原因(比如网络延迟或系统繁忙),这个时间戳可能并不完全准确。除了关键帧(I帧)之外,还包括P帧和B帧。在视频压缩编码中,关键帧(也被称为I帧)是完整的图像帧,不依赖其他帧就可以独立解码。则提供了更多关于帧类型的信息,包括是否为P帧或B帧。在此例中,它是’yuv420p’,这意味着使用了4:2:0的色度子采样。在此例中,它是"video",表明这是一个视频帧。原创 2023-12-19 07:30:00 · 1399 阅读 · 0 评论 -
ffmpeg ffprobe FORMAT字段解析(nb_streams、nb_programs、format_name、format_long_name、bit_rate、probe_score等)
FFprobe是一款强大的媒体分析工具,它能提供多种形式的详细信息,包括但不限于流信息、元数据、帧信息等。在本文中,我们将侧重探讨其FORMAT字段的解析,以理解其每个属性对视频文件特性的含义。在多路复用的传输流中,程序是一种组织形式,将多个相关的音频、视频和数据流组合在一起。这是一个浮点数类型的字段,指示了文件的开始播放时间。这是一个整数类型的字段,指示了文件的平均比特率。这是一个字符串类型的字段,列出了所有可能的格式名称,以逗号分隔。字段表示文件的名称,这是一个字符串类型的字段,表明了被检查的文件名。原创 2023-12-18 22:28:15 · 1168 阅读 · 0 评论 -
ffmpeg ffprobe PACKET字段解读(codec_type、stream_index、pts_time、dts_time、convergence_duration_time)
在多媒体编码和传输中,packet(数据包)是指编码后的音频或者视频数据的最小单元。每个数据包都包含了一定数量的原始数据以及描述这些数据的元数据。这种分包方式方便对音视频数据进行传输、存储以及同步等操作。执行上述命令后,ffprobe会列出输入文件input.mp4的所有数据包信息(如果想从头开始看,可以用命令)。下面框选的是其中的一个数据包的元数据信息。原创 2023-12-18 08:30:00 · 1530 阅读 · 0 评论 -
ffmpeg时间基概念(tbr:Time Base Rate视频帧率,tbn:流的时间基,tbc:Time Base in Codec编解码器的时间基))、DTS和PTS、GOP、I帧P帧B帧概念解释
例如,如果一个视频帧的 dts 是 40,pts 是 160,其 time_base 是 1/1000 秒,那么可以计算出此视频帧的解码时刻是 40 毫秒(40/1000),显示时刻是 160 毫秒(160/1000)。当然,不含 B 帧的视频,其 DTS 和 PTS 是相同的。根据注释中的建议,实际使用时,在视频解码过程中,我们不使用 AVCodecContext.time_base,而用帧率倒数作时间基,在视频编码过程中,我们将 AVCodecContext.time_base 设置为帧率的倒数。转载 2023-12-14 09:00:00 · 679 阅读 · 0 评论 -
ffmpeg编解码——数据包(packet)概念(如何正确处理数据包中的显示时间戳pts与解码时间戳dts关系?)
在FFmpeg中,数据包(Packet)是存储压缩编码数据的基本单位。数据包可以包含一个或多个编码帧的数据(也存在多个数据包包含一个编码帧的不同片段的情况)。在音频编码中,通常一个数据包只包含一帧数据;但在视频编码中,由于B帧和P帧的存在,可能会出现一个数据包包含多帧数据的情况。int size;int flags;} AVPacket;AVPacketbuf:指向数据包内存的引用。pts和dts:分别代表显示时间戳和解码时间戳。data和size:指向数据包的数据和大小。原创 2023-12-10 09:15:00 · 1584 阅读 · 0 评论 -
ffmpeg编解码——时间基(time base)概念(tbn)
时间基,即Time Base,是用于衡量时间的单位,在多媒体编程中被广泛使用。对于FFmpeg,它主要用于描述帧率、持续时间和时间戳等概念。简单地说,时间基是一种将数值时间戳转化为真实时间(秒)的方式。原创 2023-12-09 21:38:26 · 2802 阅读 · 0 评论 -
ffmpeg之rmvb文件处理(rmvb格式、变码率文件格式)(RealMedia Variable Bitrate)
RMVB(RealMedia Variable Bitrate)是由RealNetworks公司开发的一种变码率文件格式。这种格式最大的优点是在保持较高质量的前提下,大幅度减少了视频文件的体积。原创 2023-12-09 08:15:00 · 2242 阅读 · 0 评论 -
ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第一章:FFmpeg简介(介绍基本组成(封装、编解码、滤镜、视频图像转换、音频图像转换模块等),各平台编译方法以及编译裁剪等)
FFmpeg 既是一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口。FFmpeg 提供了多种媒体格式的封装和解封装,包括多种音视频编码 、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率转换等;FFmpeg 框架提供了多种丰富的插件模块,包含封装与解封装的插件、编码与解码的插件等。原创 2023-12-06 14:14:09 · 1080 阅读 · 0 评论 -
FFmpeg中的pcm是什么?(Pulse Code Modulation:脉冲编码调制,一种将模拟信号转化为数字信号的方法,主要包括采样和量化)(在FFmpeg中,PCM是一种常见的音频编码格式))
PCM (Pulse Code Modulation),即脉冲编码调制,是一种将模拟信号转化为数字信号的方法。这个过程涉及到两个主要步骤:采样和量化。原创 2023-12-03 23:07:11 · 1014 阅读 · 0 评论 -
FFmpeg ffplay依赖的SDL是什么? (Simple DirectMedia Layer:用于提供对音频、键盘、鼠标、操纵杆和图形硬件的低级访问权限)
FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转换为流的开源计算机程序。其包含了 libavcodec 这是一个用于编解码的库,同时也提供了 ffplay,一个简单的媒体播放器。SDL (Simple DirectMedia Layer) 是一个跨平台的开发库,设计用于提供对音频、键盘、鼠标、操纵杆和图形硬件的低级访问权限。在本文中,我们将探讨 FFmpeg 的 ffplay 是如何依赖于 SDL 的。原创 2023-12-03 22:50:34 · 1073 阅读 · 0 评论 -
ffmpeg将图片转换为视频报错:width not divisible by 2(原因:H.264使用4x4和16x16的块进行编码,输入图像宽度或者高度需要能被2整除)图片转视频
你的图片的尺寸为497x373,显然宽度497不能被2整除。为了解决这个问题,你可以用画图工具调整图片的尺寸。这个错误是由于H.264编码器(libx264)的限制。对于H.264编码器,视频的宽度和高度必须能被2整除。这是因为在编码过程中,原创 2023-11-30 23:51:28 · 1469 阅读 · 0 评论 -
FFmpeg linux解包解码rtsp流编码h.264/h.265 mp4视频报错问题排查(没解决)
无论是在ubuntu虚拟机上,还是英伟达jetson盒子上,用官方编译好的ffmpeg解包解码转码封装海康rtsp视频流,就会出现这样问题(3090显卡x64机器上测试问题倒少一点,只有开头绿屏问题)总共有好几个报错,但不知道哪个是关键错误。原创 2022-11-29 14:27:24 · 2773 阅读 · 2 评论 -
ffmpeg,英伟达jetson盒子看不到显卡驱动版本问题源码分析(The minimum required Nvidia driver for nvenc is xxx or newer)
如图,如果显卡驱动版本满足不了ffmpeg需求时,就会报这个错误。,查了下源码,在这两个位置。原创 2022-11-28 22:56:23 · 1457 阅读 · 3 评论 -
Linux FFmpeg h.264 h.265 GPU加速 CUDA加速编码封装方案分析(转载)
过程4”一定是最慢的一个环节:H.264需要将图像分割成很多个宏块, 然后利用视频帧图像的帧内和帧间的相关性, 采用帧内预测或帧间预测的编码模式, 对各个宏块进行压缩。整个过程复杂,但宏块儿的处理是可以高度并行化的操作,应该可以放到GPU进行。继前面的“GPGPU”和“CUDA和OpenCL”的简介后,接下来分析一个具体的使用案例:是否可以用GPU搭建一个高性能的H.264编解码服务器?所以如果想用GPU加速以上的过程,那么把“过程4”和“过程2”的密集计算从CPU上转到GPU上,应该是可能的发力点。转载 2022-11-24 15:14:55 · 1487 阅读 · 0 评论 -
FFmpeg h.265 MP4编码告警:deprecated pixel format used, make sure you did set range correctly
但是x264和x265编码器目前都支持这种像素类型,我们平时只用到x264和x265编码器,所以无所谓,但是像mpeg4这种编码器就不行了,它不支持yuv j420p这种像素格式。直接忽略这个警告就可以了,我们取的海康摄像头的rtsp流的像素格式是yuv j420p,估计这种像素格式现在不太那啥,所以不赞成使用。“使用了不赞成使用的像素格式,请确保您已使用ffmpeg正确设置了范围"原创 2022-11-23 20:43:30 · 3603 阅读 · 0 评论 -
FFmpeg h.264 mp4编码告警:non-strictly-monotonic PTS
切换到h.265编码倒没这个警告。原创 2022-11-23 20:36:44 · 1298 阅读 · 0 评论 -
FFmpeg打开x265编码器报错:Lookahead depth must be greater than the max consecutive bframe count
发现它的编码码率设置为40万,即40k,我改成400万,或者不设置(它自动选定默认值)就好了。原创 2022-11-23 20:18:53 · 467 阅读 · 0 评论 -
FFmpeg av_opt_set()函数使用方法
这个对不同编码还有不同含义的。原创 2022-11-23 20:14:26 · 879 阅读 · 0 评论 -
FFmpeg AVRational结构体
此时的时间刻度应该从源AVStream的time,转换成目的AVStream timebase下的时间。场景1:编码器产生的帧,直接存入某个容器的AVStream中,那么此时packet的Time要从 AVCodecContext的time转换成目标AVStream的time。这样的一个成员,它是AVRational结构的。那么,在刻度为1/25的体系下的time=5,转换成在刻度为1/90000体系下的时间time为。其实,问题的关键还是要理解,不同的场景下取到的数据帧的time是相对哪个时间体系的。转载 2022-11-23 17:35:43 · 267 阅读 · 0 评论 -
ffmpeg C++ 查看视频文件信息程序
可以看出我这个视频有点问题。原创 2022-11-23 09:10:45 · 479 阅读 · 0 评论 -
FFmpeg报错:Specified pixel format yuvj420p is invalid or not supported(用ffmpeg程序查看编码器支持像素格式命令)
②换个编码器,比如x264或x265,它们都支持解析yuvj420p,同时能将输出packet的像素格式转换成其他的类型,比如yuv420p。①将yuvj420p的frame转换成yuv420p的frame,再输入给mpeg4编码器(我不知道ffmpeg有没这个功能。这是因为我们把海康rtsp视频流packet解封装后,它frame的像素格式是。的,然后我们又指定编码器上下文的像素格式。指令查看编码器支持哪些像素格式。像素格式,所以报了上述错误。mpeg4编码器支持。原创 2022-11-22 23:16:17 · 3840 阅读 · 0 评论