音视频剪辑|Windows|抽帧和合帧

什么是抽帧?

FFmpeg 抽帧(Extracting frames)的作用是从视频文件中按需提取单张或多张静止图像(帧),并将它们保存为图片文件(如 JPEG、PNG 等格式)。这一功能在以下场合十分有用:

  1. 制作GIF或截图

    • 从视频中提取某一帧或几帧,可以生成有趣的动态GIF,或者静态截图用于文章、报告、演示文稿等。
  2. 视频剪辑预览

    • 在视频剪辑的过程中,可以通过抽帧快速浏览视频中的关键帧,帮助剪辑师决定哪些镜头适合使用,或者标记重要的剪辑点。
  3. 机器学习与计算机视觉

    • 在机器学习和计算机视觉领域,经常需要从视频中提取帧,用于训练深度学习模型。例如,进行物体检测、人脸识别、动作识别等任务时,大量的图像样本至关重要。
  4. 帧分析与修复

    • 从视频中抽出帧,可以针对每一帧进行单独的分析和修复,比如去噪、色彩校正、锐化等操作。
  5. 视频制作特效

    • 在动画制作、影视后期制作中,通过抽取视频中的关键帧,可以进行逐帧的手动编辑和绘制,制作出独特的视觉效果。
  6. 质量检查

    • 对视频质量进行检查时,抽帧可以帮助技术人员精确地观察每一帧的画面质量,如清晰度、颜色准确度、是否存在瑕疵等。
  7. 帧序列输出

    • 将视频转换为一系列连续的图片,可用于打印、拼接等多种用途,或者用于渲染成动画或视频游戏等场景。

FFmpeg 抽帧的命令一般格式如下:

 

Sh

ffmpeg -i C:\Users\Administrator\Desktop\111.mp4 -framerate 5 -v 5 -vfrwamers 20 -f image2 d:\222\image_%3d.jpeg

其中,frame_number 表示要抽取的帧编号,output_frame_%04d.png 表示输出图片的命名格式(每一张图片编号递增)。通过调整 select 过滤器的表达式,可以实现灵活的抽帧需求。

一,

抽帧实例

先查看原视频1的帧率信息这些:

C:\Users\Administrator>ffprobe -i C:\Users\Administrator\Desktop\111.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\Users\Administrator\Desktop\111.mp4':Metadata:major_brand     : isomminor_version   : 512compatible_brands: isomiso2avc1mp41encoder         : Lavf58.20.100Duration: 00:00:14.60, start: 0.000000, bitrate: 1983 kb/sStream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, smpte170m/bt470bg/smpte170m, progressive), 720x1280, 1927 kb/s, 30 fps, 30 tbr, 90k tbn (default)Metadata:handler_name    : VideoHandlervendor_id       : [0][0][0][0]Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 47 kb/s (default)Metadata:handler_name    : SoundHandlervendor_id       : [0][0][0][0]

可以看到该视频在桌面,名称为111.mp4,一个视频流,时长是14.6秒,帧率是30fps,格式为h264,视频大小是720*1280;音频流为44100Hz,aac编码格式的

那么,很简单,可以计算出此视频大概会抽帧出来的图片为30*14.6=438张的图片

原视频2的音视频信息:

C:\Users\Administrator>ffprobe -i D:\tejing.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'D:\tejing.mp4':Metadata:major_brand     : isomminor_version   : 512compatible_brands: isomiso2avc1mp41encoder         : Lavf60.16.100Duration: 00:00:10.00, start: 0.000000, bitrate: 1250 kb/sStream #0:0[0x1](chi): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 1112 kb/s, 25 fps, 25 tbr, 12800 tbn (default)Metadata:handler_name    : VideoHandlervendor_id       : [0][0][0][0]encoder         : Lavc60.31.102 libx264Stream #0:1[0x2](chi): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 130 kb/s (default)Metadata:handler_name    : SoundHandlervendor_id       : [0][0][0][0]

这个原视频2是我从电影里抽取的,视频长度是10秒,帧率是25fps,格式为h264,视频大小是1280*720;音频流为44100Hz,aac编码格式的

那么,很简单,可以计算出此视频大概会抽帧出来的图片为25*10=250张的图片

下面开始抽帧,全部帧都抽取出来:

ffmpeg   -i D:\tejing.mp4  -framerate 10   d:\222\image_%3d.jpeg

