26998|25

1403

帖子

1

TA的资源

纯净的硅(中级)

楼主
 

一起玩树莓派3 + ffmpeg命令行工具使用及视频录制 [复制链接]

 
ffmpeg编译完之后,会产生ffmpeg、ffplay、ffprobe、ffserver四个可执行文件。这是ffmpeg的命令行工具,分别用于转码、播放媒体、查看媒体信息和媒体服务器的功能。

这几个工具可以直接在ffmpeg目录下使用./ffmpeg这样的形式执行,如果在编译ffmpeg之后执行sudo make install,这些工具会安装到树莓派3的系统中,这样就可以在任意目录下直接输入ffmpeg、ffplay等执行相应的工具。比如我们直接在用户目录(注意绿色箭头所指~表示home目录)执行一下ffmpeg --help

ffmpeg命令工具的用法:
仔细阅读ffmpeg --help显示的帮助信息,上图红框里是查看一些信息类的命令参数,比较重要的是-devices参数,用于查询当前系统的ffmpeg支持的设备,树莓派3上执行之后的结果如下图:

我们可以看到,有alsa和v4l2两个设备,alsa用于音频的录制,而v4l2则用于视频采集。
下面对ffmpeg命令的转码功能做一个简单的介绍。转码就是将一种媒体转换为另一种媒体,可以是改变容器格式、码流数量、改变编码格式、或仅仅改变编码参数。转码需要指定输入文件、输出文件和一些相关参数,本质上从摄像头采集视频保存成常见的视频文件,也属于转码,下面我们通过摄像头录像成mp4文件来分析一下其参数用法;

ffmpeg参数以分组的方式传人,上图中黑色箭头和绿色箭头之间表示输入格式部分的参数,绿色箭头和红色箭头之间则是输出格式的参数,这里相当于摄像头(输入)->mp4文件(输出)的转换,我们分别指定好输入和输出的参数,然后以输入输出文件名为该组参数的结尾就行了。这里输入是摄像头,Linux下摄像头驱动文件是/dev/videon,n是数字,支持多个摄像头,数字从0递增。所以我们指定-i /dev/video0为输入文件,并放在该组参数的最后。然后我们再设置摄像头抓数据的一些参数,-f v4l2表示取数据的格式为v4l2,是Linux下的标志摄像头驱动形式。-r 15 表示帧率为15,-video_size vga表示采集分辨率为VGA(640x480),最后-pix_fmt yuv420p表示采集yuv420p格式的元数据。
然后是输出格式的参数,最后的picam.mp4表示输出的文件名,-f mp4表示输出为mp4格式,而然后是-b:v 500k则指定输出文件中的视频码率为500kbps,-vcodec (-v:c)  h264表示输出文件的视频编码采用h264,ffmpeg会自动指定一个可用的编码器,这里我们可以看后面的输出信息,ffmpeg指定了x264作为编码器。另外由于这里我只单采集视频,所以显示指定关闭音频,使用-an参数。
最后么的-y参数表示输出文件如果存在,就自动覆盖,而不询问,否则每次询问是否覆盖。

图中最后的红色方框显示当前转码的信息,当前事第多少帧,帧率有多少,时间,码率,已经speed表示当前速度和期望速度的比值,如果编码过慢,这个值会小于1.

另外简单说一下ffprobe,主要用于查看媒体文件信息,用法为ffprobe -i 文件名。示例:


ffplay用法也很简单,ffplay -i 文件名,就可以直接播放视频了。当然需要在gui窗口下才能执行,ssh连接里就不用尝试了,因为没有图形界面,没法播放视频啦。不过树莓派播放视频好像资源好用挺厉害的,分辨率1000多的视频,cpu占用90%+,软解挺忧伤的。


好了,另外还有ffserver,这个用的很少,就不多说了。下集预告:利用树莓派硬编码直播视频~~






最新回复

内容很干货,受益匪浅,感谢分享,收藏下来慢慢看,加油!!!  详情 回复 发表于 2024-3-11 21:46

赞赏

1

查看全部赞赏

点赞 关注(1)
个人签名HELLO_WATER

回复
举报

1403

帖子

1

TA的资源

纯净的硅(中级)

推荐
 
a_abj 发表于 2016-11-28 12:24
嗯 我的意思是 摄像头没问题

