FFmpeg常见命令行(一):FFmpeg工具使用基础
前言
在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》。本文是Android音视频任务列表的其中一个, 对应的要学习的内容是:FFmpeg常见命令行(一):FFmpeg工具使用基础
音视频任务列表
音视频任务列表: 点击此处跳转查看.
目录
1.1 FFmpeg简介
1.1.1 FFmpeg的定义
FFmpeg是一个开源的跨平台多媒体处理工具集,它可以用于处理音频、视频和其他多媒体数据。FFmpeg提供了一组功能强大的命令行工具,用于音频和视频的编解码、转换、处理、流媒体传输等任务。
FFmpeg支持多种音频和视频格式,包括常见的MP3、AAC、FLAC、H.264、H.265等。它可以进行音频和视频的编码(将数据压缩为特定格式)、解码(将数据解压为原始格式)、转码(在不同格式之间进行转换)、剪辑、合并、提取音频或视频流、添加字幕、调整音量、应用滤镜效果等操作。
FFmpeg是一个非常灵活和强大的工具集,广泛应用于多媒体处理领域。它被许多软件、平台和服务所使用,包括视频编辑软件、流媒体服务器、音频播放器、视频转码服务等。由于其开源的特性,FFmpeg也得到了广泛的社区支持和贡献,使其不断发展和改进。
1.1.2 FFmpeg的基本组成
FFmpeg由多个核心组件组成,它们共同构成了这个多媒体处理工具集的基础。以下是FFmpeg的基本组成:
- libavcodec:这是FFmpeg的核心编解码库,提供了音频和视频编解码器的实现。它支持各种格式的音频和视频编码,包括常见的MP3、AAC、FLAC、H.264、H.265等。libavcodec负责将音频和视频数据从一种格式转换为另一种格式。
- libavformat:这个组件处理音频和视频的容器格式(例如MP4、AVI、MKV等)。它能够解析和封装多种容器格式,使得FFmpeg可以读取和写入不同的音频和视频文件。
- libavfilter:这是FFmpeg的滤镜库,用于实现各种音频和视频的滤镜效果,如调整亮度、对比度、色彩平衡,添加水印,去噪等。libavfilter允许用户在处理音频和视频时应用各种视觉和音频效果。
- libavutil:这是一个辅助库,提供了一些常用的工具函数,用于处理音频、视频和其他多媒体数据。它包含了数据结构、数学运算、时间管理、内存管理等功能,为其他组件提供了基础支持。
- libswscale:这个组件用于图像的缩放和颜色空间转换。它能够将不同分辨率和不同颜色空间的图像进行转换,以适应不同的显示设备或编码要求。
除了上述核心组件外,FFmpeg还包含许多其他的辅助工具和库,用于处理音频、视频和其他多媒体任务。例如,命令行工具FFmpeg
和ffprobe
是常用的工具,用于执行音视频转码、分析多媒体文件等操作。
总之,FFmpeg的基本组成是由编解码库、容器处理库、滤镜库、工具库等多个组件构成,它们协同工作,提供了丰富的功能和灵活性,使得FFmpeg成为一个强大的多媒体处理工具集。
1.1.3 FFmpeg的编解码工具FFmpeg
FFmpeg的编解码工具命令行是FFmpeg中最常用和最重要的工具之一,用于执行音频和视频的编解码、转换、处理等任务。
使用FFmpeg
工具,你可以通过指定输入文件和输出文件的参数,对音频和视频进行各种操作。以下是一些常见的用法示例:
- 音视频转码:将一个音频或视频文件转换为不同的编码格式。
ffmpeg -i input.mp4 output.avi
上述命令将输入文件input.mp4
转码为输出文件output.avi
。
- 剪辑和裁剪:截取音频或视频的一部分,或者裁剪音频或视频的尺寸。
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 -c copy output.mp4
上述命令从input.mp4
文件中提取从第10秒开始持续30秒的内容,并将其保存为output.mp4
文件。
- 添加水印:在视频上添加文字或图像水印。
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=W-w-10:H-h-10" output.mp4
上述命令将名为watermark.png
的水印添加到input.mp4
视频的右下角,并生成output.mp4
文件。
- 调整音频和视频参数:调整音频和视频的比特率、帧率、分辨率等参数。
ffmpeg -i input.mp4 -b:v 1M -r 30 -s 1280x720 output.mp4
上述命令将输入文件input.mp4
的视频比特率设置为1 Mbps,帧率设置为30帧/秒,分辨率设置为1280x720,并输出为output.mp4
文件。
这只是一些FFmpeg
工具的常见用法示例,它具有非常丰富的功能和选项,可以执行各种复杂的音频和视频处理任务。你可以通过查阅FFmpeg的文档或在命令行中输入FFmpeg --help
来获取更多详细的用法和选项信息。
1.1.4 FFmpeg的播放器ffplay
FFmpeg提供了一个命令行播放器工具,名为ffplay
,它用于播放音频和视频文件。ffplay
具有简单的界面,可以实时播放音频和视频,并支持基本的播放控制。
下面是一些使用ffplay
的示例:
- 播放音频文件:
ffplay input.mp3
上述命令将播放名为input.mp3
的音频文件。
- 播放视频文件:
ffplay input.mp4
上述命令将播放名为input.mp4
的视频文件。
- 调整播放速度:
ffplay -vf "setpts=0.5*PTS" input.mp4
上述命令将以0.5倍速度播放input.mp4
视频文件。
- 跳转到指定时间:
ffplay -ss 00:01:30 input.mp4
上述命令将从input.mp4
视频文件的1分30秒处开始播放。
- 全屏模式:
ffplay -fs input.mp4
上述命令将以全屏模式播放input.mp4
视频文件。
ffplay
还支持一些其他的选项和快捷键,例如调整音量、截图、设置字幕等。你可以通过在命令行中输入ffplay --help
来查看详细的选项和用法信息。
需要注意的是,尽管ffplay
是一个方便的命令行播放器工具,但它的功能相对简单,不如专业的媒体播放器那样完善和高级。如果你需要更复杂的播放需求,可以考虑使用其他媒体播放器软件,如VLC媒体播放器。
1.1.5 FFmpeg的多媒体分析器ffprobe
FFmpeg提供了一个多媒体分析器工具,名为ffprobe
。ffprobe
用于分析音频和视频文件的详细信息,包括编解码格式、比特率、分辨率、帧率、音频通道、元数据等。
以下是一些使用ffprobe
的示例:
- 查看文件信息:
ffprobe input.mp4
上述命令将显示input.mp4
视频文件的详细信息,包括视频流、音频流、格式信息等。
- 输出JSON格式:
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
上述命令将以JSON格式输出input.mp4
视频文件的信息,包括格式信息和流信息。
- 查看特定流的信息:
ffprobe -show_streams -select_streams a input.mp4
上述命令将显示input.mp4
视频文件中的音频流信息。
- 提取元数据:
ffprobe -show_format -loglevel error -of default=noprint_wrappers=1:nokey=1 -sexagesimal input.mp4
上述命令将提取input.mp4
视频文件的元数据信息,如时长、创建时间等。
ffprobe
支持许多其他的选项和用法,可以通过在命令行中输入ffprobe --help
来查看详细的信息。
通过使用ffprobe
,你可以快速了解音频和视频文件的各种属性和参数,以便进行后续的处理和分析。它在媒体文件的调试、调优、元数据提取等方面非常有用。
1.2 FFmpeg常用命令
1.2.1 FFmpeg的封装转换
下面是一些FFmpeg常用的命令,用于封装转换:
- 视频格式转换:
FFmpeg -i input.mp4 output.avi
这个命令将输入的input.mp4文件转换成output.avi文件,可以根据需要修改输入输出的文件名和路径。
- 视频封装:
FFmpeg -i input.mp4 -c copy output.mkv
这个命令将输入的input.mp4文件进行封装,转换成Matroska封装格式(.mkv)。使用-c copy
选项可以直接复制视频和音频流,加快转换速度而不进行重新编码。
- 音频格式转换:
FFmpeg -i input.mp3 output.ogg
这个命令将输入的input.mp3音频文件转换成output.ogg文件,可以根据需要修改输入输出的文件名和路径。
- 视频转换并调整分辨率和比特率:
FFmpeg -i input.mp4 -s 1280x720 -b:v 2M output.mp4
这个命令将输入的input.mp4视频文件转换成output.mp4文件,并将视频分辨率调整为1280x720,视频比特率为2 Mbps。你可以根据需要修改分辨率和比特率的值。
- 视频转换并裁剪:
FFmpeg -i input.mp4 -ss 00:00:10 -to 00:00:30 -c:v copy -c:a copy output.mp4
这个命令将输入的input.mp4视频文件从第10秒裁剪到第30秒,并将裁剪后的视频保存为output.mp4文件。使用-c:v copy
和-c:a copy
选项可以直接复制视频和音频流,加快裁剪速度而不进行重新编码。
- 视频转换并添加水印:
FFmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
这个命令将输入的input.mp4视频文件添加名为watermark.png的水印,并将水印位置设置为距离视频左上角10个像素的位置,然后保存为output.mp4文件。你可以调整overlay
滤镜中的位置参数来更改水印位置。
以上是一些常用的FFmpeg命令,用于封装转换音视频文件。
1.2.2 FFmpeg的转码参数
FFmpeg提供了许多参数和选项,可以进行音视频的转码操作。下面是一些常用的转码参数示例:
-
指定输出编码格式:
-c:a <编码器>:设置音频编码器 -c:v <编码器>:设置视频编码器
例如,使用AAC音频编码器和H.264视频编码器进行转码:
FFmpeg -i input.mp4 -c:a aac -c:v libx264 output.mp4
-
指定输出码率(比特率):
-b:a <音频比特率>:设置音频比特率 -b:v <视频比特率>:设置视频比特率
例如,设置音频比特率为128kbps,视频比特率为1000kbps:
FFmpeg -i input.mp4 -b:a 128k -b:v 1000k output.mp4
-
指定输出分辨率:
-s <宽度x高度>:设置输出分辨率
例如,将视频转码为720p分辨率:
FFmpeg -i input.mp4 -s 1280x720 output.mp4
-
指定输出帧率:
-r <帧率>:设置输出帧率
例如,将视频转码为30帧/秒:
FFmpeg -i input.mp4 -r 30 output.mp4
这些是常见的转码参数示例,FFmpeg还提供了许多其他参数和选项,可以根据具体需求进行调整和配置。
1.2.3 FFmpeg的基本转码原理
FFmpeg的基本转码原理涉及音视频编解码、封装格式和过滤器的处理。下面简要介绍FFmpeg的基本转码原理:
- 音视频编解码:
音视频编解码是将原始的音视频数据(例如MP4、AVI文件)转换成不同的编解码格式(例如H.264视频、AAC音频)。编码是将原始数据压缩成较小的尺寸以节省空间,而解码是将压缩的数据还原为原始数据以进行播放或处理。 - 解封装和封装:
解封装是将音视频文件中的音视频流提取出来,使其成为独立的音频和视频数据流。封装是将音频和视频数据流组合成一个容器格式文件(如MP4、AVI、MKV),使其能够在播放器或编辑软件中正常播放。 - 过滤器:
过滤器是一种对音视频数据进行处理的工具。在转码过程中,过滤器可以用来进行音频增益、视频裁剪、添加水印等操作。FFmpeg内置了丰富的过滤器,也支持自定义过滤器。 - 转码流程:
FFmpeg的转码流程通常包括以下步骤:- 打开输入文件:FFmpeg打开输入文件,并解析其中的音视频流信息。
- 找到正确的解码器:根据输入文件中的音视频编码格式,FFmpeg会自动选择正确的解码器来解码音视频流。
- 解码音视频数据:FFmpeg将音视频数据解码成原始的未压缩数据。
- 应用过滤器(可选):如果有需要,可以应用过滤器来对音视频数据进行处理。
- 选择正确的编码器:根据输出文件的需求,FFmpeg会自动选择正确的编码器来编码音视频数据。
- 编码音视频数据:FFmpeg将处理后的音视频数据编码成目标编码格式。
- 封装数据:将编码后的音视频数据封装成输出文件。
值得注意的是,转码过程可能涉及多个解码器和编码器的调用,以及对音视频数据的处理和转换,因此转码可能是一项复杂的任务。正确选择合适的编解码参数和过滤器对于得到高质量的转码结果至关重要。
1.3 ffprobe常用命令
ffprobe是FFmpeg的伴侣工具,用于分析和提取音视频文件的元数据信息。它可以提供有关音视频文件的详细信息,如编解码器、分辨率、帧率、比特率、时长等。以下是一些常用的ffprobe命令示例:
-
获取音视频文件的基本信息:
ffprobe -i input.mp4
这个命令将输出音视频文件input.mp4的基本信息,包括容器格式、流的详细信息、编码器信息等。
-
获取音视频流的详细信息:
ffprobe -i input.mp4 -show_streams
使用该命令,ffprobe将显示音视频文件input.mp4中所有流的详细信息,包括流的索引、编码格式、比特率、分辨率、帧率等。
-
获取特定流的信息:
ffprobe -i input.mp4 -show_streams -select_streams a:0
上述命令将显示音视频文件input.mp4的第一个音频流的详细信息。你可以使用"-select_streams"参数选择特定的流,例如"a:0"表示音频流的索引为0。
-
输出JSON格式的信息:
ffprobe -i input.mp4 -show_format -print_format json
使用该命令,ffprobe将以JSON格式输出音视频文件input.mp4的格式信息,包括容器格式、时长、比特率等。
-
自定义输出信息:
ffprobe -i input.mp4 -show_format -show_entries format=duration,size
上述命令将显示音视频文件input.mp4的时长和文件大小。你可以使用"-show_entries"参数来指定要显示的信息,通过使用逗号分隔不同的项。
这些是一些常用的ffprobe命令示例,用于获取音视频文件的元数据信息。ffprobe提供了许多其他选项和参数,可以进一步定制输出信息的格式和内容。
1.4 ffplay常用命令
1.4.1 ffplay常用参数
ffplay是FFmpeg的一个简单播放器工具,可以用于实时播放音视频文件。它提供了一些常用的参数,用于控制播放过程和显示效果。以下是一些常用的ffplay参数示例:
-
播放音视频文件:
ffplay input.mp4
这个命令将使用ffplay播放音视频文件input.mp4。
-
跳过文件头部:
ffplay -skip_initial_bytes 512 input.mp4
使用该参数,ffplay将跳过输入文件的前512字节。这在某些情况下可能有助于解决一些播放问题。
-
指定起始时间:
ffplay -ss 30 input.mp4
上述命令将从音视频文件input.mp4的30秒处开始播放。可以使用"-ss"参数指定起始时间,以秒为单位。
-
指定播放窗口大小:
ffplay -x 800 -y 600 input.mp4
使用该命令,ffplay将在一个800x600的窗口中播放音视频文件input.mp4。可以使用"-x"和"-y"参数分别指定宽度和高度。
-
音量控制:
ffplay -volume 50 input.mp4
上述命令将以50%的音量播放音视频文件input.mp4。可以使用"-volume"参数指定音量大小,范围从0到100。
-
调整播放速度:
ffplay -vf "setpts=0.5*PTS" input.mp4
使用该命令,ffplay将以原来速度的两倍快速播放音视频文件input.mp4。可以使用"-vf"参数结合滤镜来调整播放速度。
这些是一些常用的ffplay参数示例,用于控制播放过程和显示效果。ffplay还提供了其他参数和选项,可以进一步定制播放器的行为。
1.4.2 ffplay高级参数
除了常用参数外,ffplay还提供了一些高级参数和选项,用于更细致地控制播放过程和显示效果。以下是一些ffplay的高级参数示例:
-
视频滤镜:
ffplay -vf "scale=640:480,rotate=90" input.mp4
使用该命令,ffplay将在播放音视频文件input.mp4时应用视频滤镜。上述示例中的滤镜将视频缩放为640x480,并将其旋转90度。你可以使用各种视频滤镜来调整视频的尺寸、旋转、亮度、对比度等。
-
音频滤镜:
ffplay -af "volume=2" input.mp4
上述命令将在播放音视频文件input.mp4时应用音频滤镜。示例中的音频滤镜将音量增加两倍。你可以使用各种音频滤镜来调整音频的音量、均衡器、混响等。
-
帧精准定位:
ffplay -ss 00:01:30.500 input.mp4
使用该命令,ffplay将在音视频文件input.mp4中精确定位到1分30.5秒的位置开始播放。可以使用"-ss"参数指定起始时间,支持以时:分:秒.毫秒的格式。
-
自动循环播放:
ffplay -loop 0 input.mp4
上述命令将在播放音视频文件input.mp4时自动循环播放,即播放完毕后会自动重新开始。可以使用"-loop"参数指定循环播放的次数,0表示无限循环。
-
设置窗口标题:
ffplay -window_title "My Player" input.mp4
使用该命令,ffplay将在播放窗口的标题栏上显示自定义的标题。可以使用"-window_title"参数来设置窗口标题。
这些是一些ffplay的高级参数示例,用于更细致地控制播放过程和显示效果。ffplay还有许多其他选项和参数,可以根据具体需求进行调整和配置。
1.4.3 ffplay的数据可视化分析应用
ffplay提供了一些数据可视化分析应用,可以帮助你分析和检查音视频文件的特性和质量。以下是一些ffplay的数据可视化分析应用的示例:
-
波形显示:
ffplay -f lavfi "amovie=input.mp4, asplit [a][out1]; [a] showwaves=colors=red:scale=sqrt [out0]"
上述命令将在ffplay中显示音频文件input.mp4的波形图。通过使用showwaves滤镜,你可以可视化音频波形,指定颜色、尺度等参数。
-
频谱显示:
ffplay -f lavfi "amovie=input.mp4, asplit [a][out1]; [a] showspectrum=mode=combined:color=intensity:scale=log [out0]"
使用该命令,ffplay将在播放器中显示音频文件input.mp4的频谱图。通过使用showspectrum滤镜,你可以可视化音频频谱,指定颜色、模式、尺度等参数。
-
视频直方图:
ffplay -vf "split=2[a][b],[a]histogram,format=yuva444p[hh],[b][hh]overlay" input.mp4
上述命令将在播放器中显示视频文件input.mp4的直方图。通过使用histogram滤镜,你可以可视化视频帧的亮度分布,然后将其与原视频进行叠加显示。
这些是一些ffplay的数据可视化分析应用示例,用于分析音视频文件的特性和质量。
相关文章:

