# ffmpeg -s 640x480 -pix_fmt yuv420p -i rawvideoA.yuv -vcodec mjpeg outputA.mov
ffmpeg version 3.4.5 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7.4.0 (Buildroot 2019.02.2)
configuration: --enable-cross-compile --cross-prefix=/opt/f1c100s/buildroot-2019.02.2/output/host/bin/arm-buildroot-linux-gnueabi- --sysroot=/opt/f1c100s/buildroot-2019.02.2/output/host/arm-buildroot-linux-gnueabi/sysroot --host-cc=/usr/bin/gcc --arch=arm --target-os=linux --disable-stripping --pkg-config=/opt/f1c100s/buildroot-2019.02.2/output/host/bin/pkg-config --disable-static --enable-shared --prefix=/usr --enable-avfilter --disable-version3 --enable-logging --enable-optimizations --disable-extra-warnings --enable-avdevice --enable-avcodec --enable-avformat --enable-network --disable-gray --enable-swscale-alpha --disable-small --enable-dct --enable-fft --enable-mdct --enable-rdft --disable-crystalhd --disable-dxva2 --enable-runtime-cpudetect --disable-hardcoded-tables --disable-mipsdsp --disable-mipsdspr2 --disable-msa --enable-hwaccels --disable-cuda --disable-cuvid --disable-nvenc --disable-avisynth --disable-frei0r --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-libdc1394 --disable-libgsm --disable-libilbc --disable-libvo-amrwbenc --disable-symver --disable-doc --enable-gpl --enable-nonfree --enable-ffmpeg --enable-ffplay --enable-ffserver --enable-avresample --enable-ffprobe --enable-postproc --enable-swscale --enable-indevs --disable-alsa --enable-outdevs --enable-pthreads --enable-zlib --disable-bzlib --disable-libfdk-aac --disable-libcdio --disable-gnutls --enable-openssl --disable-libdrm --disable-libopenh264 --disable-vaapi --disable-vdpau --disable-mmal --disable-omx --disable-omx-rpi --disable-libopencv --disable-libopus --disable-libvpx --disable-libass --disable-libbluray --disable-librtmp --disable-libmp3lame --disable-libmodplug --disable-libspeex --disable-libtheora --disable-libwavpack --disable-iconv --enable-libfreetype --disable-fontconfig --disable-libopenjpeg --disable-libx264 --disable-libx265 --disable-x86asm --disable-mmx --disable-sse --disable-sse2 --disable-sse3 --disable-ssse3 --disable-sse4 --disable-sse42 --disable-avx --disable-avx2 --disable-armv6 --disable-armv6t2 --disable-vfp --disable-neon --disable-altivec --extra-libs=-latomic --enable-pic --cpu=arm926ej-s
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libavresample 3. 7. 0 / 3. 7. 0
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
[rawvideo @ 0x6e370] Estimating duration from bitrate, this may be inaccurate
Input #0, rawvideo, from 'rawvideoA.yuv':
Duration: 00:00:02.44, start: 0.000000, bitrate: 92160 kb/s
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 640x480, 92160 kb/s, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[swscaler @ 0x7fcf0] deprecated pixel format used, make sure you did set range correctly
Output #0, mov, to 'outputA.mov':
Metadata:
encoder : Lavf57.83.100
Stream #0:0: Video: mjpeg (jpeg / 0x6765706A), yuvj420p(pc), 640x480, q=2-31, 200 kb/s, 25 fps, 12800 tbn, 25 tbc
Metadata:
encoder : Lavc57.107.100 mjpeg
Side data:
cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
frame= 61 fps=6.2 q=24.8 Lsize= 504kB time=00:00:02.40 bitrate=1718.8kbits/s speed=0.243x
video:503kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.188468%
离线
ffplay@ubuntu:/mnt/hgfs/D/newfiles$ ffmpeg -s 640x480 -pix_fmt yuv420p -i /tmp/rawvideoA.yuv -vcodec mjpeg /tmp/outputA.mov
ffmpeg version 0.8.6-6:0.8.6-1ubuntu2, Copyright (c) 2000-2013 the Libav developers
built on Mar 30 2013 22:20:06 with gcc 4.7.2
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
[rawvideo @ 0x2244360] Estimating duration from bitrate, this may be inaccurate
Input #0, rawvideo, from '/tmp/rawvideoA.yuv':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0.0: Video: rawvideo, yuv420p, 640x480, 25 tbr, 25 tbn, 25 tbc
File '/tmp/outputA.mov' already exists. Overwrite ? [y/N] y
Incompatible pixel format 'yuv420p' for codec 'mjpeg', auto-selecting format 'yuvj420p'
[buffer @ 0x224cec0] w:640 h:480 pixfmt:yuv420p
[avsink @ 0x2243d00] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out'
[scale @ 0x2245600] w:640 h:480 fmt:yuv420p -> w:640 h:480 fmt:yuvj420p flags:0x4
Output #0, mov, to '/tmp/outputA.mov':
Metadata:
encoder : Lavf53.21.1
Stream #0.0: Video: mjpeg, yuvj420p, 640x480, q=2-31, 200 kb/s, 25 tbn, 25 tbc
Stream mapping:
Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
frame= 275 fps=210 q=24.8 Lsize= 2538kB time=11.00 bitrate=1890.5kbits/s
video:2536kB audio:0kB global headers:0kB muxing overhead 0.110687%用 辣鸡电脑Ubuntu 试了一下, 同样的品质, 电脑可以达到 200fps 以上。
离线
# ffmpeg -s 640x480 -pix_fmt yuv420p -i rawvideoA.yuv -vcodec mjpeg -qscale 3 outputA.mov
ffmpeg version 3.4.5 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7.4.0 (Buildroot 2019.02.2)
configuration: --enable-cross-compile --cross-prefix=/opt/f1c100s/buildroot-2019.02.2/output/host/bin/arm-buildroot-linux-gnueabi- --sysroot=/opt/f1c100s/buildroot-2019.02.2/output/host/arm-buildroot-linux-gnueabi/sysroot --host-cc=/usr/bin/gcc --arch=arm --target-os=linux --disable-stripping --pkg-config=/opt/f1c100s/buildroot-2019.02.2/output/host/bin/pkg-config --disable-static --enable-shared --prefix=/usr --enable-avfilter --disable-version3 --enable-logging --enable-optimizations --disable-extra-warnings --enable-avdevice --enable-avcodec --enable-avformat --enable-network --disable-gray --enable-swscale-alpha --disable-small --enable-dct --enable-fft --enable-mdct --enable-rdft --disable-crystalhd --disable-dxva2 --enable-runtime-cpudetect --disable-hardcoded-tables --disable-mipsdsp --disable-mipsdspr2 --disable-msa --enable-hwaccels --disable-cuda --disable-cuvid --disable-nvenc --disable-avisynth --disable-frei0r --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-libdc1394 --disable-libgsm --disable-libilbc --disable-libvo-amrwbenc --disable-symver --disable-doc --enable-gpl --enable-nonfree --enable-ffmpeg --enable-ffplay --enable-ffserver --enable-avresample --enable-ffprobe --enable-postproc --enable-swscale --enable-indevs --disable-alsa --enable-outdevs --enable-pthreads --enable-zlib --disable-bzlib --disable-libfdk-aac --disable-libcdio --disable-gnutls --enable-openssl --disable-libdrm --disable-libopenh264 --disable-vaapi --disable-vdpau --disable-mmal --disable-omx --disable-omx-rpi --disable-libopencv --disable-libopus --disable-libvpx --disable-libass --disable-libbluray --disable-librtmp --disable-libmp3lame --disable-libmodplug --disable-libspeex --disable-libtheora --disable-libwavpack --disable-iconv --enable-libfreetype --disable-fontconfig --disable-libopenjpeg --disable-libx264 --disable-libx265 --disable-x86asm --disable-mmx --disable-sse --disable-sse2 --disable-sse3 --disable-ssse3 --disable-sse4 --disable-sse42 --disable-avx --disable-avx2 --disable-armv6 --disable-armv6t2 --disable-vfp --disable-neon --disable-altivec --extra-libs=-latomic --enable-pic --cpu=arm926ej-s
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libavresample 3. 7. 0 / 3. 7. 0
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
[rawvideo @ 0x6e380] Estimating duration from bitrate, this may be inaccurate
Input #0, rawvideo, from 'rawvideoA.yuv':
Duration: 00:00:02.44, start: 0.000000, bitrate: 92160 kb/s
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 640x480, 92160 kb/s, 25 tbr, 25 tbn, 25 tbc
Please use -q:a or -q:v, -qscale is ambiguous
File 'outputA.mov' already exists. Overwrite ? [y/N] y
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[swscaler @ 0x809d0] deprecated pixel format used, make sure you did set range correctly
Output #0, mov, to 'outputA.mov':
Metadata:
encoder : Lavf57.83.100
Stream #0:0: Video: mjpeg (jpeg / 0x6765706A), yuvj420p(pc), 640x480, q=2-31, 200 kb/s, 25 fps, 12800 tbn, 25 tbc
Metadata:
encoder : Lavc57.107.100 mjpeg
Side data:
cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
frame= 61 fps=5.9 q=3.0 Lsize= 1257kB time=00:00:02.40 bitrate=4289.1kbits/s speed=0.232x
video:1256kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.076685%品质各种调整 3 (2 - 31) 帧率也没什么变化。
离线
# ffmpeg -s 320x240 -pix_fmt yuv420p -i rawvideoA.yuv -vcodec mjpeg -qscale 31 -vb 100k outputA.mov
ffmpeg version 3.4.5 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7.4.0 (Buildroot 2019.02.2)
configuration: --enable-cross-compile --cross-prefix=/opt/f1c100s/buildroot-2019.02.2/output/host/bin/arm-buildroot-linux-gnueabi- --sysroot=/opt/f1c100s/buildroot-2019.02.2/output/host/arm-buildroot-linux-gnueabi/sysroot --host-cc=/usr/bin/gcc --arch=arm --target-os=linux --disable-stripping --pkg-config=/opt/f1c100s/buildroot-2019.02.2/output/host/bin/pkg-config --disable-static --enable-shared --prefix=/usr --enable-avfilter --disable-version3 --enable-logging --enable-optimizations --disable-extra-warnings --enable-avdevice --enable-avcodec --enable-avformat --enable-network --disable-gray --enable-swscale-alpha --disable-small --enable-dct --enable-fft --enable-mdct --enable-rdft --disable-crystalhd --disable-dxva2 --enable-runtime-cpudetect --disable-hardcoded-tables --disable-mipsdsp --disable-mipsdspr2 --disable-msa --enable-hwaccels --disable-cuda --disable-cuvid --disable-nvenc --disable-avisynth --disable-frei0r --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-libdc1394 --disable-libgsm --disable-libilbc --disable-libvo-amrwbenc --disable-symver --disable-doc --enable-gpl --enable-nonfree --enable-ffmpeg --enable-ffplay --enable-ffserver --enable-avresample --enable-ffprobe --enable-postproc --enable-swscale --enable-indevs --disable-alsa --enable-outdevs --enable-pthreads --enable-zlib --disable-bzlib --disable-libfdk-aac --disable-libcdio --disable-gnutls --enable-openssl --disable-libdrm --disable-libopenh264 --disable-vaapi --disable-vdpau --disable-mmal --disable-omx --disable-omx-rpi --disable-libopencv --disable-libopus --disable-libvpx --disable-libass --disable-libbluray --disable-librtmp --disable-libmp3lame --disable-libmodplug --disable-libspeex --disable-libtheora --disable-libwavpack --disable-iconv --enable-libfreetype --disable-fontconfig --disable-libopenjpeg --disable-libx264 --disable-libx265 --disable-x86asm --disable-mmx --disable-sse --disable-sse2 --disable-sse3 --disable-ssse3 --disable-sse4 --disable-sse42 --disable-avx --disable-avx2 --disable-armv6 --disable-armv6t2 --disable-vfp --disable-neon --disable-altivec --extra-libs=-latomic --enable-pic --cpu=arm926ej-s
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libavresample 3. 7. 0 / 3. 7. 0
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
[rawvideo @ 0x6e400] Estimating duration from bitrate, this may be inaccurate
Input #0, rawvideo, from 'rawvideoA.yuv':
Duration: 00:00:09.76, start: 0.000000, bitrate: 23040 kb/s
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 320x240, 23040 kb/s, 25 tbr, 25 tbn, 25 tbc
Please use -q:a or -q:v, -qscale is ambiguous
File 'outputA.mov' already exists. Overwrite ? [y/N] y
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[swscaler @ 0x9cf80] deprecated pixel format used, make sure you did set range correctly
Output #0, mov, to 'outputA.mov':
Metadata:
encoder : Lavf57.83.100
Stream #0:0: Video: mjpeg (jpeg / 0x6765706A), yuvj420p(pc), 320x240, q=2-31, 100 kb/s, 25 fps, 12800 tbn, 25 tbc
Metadata:
encoder : Lavc57.107.100 mjpeg
Side data:
cpb: bitrate max/min/avg: 0/0/100000 buffer size: 0 vbv_delay: -1
frame= 244 fps= 27 q=31.0 Lsize= 673kB time=00:00:09.72 bitrate= 567.2kbits/s speed=1.09x
video:671kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.247602%320x240 分辨率可以接近 30fps
离线
ffmpeg 用的好溜,上面的
ffmpeg -s 640x480 -pix_fmt yuv420p -i rawvideoA.yuv -vcodec mjpeg outputA.mov
是在录一个视频么?
离线
不是的, 就是把一个 YUV420P 格式的纯像素文件 rawvideoA.yuv 编码成 jpeg格式的文件,
用于测试 f1c100s 的编码能力。
离线
那不就是软件编码么?
离线
晕哥小弟 wrote:
那不就是软件编码么?
对, 就是测试软编码, 哎,太耗CPU了。
离线
1、效果就是看转换的帧数?
2、为什么不用硬件的编码?
离线
晕哥小弟 wrote:
1、效果就是看转换的帧数?
2、为什么不用硬件的编码?
一楼红色圈圈那一行可以看帧率,总帧数等
因为还不会,只能先软件搞搞
离线
了然了然。 非常感谢。
https://whycan.cn 还真挺好,传道受业解惑,真的学到不不少。
离线
影响编码效率的参数有很多,主频可能是其中一个不很重要的因素,考虑到编码图像基本上都在进行重复性很高的工作,因此编码器的处理能力和体系结构对部分函数运行效率的关系很大,这也就是硬件编码器可以在低于CPU的频率下实现更高编码效率的主要原因。
类似于这样的编码应用,瓶颈往往在于一些经常被调用的、计算量比较大的函数,比如说预测时计算cost、变换和量化之类,这些函数通常有大量的低精度乘法、乘加运算等操作,在这些情况下一般要使用SIMD来优化执行的效率。我记得ARMv5好像没有SIMD指令?楼主可以试着比较一下ffmpeg中的ff_simple_idct_arm(ARM9使用)和ff_simple_idct_neon(Cortex-A9等使用),就可以发现代码之间的差异了。我猜把ffmpeg搬到同主频的Cortex-A9上应该会快不少。 ![]()
另外可能需要考虑的因素在于存储设备的读写能力,毕竟一帧VGA大小的yuv420p已经有6404801.5=450KB了,而SD卡在嵌入式设备的性能可能有限(特别是在电压是3.3V时),所以也不能指望编码速度能达到什么程度。如果要测试软件的编码能力,建议还是采用摄像头等输入源,这样就不会受到存储设备的瓶颈限制。
最近编辑记录 metro (2019-08-31 17:32:35)
离线
感谢楼上朋友耐心指教,请问默认情况下 ff_simple_idct_arm 这个函数是汇编优化的吗?我还有优化的空间吗?目前就是因为摄像头驱动没有搞定,我猜想着先用文件测试,确定编码器速率没有问题才去弄摄像头驱动程序。
看来是不是应该用 f1c200s, 用内存做文件存储,先排除问题。
离线
ffplay wrote:
感谢楼上朋友耐心指教,请问默认情况下 ff_simple_idct_arm 这个函数是汇编优化的吗?我还有优化的空间吗?目前就是因为摄像头驱动没有搞定,我猜想着先用文件测试,确定编码器速率没有问题才去弄摄像头驱动程序。
看来是不是应该用 f1c200s, 用内存做文件存储,先排除问题。
不好意思哈,只是对视频编码有所了解,对ffmpeg不是很清楚,上面的例子也是临时找的,不过应该比较有代表性。
不过像ffmpeg这样久经考验的项目,汇编部分的优化基本到极致了,指望在编译器或者程序库之外的地方优化执行速度不大现实,最好还是考虑在其它地方改善性能吧。
离线
多谢楼上朋友指教!
离线
arm9没有neon,软件编码肯定巨慢啊,再怎么汇编优化也一样。
离线
期待有大神把硬件编解码搞定...
离线
感觉瓶颈在IO上面吧。
离线
有弄硬编么?
离线
luo wrote:
有弄硬编么?
公司正在申请 tina 的 sdk, 要过些时间才会开始.
离线
ffplay wrote:
luo wrote:
有弄硬编么?
公司正在申请 tina 的 sdk, 要过些时间才会开始.
linux的硬编 可以搞到相关资料? 分享一下嘛
离线
关注,学习
离线
这些芯片真累,资料也不公开
离线
楼主cache没开吧,没开就是这样的
离线
Linux默认开了cache,软解吗速度就是酱紫的
离线
请问如何提升频率?
离线
请问一下如何提升F1C100S的运行主频?原厂那边都说不行的。
离线
唯一的解决办法就是搞硬编
离线
现在全志的硬解码资料是保密的,一般个人是没办法拿到的,网上见多的都软解码的,性能差很多。
离线
我现在是用软件解码,显示logo,性能的确勉强。。。
离线