赵美京₁₉⁸⁸⁸ 发表于 2024-4-27 17:46:27

【树莓派5 测评】 + 04.ffmpeg功能测试(视频生成与Logo添加...

本帖最后由 赵美京₁₉⁸⁸⁸ 于 2024-4-27 18:01 编辑

【树莓派5 测评】 + 04.ffmpeg功能测试(视频生成与Logo添加)(zmj)

本节测试树莓派5开发板的FFMPEG视频编码功能。

1.        FFMPEG简介
FFMPEG是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

2.        FFMPEG视频生成

播放器使用的是VideoLAN:
//------播放器VideoLan免费版软件下载地址
https://www.videolan.org/
2.1        FFMPEG生成曼德尔曲线视频//------测试脚本://------FFMPEG生成曼德尔曲线视频
使用 ffmpeg 来生成一个名为 step1_mandelbrot_720p*** 的视频文件,其中视频内容是由 mandelbrot 滤镜生成的 Mandelbrot 集合的动画。
//---指令
ffmpeg -re -f lavfi -i mandelbrot=size=1280x720:rate=25    -vcodec libx264 -r:v 25 step1_mandelbrot_720p***
//---指令解析
运行这个命令后,ffmpeg 将使用 mandelbrot 滤镜生成一个 1280x720 像素、25 帧每秒的视频,并使用 libx264 编码器将其编码为 MP4 格式,然后保存为 step1_mandelbrot_720p*** 文件。执行“Ctrl + C”可以退出视频生成。
//---参数说明
ffmpeg: 这是命令行的主体,用于调用 ffmpeg 这个软件。
-re: 以“真实时间”(real-time)速度读取输入。这对于直播流特别有用,但在这种情况下,它主要用于确保以恒定的帧率生成视频。
-f lavfi: 指定输入格式为 lavfi(Libavfilter 的输入格式),这允许你使用 FFmpeg 的滤镜来处理视频和音频流。
-i mandelbrot=size=1280x720:rate=25: -i 后面跟的是输入源。在这里,输入源是一个名为 mandelbrot 的滤镜,该滤镜生成 Mandelbrot 集合的动画。size=1280x720: 设置输出的视频尺寸为 1280x720 像素,rate=25 设置滤镜的帧率为 25 帧每秒。
-vcodec libx264: 设置视频编码器为 libx264,这是一个非常流行的 H.264 编码器,常用于生成 MP4 格式的视频。
-r:v 25: 设置视频流的帧率为 25 帧每秒。
step1_mandelbrot_720p***: 输出视频文件的名称。//------step1_mandelbrot_720p
2.2        FFMPEG添加TXT画中画
//------测试脚本
//------画中画功能包括视频画中画、 LOGO画中画、TXT画中画的功能测试。此处测试添加字符串Logo并生成新的视频。
//---指令
ffmpeg -i step1_mandelbrot_720p*** -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='Raspberry Pi 5':x=20:y=20" step2_mandelbrot_720p***
//---指令解析
这个命令使用 ffmpeg 对已有的视频文件 step1_mandelbrot_720p*** 进行处理,通过 drawtext 视频滤镜在视频上添加文本。执行这个命令后,ffmpeg 会读取 step1_mandelbrot_720p*** 文件,并在其上添加指定的文本(字体、大小、位置等),然后将结果保存为新的视频文件 step2_mandelbrot_720p***。
这个命令不会改变原视频的其它属性(如编码设置、帧率、分辨率等),只是简单地添加文本到视频上。
//---参数说明
ffmpeg: 调用 ffmpeg 软件。
-i step1_mandelbrot_720p***: -i 参数后面指定输入文件的名称,这里是 step1_mandelbrot_720p***。
-vf "drawtext=...": -vf 参数用于指定视频滤镜(video filter)。在这里,使用了 drawtext 滤镜来在视频上绘制文本。
fontsize=100: 设置文本的字体大小为 100。
fontfile=FreeSerif.ttf: 指定用于文本的字体文件,这里是 FreeSerif.ttf。确保这个字体文件在你的系统上可用,并且路径正确。
text='Raspberry Pi 5': 设置要绘制的文本内容为 "Raspberry Pi 5"。
x=20: 设置文本在视频水平方向上的起始位置为 20 像素。
y=20: 设置文本在视频垂直方向上的起始位置为 20 像素。
step2_mandelbrot_720p***: 指定输出文件的名称,这里是 step2_mandelbrot_720p***。
//------step2_mandelbrot_720p



2.3        详细Log信息


//------详细Log信息
zhaomeijing@raspberrypi5:~/workspace/10_ffmpeg$ ffmpeg -re -f lavfi -i mandelbrot=size=1280x720:rate=25    -vcodec libx264 -r:v 25 step1_mandelbrot_720p***
ffmpeg version 5.1.4-0+rpt3+deb12u1 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12 (Debian 12.2.0-14)
configuration: --prefix=/usr --extra-version=0+rpt3+deb12u1 --toolchain=hardened --incdir=/usr/include/aarch64-linux-gnu --enable-gpl --disable-stripping --disable-mmal --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sand --enable-sdl2 --disable-sndio --enable-libjxl --enable-neon --enable-v4l2-request --enable-libudev --enable-epoxy --libdir=/usr/lib/aarch64-linux-gnu --arch=arm64 --enable-pocketsphinx --enable-librsvg --enable-libdc1394 --enable-libdrm --enable-vout-drm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared
WARNING: library configuration mismatch
avcodec   configuration: --prefix=/usr --extra-version=0+rpt3+deb12u1 --toolchain=hardened --incdir=/usr/include/aarch64-linux-gnu --enable-gpl --disable-stripping --disable-mmal --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sand --enable-sdl2 --disable-sndio --enable-libjxl --enable-neon --enable-v4l2-request --enable-libudev --enable-epoxy --libdir=/usr/lib/aarch64-linux-gnu --arch=arm64 --enable-pocketsphinx --enable-librsvg --enable-libdc1394 --enable-libdrm --enable-vout-drm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared --enable-version3 --disable-doc --disable-programs --enable-libaribb24 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libtesseract --enable-libvo_amrwbenc --enable-libsmbclient
libavutil      57. 28.100 / 57. 28.100
libavcodec   59. 37.100 / 59. 37.100
libavformat    59. 27.100 / 59. 27.100
libavdevice    59.7.100 / 59.7.100
libavfilter   8. 44.100 /8. 44.100
libswscale      6.7.100 /6.7.100
libswresample   4.7.100 /4.7.100
libpostproc    56.6.100 / 56.6.100
Input #0, lavfi, from 'mandelbrot=size=1280x720:rate=25':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0: Video: rawvideo (RGB / 0x424752), rgb0, 1280x720 , 25 tbr, 25 tbn
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Press to stop, [?] for help
using SAR=1/1
using cpu capabilities: ARMv8 NEON
profile High 4:4:4 Predictive, level 3.1, 4:4:4, 8-bit
264 - core 164 r3095 baee400 - H.264/MPEG-4 AVC codec - Copyleft 2003-2022 - 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=4 threads=6 lookahead_threads=1 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 'step1_mandelbrot_720p***':
Metadata:
    encoder         : Lavf59.27.100
Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv444p(tv, progressive), 1280x720 , q=2-31, 25 fps, 12800 tbn
    Metadata:
      encoder         : Lavc59.37.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame= 1571 fps= 12 q=-1.0 Lsize=185747kB time=00:01:02.72 bitrate=24260.9kbits/s speed=0.498x
video:185727kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.011154%
frame I:7   Avg QP:21.56size:246927
frame P:396   Avg QP:24.87size:151496
frame B:1168Avg QP:31.17size:109985
consecutive B-frames:0.8%0.0%0.4% 98.8%
mb II16..4: 32.5% 37.5% 30.0%
mb PI16..4:1.6%0.8%0.7%P16..4: 29.4% 13.4% 15.6%0.0%0.0%    skip:38.3%
mb BI16..4:0.0%0.0%0.0%B16..8: 24.9%6.4%3.6%direct: 9.2%skip:55.8%L0:42.6% L1:37.2% BI:20.1%
8x8 transform intra:30.6% inter:15.6%
coded y,u,v intra: 31.9% 31.4% 32.2% inter: 20.4% 21.7% 21.9%
i16 v,h,dc,p: 17% 10%5% 69%
i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14%8% 56%4%4%3%3%4%2%
i4 v,h,dc,ddl,ddr,vr,hd,vl,hu:7%8% 29%9% 11%9%9%8%9%
Weighted P-Frames: Y:0.0% UV:0.0%
ref P L0: 48.3%4.9% 29.6% 17.2%
ref B L0: 68.9% 24.0%7.1%
ref B L1: 85.4% 14.6%
kb/s:24211.78
Exiting normally, received signal 2.
zhaomeijing@raspberrypi5:~/workspace/10_ffmpeg$ ll
total 185760
drwxr-xr-x 2 zhaomeijing zhaomeijing      4096 Mar 25 14:16 ./
drwxr-xr-x 5 zhaomeijing zhaomeijing      4096 Mar 25 14:15 ../
-rw-r--r-- 1 zhaomeijing zhaomeijing 190205439 Mar 25 14:18 step1_mandelbrot_720p***
zhaomeijing@raspberrypi5:~/workspace/10_ffmpeg$ du -sh *
182M    step1_mandelbrot_720p***
zhaomeijing@raspberrypi5:~/workspace/10_ffmpeg$ ffmpeg -i step1_mandelbrot_720p*** -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='Raspberry Pi 5':x=20:y=20" step2_mandelbrot_720p***
ffmpeg version 5.1.4-0+rpt3+deb12u1 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12 (Debian 12.2.0-14)
configuration: --prefix=/usr --extra-version=0+rpt3+deb12u1 --toolchain=hardened --incdir=/usr/include/aarch64-linux-gnu --enable-gpl --disable-stripping --disable-mmal --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sand --enable-sdl2 --disable-sndio --enable-libjxl --enable-neon --enable-v4l2-request --enable-libudev --enable-epoxy --libdir=/usr/lib/aarch64-linux-gnu --arch=arm64 --enable-pocketsphinx --enable-librsvg --enable-libdc1394 --enable-libdrm --enable-vout-drm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared
WARNING: library configuration mismatch
avcodec   configuration: --prefix=/usr --extra-version=0+rpt3+deb12u1 --toolchain=hardened --incdir=/usr/include/aarch64-linux-gnu --enable-gpl --disable-stripping --disable-mmal --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sand --enable-sdl2 --disable-sndio --enable-libjxl --enable-neon --enable-v4l2-request --enable-libudev --enable-epoxy --libdir=/usr/lib/aarch64-linux-gnu --arch=arm64 --enable-pocketsphinx --enable-librsvg --enable-libdc1394 --enable-libdrm --enable-vout-drm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared --enable-version3 --disable-doc --disable-programs --enable-libaribb24 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libtesseract --enable-libvo_amrwbenc --enable-libsmbclient
libavutil      57. 28.100 / 57. 28.100
libavcodec   59. 37.100 / 59. 37.100
libavformat    59. 27.100 / 59. 27.100
libavdevice    59.7.100 / 59.7.100
libavfilter   8. 44.100 /8. 44.100
libswscale      6.7.100 /6.7.100
libswresample   4.7.100 /4.7.100
libpostproc    56.6.100 / 56.6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'step1_mandelbrot_720p***':
Metadata:
    major_brand   : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf59.27.100
Duration: 00:01:02.84, start: 0.000000, bitrate: 24214 kb/s
Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p(progressive), 1280x720 , 24211 kb/s, 25 fps, 25 tbr, 12800 tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       :
      encoder         : Lavc59.37.100 libx264
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Press to stop, [?] for help
Using "/usr/share/fonts/truetype/noto/NotoSans-Regular.ttf"
using SAR=1/1
using cpu capabilities: ARMv8 NEON
profile High 4:4:4 Predictive, level 3.1, 4:4:4, 8-bit
264 - core 164 r3095 baee400 - H.264/MPEG-4 AVC codec - Copyleft 2003-2022 - 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=4 threads=6 lookahead_threads=1 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 'step2_mandelbrot_720p***':
Metadata:
    major_brand   : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf59.27.100
Stream #0:0(und): Video: h264 (avc1 / 0x31637661), yuv444p(progressive), 1280x720 , q=2-31, 25 fps, 12800 tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       :
      encoder         : Lavc59.37.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame= 1571 fps= 18 q=-1.0 Lsize=183555kB time=00:01:02.72 bitrate=23974.5kbits/s speed=0.737x
video:183534kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.011296%
frame I:7   Avg QP:20.74size:250226
frame P:396   Avg QP:24.17size:153515
frame B:1168Avg QP:31.20size:107358
consecutive B-frames:0.8%0.1%0.0% 99.0%
mb II16..4: 29.6% 38.8% 31.6%
mb PI16..4:2.4%1.4%1.7%P16..4: 32.0% 14.3% 15.2%0.0%0.0%    skip:33.0%
mb BI16..4:0.0%0.0%0.1%B16..8: 21.7%6.6%3.6%direct: 8.9%skip:59.0%L0:40.8% L1:35.7% BI:23.5%
8x8 transform intra:29.2% inter:19.7%
coded y,u,v intra: 36.2% 36.0% 36.7% inter: 20.7% 22.1% 22.3%
i16 v,h,dc,p: 24% 13%7% 56%
i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15%8% 62%3%3%2%2%3%2%
i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 12% 23%8%9%8%9%8%8%
Weighted P-Frames: Y:0.5% UV:0.0%
ref P L0: 50.1%6.2% 28.4% 15.2%0.1%
ref B L0: 69.3% 23.6%7.1%
ref B L1: 86.8% 13.2%
kb/s:23925.94
zhaomeijing@raspberrypi5:~/workspace/10_ffmpeg$ ll
total 369320
drwxr-xr-x 2 zhaomeijing zhaomeijing      4096 Mar 25 14:19 ./
drwxr-xr-x 5 zhaomeijing zhaomeijing      4096 Mar 25 14:15 ../
-rw-r--r-- 1 zhaomeijing zhaomeijing 190205439 Mar 25 14:18 step1_mandelbrot_720p***
-rw-r--r-- 1 zhaomeijing zhaomeijing 187960205 Mar 25 14:21 step2_mandelbrot_720p***
zhaomeijing@raspberrypi5:~/workspace/10_ffmpeg$ du -sh *
182M    step1_mandelbrot_720p***
180M    step2_mandelbrot_720p***
zhaomeijing@raspberrypi5:~/workspace/10_ffmpeg$

//------end

stm1024 发表于 2024-4-29 11:15:16

赵美京₁₉⁸⁸⁸ 发表于 2024-4-27 19:48
有点崩溃,没法上传本地视频。

你可以上传到b站,然后贴视频链接

赵美京₁₉⁸⁸⁸ 发表于 2024-4-27 19:48:42

有点崩溃,没法上传本地视频。
页: [1]
查看完整版本: 【树莓派5 测评】 + 04.ffmpeg功能测试(视频生成与Logo添加...

Baidu
map