FFmpeg常见命令行(一):FFmpeg工具使用基础
前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》。本文是Android音视频任务列表的其中一个, 对应的要学习的内容是:FFmpe…...

Mock.js的基本使用方法
官网网址:Mock.js (mockjs.com) 当前端工程师需要独立于后端并行开发时,后端接口还没有完成,那么前端怎么获取数据? 这时可以考虑前端搭建web server自己模拟假数据,这里我们选第三方库mockjs用来生成随机数据…...

TiDB 源码编译之 PD/TiDB Dashboard 篇
作者: ShawnYan 原文来源: https://tidb.net/blog/a16b1d46 TiDB TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融…...

Vue3描述列表(Descriptions)
😁 整体功能效果与 ant design vue 保持高度一致 😁 包含两种组件:Descriptions 和 DescriptionsItem(必须搭配使用!) 效果如下图:在线预览 APIs Descriptions 参数说明类型默认值必传title…...

【驱动开发day8作业】
作业1: 应用层代码 #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #include <sys/ioctl.h>int main(int…...

yxBUG记录
1、 原因:前端参数method方法名写错。 2、Field ‘REC_ID‘ doesn‘t have a default value 问题是id的生成问题。 项目的表不是自增。项目有封装好的方法。调用方法即可。 params.put("rec_id",getSequence("表名")) 3、sql语句有问题 检…...