mjpeg本身是应该支持的,只是我之前写的编译脚步把这个编码器去掉了,优化过度了,脚步更新支持mjpeg了,你可以去 https://bbs.eeworld.com.cn/thread-505971-1-1.html 这个帖子重新下载编译一下,就行了。
查询摄像头支持的格式命令:
  1. pi@RPi3:~ $ ffmpeg -f video4linux2 -list_formats all -i /dev/video0
  2. ffmpeg version N-82113-g490c6bd Copyright (c) 2000-2016 the FFmpeg developers
  3. .
  4. .
  5. .
  6. [video4linux2,v4l2 @ 0xcbc1f0] Raw       :     yuyv422 :           YUYV 4:2:2 : 640x480 160x120 176x144 320x176 320x240 432x240 352x288 544x288 640x360 752x416 800x448 864x480 960x544 1024x576 800x600 1184x656 960x720 1280x720 1392x768 1504x832 1600x896 1280x960 1712x960 1792x1008 1920x1080
  7. [video4linux2,v4l2 @ 0xcbc1f0] Compressed:       mjpeg :          Motion-JPEG : 640x480 160x120 176x144 320x176 320x240 432x240 352x288 544x288 640x360 752x416 800x448 864x480 960x544 1024x576 800x600 1184x656 960x720 1280x720 1392x768 1504x832 1600x896 1280x960 1712x960 1792x1008 1920x1080
复制代码


通过mjpeg方式录制视频:

  1. ffmpeg -f v4l2 -r 15 -video_size vga -input_format mjpeg -i /dev/video0 -b:v 500k -c:v h264_omx -an  -f flv /tmp/test.flv -y
复制代码

 
个人签名HELLO_WATER
 

回复

6040

帖子

196

TA的资源

版主

沙发
 
不错不错,涨姿势了。
 
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

板凳
 
lcofjp 发表于 2016-11-21 10:39
不错不错,涨姿势了。

 
个人签名HELLO_WATER
 
 

回复

1366

帖子

6

TA的资源

版主

4
 
今天跟色哥聊了会,他介绍了个大神给我入门下ffmpeg  雷霄骅在CSDN发的帖子。感觉看的真不错。以后玩树莓派能玩到着的话就好了,我要先马克下
 
个人签名

1084534438 欢迎交流  [加油,一切皆有可能]

 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

5
 
编译 git 版本
运行
ffmpeg -f v4l2 -r 15 -video_size vga -pix_fmt yuv420p -i /dev/video0 -b:v 500k -c:v h264 -an -f mp4 picam.mp4 -y


  1. ffmpeg version N-82629-g9955123 Copyright (c) 2000-2016 the FFmpeg developers
  2.   built with gcc 4.9.2 (Raspbian 4.9.2-10)
  3.   configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-static --disable-shared --prefix=/usr/local --disable-opencl --disable-thumb --disable-pic --disable-stripping --enable-small --enable-ffmpeg --enable-ffplay --enable-ffserver --enable-ffprobe --disable-doc --disable-htmlpages --disable-podpages --disable-txtpages --disable-manpages --disable-everything --enable-libx264 --enable-encoder=libx264 --enable-decoder=h264 --enable-encoder=aac --enable-decoder=aac --enable-encoder=ac3 --enable-decoder=ac3 --enable-muxer=flv --enable-demuxer=flv --enable-muxer=mp4 --enable-demuxer=mpegvideo --enable-muxer=matroska --enable-demuxer=matroska --enable-muxer=wav --enable-demuxer=wav --enable-muxer='pcm*' --enable-demuxer='pcm*' --enable-muxer=rawvideo --enable-demuxer=rawvideo --enable-parser=h264 --enable-parser=aac --enable-protocol=file --enable-protocol=tcp --enable-protocol=rtmp --enable-protocol=cache --enable-filter=aresample --enable-indev=v4l2 --enable-indev=alsa --enable-omx --enable-omx-rpi --enable-encoder=h264_omx --enable-mmal --enable-hwaccel=h264_mmal --enable-decoder=h264_mmal
  4.   libavutil      55. 41.101 / 55. 41.101
  5.   libavcodec     57. 66.107 / 57. 66.107
  6.   libavformat    57. 58.100 / 57. 58.100
  7.   libavdevice    57.  2.100 / 57.  2.100
  8.   libavfilter     6. 67.100 /  6. 67.100
  9.   libswscale      4.  3.101 /  4.  3.101
  10.   libswresample   2.  4.100 /  2.  4.100
  11.   libpostproc    54.  2.100 / 54.  2.100
  12. [video4linux2,v4l2 @ 0x13f5360] The driver does not permit changing the time per frame
  13. [video4linux2,v4l2 @ 0x13f5360] Time per frame unknown
  14. Input #0, video4linux2,v4l2, from '/dev/video0':
  15.   Duration: N/A, start: 19481.966811, bitrate: N/A
  16.     Stream #0:0: Video: mjpeg, none, 640x480, 31 tbr, 1000k tbn, 1000k tbc
  17. Stream mapping:
  18.   Stream #0:0 -> #0:0 (? (?) -> h264 (libx264))
  19. Decoder (codec mjpeg) not found for input stream #0:0