那么,这个framerate 在这里其实好像没有什么意义,但可以看到确实全部抽帧,确实是250张图片,每个图片的清晰度也是比较好的,图片分辨率和视频是一致的都是1280*720

其实,是省略了一个参数-f image2 ,因为ffmpeg比较智能,可以根据后缀自动使用相应的编解码器

抽帧的同时图片分辨率修改为720*520

C:\Users\Administrator>ffmpeg   -i D:\tejing.mp4  -framerate 10  -s 720*520  d:\222\image_%3d.jpeg -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'D:\tejing.mp4':Metadata:major_brand     : isomminor_version   : 512compatible_brands: isomiso2avc1mp41encoder         : Lavf60.16.100Duration: 00:00:10.00, start: 0.000000, bitrate: 1250 kb/sStream #0:0[0x1](chi): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 1112 kb/s, 25 fps, 25 tbr, 12800 tbn (default)Metadata:handler_name    : VideoHandlervendor_id       : [0][0][0][0]encoder         : Lavc60.31.102 libx264Stream #0:1[0x2](chi): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 130 kb/s (default)Metadata:handler_name    : SoundHandlervendor_id       : [0][0][0][0]
Stream mapping:Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[swscaler @ 0000016583b3ce80] deprecated pixel format used, make sure you did set range correctly
Output #0, image2, to 'd:\222\image_%3d.jpeg':Metadata:major_brand     : isomminor_version   : 512compatible_brands: isomiso2avc1mp41encoder         : Lavf60.16.100Stream #0:0(chi): Video: mjpeg, yuvj420p(pc, progressive), 720x520 [SAR 104:81 DAR 16:9], q=2-31, 200 kb/s, 25 fps, 25 tbn (default)Metadata:handler_name    : VideoHandlervendor_id       : [0][0][0][0]encoder         : Lavc60.31.102 mjpegSide data:cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
[out#0/image2 @ 00000165ffb1abc0] video:2715kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
frame=  250 fps=0.0 q=24.8 Lsize=N/A time=00:00:09.96 bitrate=N/A speed=40.9x

只抽取2秒的视频帧,2秒就是50张图片,可以看到确实只抽了50张图片,也就是50帧,关键参数-vframes 50,其它参数其实是可以省略的 :

C:\Users\Administrator>ffmpeg   -i D:\tejing.mp4  -framerate 10 -vframes 50 -vf "select=not(mod(n\,15))"  d:\222\image_%3d.jpeg -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'D:\tejing.mp4':Metadata:major_brand     : isomminor_version   : 512compatible_brands: isomiso2avc1mp41encoder         : Lavf60.16.100Duration: 00:00:10.00, start: 0.000000, bitrate: 1250 kb/sStream #0:0[0x1](chi): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 1112 kb/s, 25 fps, 25 tbr, 12800 tbn (default)Metadata:handler_name    : VideoHandlervendor_id       : [0][0][0][0]encoder         : Lavc60.31.102 libx264Stream #0:1[0x2](chi): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 130 kb/s (default)Metadata:handler_name    : SoundHandlervendor_id       : [0][0][0][0]
Stream mapping:Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[swscaler @ 0000014c2483bf00] deprecated pixel format used, make sure you did set range correctly
Output #0, image2, to 'd:\222\image_%3d.jpeg':Metadata:major_brand     : isomminor_version   : 512compatible_brands: isomiso2avc1mp41encoder         : Lavf60.16.100Stream #0:0(chi): Video: mjpeg, yuvj420p(pc, progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 fps, 25 tbn (default)Metadata:handler_name    : VideoHandlervendor_id       : [0][0][0][0]encoder         : Lavc60.31.102 mjpegSide data:cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
[out#0/image2 @ 0000014c20a68300] video:1233kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
frame=   50 fps=0.0 q=24.8 Lsize=N/A time=00:00:01.96 bitrate=N/A dup=56 drop=0 speed=21.9x

每25帧抽一帧,均匀抽帧

因为帧率fps是25,因此抽取10个图片,均匀抽取,关键参数-vsync vfr,这里framerate 10 是无关紧要的参数

C:\Users\Administrator>ffmpeg   -i D:\tejing.mp4  -framerate 10 -vf "select=not(mod(n\,25))" -vsync vfr   d:\222\image_%3d.jpeg -hide_banner
-vsync is deprecated. Use -fps_mode
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'D:\tejing.mp4':Metadata:major_brand     : isomminor_version   : 512compatible_brands: isomiso2avc1mp41encoder         : Lavf60.16.100Duration: 00:00:10.00, start: 0.000000, bitrate: 1250 kb/sStream #0:0[0x1](chi): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 1112 kb/s, 25 fps, 25 tbr, 12800 tbn (default)Metadata:handler_name    : VideoHandlervendor_id       : [0][0][0][0]encoder         : Lavc60.31.102 libx264Stream #0:1[0x2](chi): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 130 kb/s (default)Metadata:handler_name    : SoundHandlervendor_id       : [0][0][0][0]
Stream mapping:Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[swscaler @ 000001c54248b500] deprecated pixel format used, make sure you did set range correctly
Output #0, image2, to 'd:\222\image_%3d.jpeg':Metadata:major_brand     : isomminor_version   : 512compatible_brands: isomiso2avc1mp41encoder         : Lavf60.16.100Stream #0:0(chi): Video: mjpeg, yuvj420p(pc, progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 fps, 25 tbn (default)Metadata:handler_name    : VideoHandlervendor_id       : [0][0][0][0]encoder         : Lavc60.31.102 mjpegSide data:cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
[out#0/image2 @ 000001c53e369500] video:342kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
frame=   10 fps=0.0 q=19.4 Lsize=N/A time=00:00:09.00 bitrate=N/A speed= 127x

 每隔5帧抽一帧:

###这里提示-vsync参数已经过期,以后可能要废弃,要改为-fps_mode 这个参数

C:\Users\Administrator>ffmpeg   -i D:\tejing.mp4  -framerate 10 -vf "select=not(mod(n\,5))" -vsync vfr   d:\222\image_%3d.jpeg -hide_banner
-vsync is deprecated. Use -fps_mode
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'D:\tejing.mp4':Metadata:major_brand     : isomminor_version   : 512compatible_brands: isomiso2avc1mp41encoder         : Lavf60.16.100Duration: 00:00:10.00, start: 0.000000, bitrate: 1250 kb/sStream #0:0[0x1](chi): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 1112 kb/s, 25 fps, 25 tbr, 12800 tbn (default)Metadata:handler_name    : VideoHandlervendor_id       : [0][0][0][0]encoder         : Lavc60.31.102 libx264Stream #0:1[0x2](chi): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 130 kb/s (default)Metadata:handler_name    : SoundHandlervendor_id       : [0][0][0][0]
Stream mapping:Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[swscaler @ 000001e0c80e8480] deprecated pixel format used, make sure you did set range correctly
Output #0, image2, to 'd:\222\image_%3d.jpeg':Metadata:major_brand     : isomminor_version   : 512compatible_brands: isomiso2avc1mp41encoder         : Lavf60.16.100Stream #0:0(chi): Video: mjpeg, yuvj420p(pc, progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 fps, 25 tbn (default)Metadata:handler_name    : VideoHandlervendor_id       : [0][0][0][0]encoder         : Lavc60.31.102 mjpegSide data:cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
[out#0/image2 @ 000001e0c3f690c0] video:1174kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
frame=   50 fps=0.0 q=24.8 Lsize=N/A time=00:00:09.80 bitrate=N/A speed=90.3x

因此,命令可以修改为如下:

ffmpeg   -i D:\tejing.mp4  -framerate 10 -vf "select=not(mod(n\,5))" -fps_mode vfr   d:\222\image_%3d.jpeg -hide_banner


以秒为单位,均匀抽帧 

ffmpeg   -i C:\Users\Administrator\Desktop\1.mp4  -framerate 10  -vf fps=fps=1  d:\222\image_%3d.jpeg ###一秒一帧
ffmpeg   -i C:\Users\Administrator\Desktop\1.mp4  -framerate 10  -vf fps=fps=2  d:\222\image_%3d.jpeg###一秒二帧
ffmpeg   -i C:\Users\Administrator\Desktop\1.mp4  -framerate 10  -vf fps=fps=1/30  d:\222\image_%3d.jpeg ##每30秒抽一帧

 

二、

合帧实例

以上面的最后一个抽帧取出的图片为例,将这50张图片合成为一个新的视频:

说明:vcodec 是指定视频的编码格式,一般常用的视频格式是libx264,因为是50张图片合成,因此,指定帧率是25,这样视频的长度就是2秒了

C:\Users\Administrator>ffmpeg -f image2 -r 25 -i d:\222\image_%3d.jpeg -vcodec libx264  test1.mp4 -y -hide_banner
Input #0, image2, from 'd:\222\image_%3d.jpeg':Duration: 00:00:01.67, start: 0.000000, bitrate: N/AStream #0:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 1280x720 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 30 tbn
Stream mapping:Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 00000176db102a80] using SAR=1/1
[libx264 @ 00000176db102a80] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 00000176db102a80] profile High, level 3.1, 4:2:0, 8-bit
[libx264 @ 00000176db102a80] 264 - core 164 r3172 c1c9931 - H.264/MPEG-4 AVC codec - Copyleft 2003-2023 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=22 lookahead_threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'test1.mp4':Metadata:encoder         : Lavf60.16.100Stream #0:0: Video: h264 (avc1 / 0x31637661), yuvj420p(pc, bt470bg/unknown/unknown, progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 30 fps, 15360 tbnMetadata:encoder         : Lavc60.31.102 libx264Side data:cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/mp4 @ 00000176db17c380] video:628kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.228960%
frame=   50 fps=0.0 q=-1.0 Lsize=     630kB time=00:00:01.56 bitrate=3292.7kbits/s speed=5.83x
[libx264 @ 00000176db102a80] frame I:1     Avg QP:24.53  size: 24782
[libx264 @ 00000176db102a80] frame P:13    Avg QP:22.08  size: 17738
[libx264 @ 00000176db102a80] frame B:36    Avg QP:24.48  size: 10758
[libx264 @ 00000176db102a80] consecutive B-frames:  4.0%  0.0%  0.0% 96.0%
[libx264 @ 00000176db102a80] mb I  I16..4: 26.2% 69.1%  4.8%
[libx264 @ 00000176db102a80] mb P  I16..4: 19.6% 42.9%  1.4%  P16..4:  7.3%  3.9%  2.3%  0.0%  0.0%    skip:22.7%
[libx264 @ 00000176db102a80] mb B  I16..4:  7.9% 21.8%  0.1%  B16..8: 16.0%  5.9%  1.9%  direct: 5.8%  skip:40.6%  L0:49.5% L1:44.2% BI: 6.3%
[libx264 @ 00000176db102a80] 8x8 transform intra:70.4% inter:88.9%
[libx264 @ 00000176db102a80] coded y,uvDC,uvAC intra: 47.9% 68.7% 3.6% inter: 12.4% 19.5% 0.2%
[libx264 @ 00000176db102a80] i16 v,h,dc,p: 52% 30% 16%  3%
[libx264 @ 00000176db102a80] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 27% 17% 42%  4%  1%  1%  1%  2%  5%
[libx264 @ 00000176db102a80] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 43% 29% 12%  2%  3%  3%  3%  3%  2%
[libx264 @ 00000176db102a80] i8c dc,h,v,p: 39% 25% 33%  3%
[libx264 @ 00000176db102a80] Weighted P-Frames: Y:7.7% UV:0.0%
[libx264 @ 00000176db102a80] ref P L0: 50.0% 14.5% 17.6% 15.7%  2.2%
[libx264 @ 00000176db102a80] ref B L0: 72.8% 19.4%  7.8%
[libx264 @ 00000176db102a80] ref B L1: 86.9% 13.1%
[libx264 @ 00000176db102a80] kb/s:3084.74

查看合成的视频长度,确实是2秒了:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\Users\Administrator\test1.mp4':Metadata:major_brand     : isomminor_version   : 512compatible_brands: isomiso2avc1mp41encoder         : Lavf60.16.100Duration: 00:00:02.00, start: 0.000000, bitrate: 2716 kb/sStream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt470bg/unknown/unknown, progressive), 1280x720 [SAR 1:1 DAR 16:9], 2710 kb/s, 25 fps, 25 tbr, 12800 tbn (default)Metadata:handler_name    : VideoHandlervendor_id       : [0][0][0][0]encoder         : Lavc60.31.102 libx264

上面的合帧命令-r 修改为5,那么,50/5 就是10秒的视频了,查看新的合成视频,可以看到确实是10秒了,也可以正常的打开播放:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\Users\Administrator\test1.mp4':Metadata:major_brand     : isomminor_version   : 512compatible_brands: isomiso2avc1mp41encoder         : Lavf60.16.100Duration: 00:00:10.00, start: 0.000000, bitrate: 790 kb/sStream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt470bg/unknown/unknown, progressive), 1280x720 [SAR 1:1 DAR 16:9], 789 kb/s, 5 fps, 5 tbr, 10240 tbn (default)Metadata:handler_name    : VideoHandlervendor_id       : [0][0][0][0]encoder         : Lavc60.31.102 libx264

三,

混帧

🆗,前面的视频2我们全部帧抽取出来,然后视频1只抽取设定帧数,最后将视频1抽取的图片和视频2抽取的图片按原来编号混合之后,在合成视频就等于两个视频连接到一起了

视频2可抽帧数是250,帧全部抽取后存放到222这个文件夹下

视频1可抽帧数是438,设定抽取20张图片,那么抽取速率应该是22了,命令如下,帧抽取后存放到333这个文件夹下:

ffmpeg   -i C:\Users\Administrator\Desktop\111.mp4  -framerate 30 -vf "select=not(mod(n\,22))" -fps_mode vfr -f image2  d:\333\image_%3d.jpeg -hide_banner

命令执行完毕后,查看是否是20张图片:

 🆗,这20张图片修改名字,编号从251开始,修改完毕后放入222这个文件夹下就可以合成视频了:

ffmpeg -f image2 -r 25 -i d:\222\image_%3d.jpeg -vcodec libx264  test1.mp4 -y -hide_banner

这样两个视频就合成到一起了,不过由于视频1是去掉了很多帧,因此,质量比较差,如果想完美的两个视频合成到一起,那么,可能需要利用python工具批量修改视频1的抽帧图片名称了

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

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

相关文章

Python服务器监测测试策略与工具:确保应用的高可用性!

在构建高可用性的应用程序时,服务器监测测试是至关重要的一环。Python作为一种强大的编程语言,提供了丰富的工具和库来帮助我们进行服务器监测测试。本文将介绍一些关键的策略和工具,帮助你确保应用的高可用性。 1. 监测策略的制定&#xff…

Vue3 (unplugin-auto-import自动导入的使用)

安装 参考链接 npm i -D unplugin-auto-importvite.config.ts里面配置 import AutoImport from unplugin-auto-import/viteAutoImport({imports:[ vue,vue-router]})重新运行项目会生成一个auto-imports.d.ts的文件 /* eslint-disable */ /* prettier-ignore */ // ts-nochec…

YOLOv9尝鲜测试五分钟极简配置

pip安装python包: pip install yolov9pip在https://github.com/WongKinYiu/yolov9/tree/main中下载好权重文件yolov9-c.pt。 运行下面代码: import yolov9model yolov9.load("yolov9-c.pt", device"cpu") # load pretrained or c…

苹果手机动画演示动画PR样机模板视频素材 iPhone Mockup 7.0

适用于Premiere苹果手机动画演示PR样机模板视频素材 iPhone Mockup 7.0 产品信息: 5款支持alpha频道的动画智能手机。 轻松关闭屏幕上的背景、阴影和反射。 适用于Premiere Pro 2023 每个样机持续时间为13秒。 4K分辨率。 轻松更改颜色。 适用于图像或视频。 包括视…

m估计及其c++简单实现

文章目录 什么是m估计怎么求解m估计呢?Huber函数时的线性m估计 什么是m估计 自20世纪60年代稳健统计建立以来,在国内外众多学者的研究之下,诞生了一系列稳健统计重要理论和成果。其中最主要且广泛使用的稳健统计有以下三类: L-e…

Jmeter学习系列之八:控制器Controllers 的入门介绍

一、Controllers 简介 Jmeter有两种类型的控制器:Samplers(取样器)和Logical Controllers(逻辑控制器);它们驱动着测试的进行取样器:让jmeter发送请求到服务器以及接收服务器的响应数据逻辑控制…

@SpringBootApplication

目录 1. SpringBootApplication注解简介 2. 使用SpringBootApplication注解 3. 自定义SpringBootApplication注解 在Spring Boot中,SpringBootApplication是一个非常重要的注解,它用于开启自动配置,简化了我们的开发工作。本文将详细介绍这…

施华洛世奇 Swarovski EDI需求分析

施华洛世奇为全球首屈一指的光学器材及精确切割仿水晶制造商,为时尚服饰、首饰、灯饰、建筑及室内设计提供仿水晶元素。施华洛世奇有两个主要业务,分别负责制造及销售仿水晶元素,以及设计制造成品。 EDI传输协议 施华洛世奇 Swarovski 与合作…

自定义el-upload 上传文件

前言 最近在做一个文件上传的功能&#xff0c;后端接口写好了、发现前端上传文件的页面不会写……&#xff08;我很笨的&#xff09;然后我就找啊找发现element有个组件是<el-upload/>能直接上传文件。我就想直接用拿来改改改成自己想要的&#xff0c;可是就是这样我花了…

远程连接服务器及可视化方法(Win和Linux)

1.win端 1、通过SSH连接至服务器 在window下&#xff0c;打开命令行提示符&#xff08;快捷键winr后输入cmd回车&#xff09; 在命令行中输入 ssh 服务器上的用户名192.168.50.204回车并输入服务器上的用户登录密码 至此&#xff0c;已成功通过SSH连接至服务器。 2、通过…

Java根据excel模版导出Excel(easyexcel、poi)——含项目测试例子拿来即用

Java根据excel模版导出Excel&#xff08;easyexcel、poi&#xff09;——含项目测试例子拿来即用 1. 前言1.1 关于Excel的一般导出2.2 关于easyexcel的根据模版导出 2. 先看效果2.1 模版2.2 效果 3. 代码实现&#xff08;核心代码&#xff09;3.1 项目代码结构3.2 静态填充例子…

《高考》期刊杂志投稿邮箱知网教育类期刊发表

《高考》杂志是由国家新闻出版总署批准的正规教育类期刊。主要宣传高中新课程改革的专业性&#xff0c;是教育管理工作者、高中一线教师交流经验、探讨问题的重要平台&#xff0c;期刊突出政策性、针对性、指导性&#xff0c;是一本以教育科研成果展示为主&#xff0c;兼具教育…

x86使用GDT表实现系统调用--用户调用系统功能

系统调用 视频讲解可以看这一个课程 GDT表相关知识 原理 注册 允许应用调用操作系统的一些函数, 主要是由于权限, 需要在特区级下面运行一些操作 页表相关设置的时候有一个设置是PDE_U位, 这时候用户就可以访问这一段地址, 否则就是需要系统操作级来进行操作 实现系统调用…

xss-跨站脚本攻击漏洞

前备知识&#xff1a; Cookie和Session是Web开发中用于维持用户状态、跟踪用户会话的核心技术&#xff0c;它们的主要目的是在无状态的HTTP协议基础上实现有状态的用户交互。 **Cookie**&#xff1a; - Cookie是一种由服务器发送到客户端&#xff08;通常是用户的浏览器&#x…

OpenAI视频生成Sora技术简析

基本介绍 Sora是春节期间OpenAI发布的产品&#xff0c;主要是通过文字描述生成视频&#xff0c;通过大规模视频数据训练而成的生成模型&#xff0c;当前还没开放试用。官方发布的技术报告&#xff1a;https://openai.com/research/video-generation-models-as-world-simulators…

无线综合测试仪8960(E5515C)

无线综合测试仪8960&#xff08;E5515C&#xff09; 简述&#xff1a; 8960是美国安捷伦&#xff08;Agilent&#xff09;公司生产的手机综测仪&#xff0c;8960测试仪是一款E5515C主机&#xff0c;具有特定于技术的硬件选件和软件应用程序。有两个硬件选项&#xff0c;8960能…

SpringBoot 学习笔记

文章目录 一、IoC二、AOP三、bean3.1 bean 生命周期3.2 三种依赖注入方式3.3 bean 线程安全 四、SpringMVC五、常用注解5.1 Scope5.2 PostConstruct 和 PreDestroy5.3 Component 和 Bean5.4 Autowired 和 Resource 六、基于 ApplicationContextAware 实现工厂模式七、事务失效八…

[AutoSar]BSW_Com03 DBC详解 (一)

目录 关键词平台说明一、DBC 定义1.1 相关工具 二、主要组成部分介绍2.1 Networks2.2 ECUs2.3 Network nodes2.4 messages2.5 signal2.6 Value Tables 三、主要组成部分关系图 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &am…

推荐一个 Obsidian 的 ChatGPT 插件

源码地址&#xff1a;https://github.com/nhaouari/obsidian-textgenerator-plugin Text Generator 是目前我使用过的最好的 Obsidian 中的 ChatGPT 功能插件。它旨在智能生成内容&#xff0c;以便轻松记笔记。它不仅可以在 Obsidian 中直接使用 ChatGPT&#xff0c;还提供了优…

二叉树高频题目(不含树形DP)

二叉树高频题 二叉树的层序遍历 . - 力扣&#xff08;LeetCode&#xff09; 按点弹出 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>>ans;if(root!nullptr){queue<TreeNode*>q;unordered_map&…