uniapp引入inconfont自定义导航栏
app,h5端引入 uniapp本身的全局设置中有个iconfontsrc属性 所以只需要 1.iconfont将需要的icon添加至项目 2.下载到本地解压后,将其中的ttf文件,放在static静态目录下 3.在page.json中对全局文件进行配置tabBar(导航图标) “iconfontSrc”: “static/font/iconfont.ttf”, …...

OSLog与NSLog对比
NSLog: NSLog的文档,第一句话就说:Logs an error message to the Apple System Log facility.,所以首先,NSLog就不是设计作为普通的debug log的,而是error log;其次,NSLog也并非是printf的简单…...

全网最细,Fiddler修改接口返回数据详细步骤实战,辅助接口测试...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 在测试的过程中&a…...

Mysql自动同步的详细设置步骤
以下步骤是真实的测试过程,将其记录下来,与大家共同学习。 一、环境说明: 1、主数据库: (1)操作系统:安装在虚拟机中的CentOS Linux release 7.4.1708 (Core) [rootlocalhost ~]# cat /etc/redh…...

opencv-38 形态学操作-闭运算(先膨胀,后腐蚀)cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
闭运算是先膨胀、后腐蚀的运算,它有助于关闭前景物体内部的小孔,或去除物体上的小黑点,还可以将不同的前景图像进行连接。 例如,在图 8-17 中,通过先膨胀后腐蚀的闭运算去除了原始图像内部的小孔(内部闭合的…...

jenkins gitlab多分支构建发布
内容背景介绍 这个是新手教程,普及概念为主 公司现在还使用单分支发布测试环境和生产,多人协同开发同一个项目导致测试环境占用等待等情况 测试环境占用等待问题 测试环境代码直接合并到 master,容易导致误发布到生产的情况 避免多版本同时发布测试不完善的情况出现 中间件…...

刷题笔记 day8
1004 最大连续1的个数 III 这道题要求将原数组中的0翻转成1,求出最大元素全是1的子数组长度,看这道题第一感觉还要将里面的0变成1,感觉这道题解决起来很麻烦,但是我们可以转变思路,找出其最大子数组,使得子…...
C 语言的表达式
表达式 expression 表达式由运算符和运算对象组成。 最简单的表达式是一个单独的运算对象,以此为基础可以建立复杂的表达式。 一些表达式由子表达式(subexpression)组成。子表达式即较小的表达式。 这些都是一些表达式: -4 a…...
C++设计模式创建型之单例模式
一、概述 单例模式也称单态模式,是一种创建型模式,用于创建只能产生一个对象实例的类。例如,项目中只存在一个声音管理系统、一个配置系统、一个文件管理系统、一个日志系统等,甚至如果吧整个Windows操作系统看成一个项目…...

杂记 | 记录一次使用Docker安装gitlab-ce的过程(含配置交换内存)
文章目录 01 准备工作02 (可选)配置交换内存03 编辑docker-compose.yml04 启动并修改配置05 nginx反向代理06 (可选)修改配置文件07 访问并登录 01 准备工作 最近想自建一个gitlab服务来保存自己的项目,于是找到gitla…...
MyBatis@Param注解的用法
一、前言 本人在学习mybatis的过程中遇到的一个让人不爽的bug,在查找了些相关的资料后得以解决,遂记录。 二、报错及解决 mapper中有一方法: Select("select * from emp " "where name like concat(%, #{name}, %) "…...
Shader 编程:GLSL 重要的内置函数
该原创文章首发于微信公众号:字节流动 未经作者(微信ID:Byte-Flow)允许,禁止转载 前面发了一些关于 Shader 编程的文章,有读者反馈太碎片化了,希望这里能整理出来一个系列,方便系统的…...

浏览器同源策略
浏览器同源策略 同源策略:是一个重要的浏览器的安全策略,用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互 它能帮助阻隔恶意文档,减少可能被攻击的媒介 例如:被钓鱼网站收集信息,使用ajax发起…...

GD32F103的EXTI中断和EXTI事件
GD32F103的EXTI可以产生中断,也产生事件信号。 GD32F03的EXTI触发源: 1、I/O管脚的16根线; 2、内部模块的4根线(包括LVD、RTC闹钟、USB唤醒、以太网唤醒)。 通过配置GPIO模块的AFIO_EXTISSx寄存器,所有的GPIO管脚都可以被选作EXTI的触发源…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...

Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...