复制代码
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

6
 
Decoder (codec mjpeg) not found for input stream #0:0  报这个错误 不知道什么原因

 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

7
 
Decoder (codec mjpeg) not found for input stream #0:0  报这个错误 不知道什么原因
 
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

8
 
a_abj 发表于 2016-11-24 19:57
Decoder (codec mjpeg) not found for input stream #0:0  报这个错误 不知道什么原因

这个是说 mjpeg的解码器找不到,我编译的时候没有带这个解码器。你的摄像头是不是只支持jpeg格式呢?
 
个人签名HELLO_WATER
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

9
 
shinykongcn 发表于 2016-11-25 15:12
这个是说 mjpeg的解码器找不到,我编译的时候没有带这个解码器。你的摄像头是不是只支持jpeg格式呢?

摄像头支持 rgb24 i420 的
mjpeg 要单独加载么 默认不加载么, 什么编译开关?
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

10
 
fswebcam --no-banner -r 320x240 image2.jpg

截图正常
 
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

11
 
a_abj 发表于 2016-11-27 12:24
摄像头支持 rgb24 i420 的
mjpeg 要单独加载么 默认不加载么, 什么编译开关?

ffmpeg编译是裁剪过的,不是所有组件都编译进去了,具体我再确认一下,晚上回去再看下回复你
 
个人签名HELLO_WATER
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

12
 
a_abj 发表于 2016-11-27 18:49
fswebcam --no-banner -r 320x240 image2.jpg

截图正常

fswebcam 是另外的程序了,跟我们这边要用的ffmpeg是不相关的,codec是直接打包到ffmpeg里面的,也不会加载系统的codec。
 
个人签名HELLO_WATER
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

13
 
shinykongcn 发表于 2016-11-28 09:40
fswebcam 是另外的程序了,跟我们这边要用的ffmpeg是不相关的,codec是直接打包到ffmpeg里面的,也不会加 ...

嗯 我的意思是 摄像头没问题
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

14
 
shinykongcn 发表于 2016-11-28 09:37
ffmpeg编译是裁剪过的,不是所有组件都编译进去了,具体我再确认一下,晚上回去再看下回复你

好的 谢谢
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

16
 
shinykongcn 发表于 2016-11-29 11:32
mjpeg本身是应该支持的,只是我之前写的编译脚步把这个编码器去掉了,优化过度了,脚步更新支持mjpeg了, ...

好使了,

怎么查看 ffmpeg 有哪行开关
继续问一个问题 现在  -f image2 output.jpg 这个image2  此编译不支持
 
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

17
 
a_abj 发表于 2016-11-29 17:17
好使了,

怎么查看 ffmpeg 有哪行开关
继续问一个问题 现在  -f image2 output.jpg 这个image2  此编 ...

看你下载的那个config脚本文件,里面很明了的。
-f选项指定的是输出图像的格式,好像并没有image2这个格式啊?你哪里看到这个格式的?如果要保存成jpeg文件,那就是mjpeg格式, -f mjpeg image.jpg
 
个人签名HELLO_WATER
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

18
 
shinykongcn 发表于 2016-11-30 10:29
看你下载的那个config脚本文件,里面很明了的。
-f选项指定的是输出图像的格式,好像并没有image2这个格 ...

libavformat\img2.c
libavformat\img2.h
libavformat\img2enc.c
....
它是泛指 一类格式
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

19
 
Revision: de4a4ca1a08d30afa7f0abb94ee5f31edee3001f
Author: Michael Niedermayer <michaelni@gmx.at>
Date: 2014-9-11 星期四 21:34:13
Message:
avformat/img2_alias_pix: Add AVClass and image2 AVOptions

This fixes the default timebase and allows overriding the framerate

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
----
Modified: libavformat/img2_alias_pix.c
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

20
 
shinykongcn 发表于 2016-11-30 10:29
看你下载的那个config脚本文件,里面很明了的。
-f选项指定的是输出图像的格式,好像并没有image2这个格 ...

解决了 知道怎么找编译开关了
已经尺寸 image2 了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表