FFmpeg视频录制(WIN)

命令

查看当前平台可用的设备

ffmpeg -devices// 结果如下:
Devices:D. = Demuxing supported.E = Muxing supported--D  dshow           DirectShow capture   // DirectShow,是Windows平台的多媒体系统库D  gdigrab         GDI API Windows frame grabberD  lavfi           Libavfilter virtual input deviceE sdl,sdl2        SDL2 output deviceD  vfwcap          VfW video capture

查看当前平台支持的设备

ffmpeg -f dshow -list_devices true -i dummy// 结果如下:DirectShow video devices (some may be both video and audio devices)"Integrated Camera"  // 摄像头Alternative name "@device_pnp_\\?\usb#vid_04f2&pid_b604&mi_00#6&31e07f50&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"DirectShow audio devices"麦克风阵列 (2- Conexant SmartAudio HD)" //麦克风Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{01E2545F-541D-4363-A995-DB47530ABA17}"

查看dshow可设置的参数

ffmpeg -h demuxer=dshow// 结果如下:
Demuxer dshow [DirectShow capture]:
dshow indev AVOptions:
// 分辨率-video_size        <image_size> .D........ set video size given a string such as 640x480 or hd720.// 像素格式-pixel_format      <pix_fmt>    .D........ set video pixel format (default none)// 帧率(每秒采集多少帧画面)-framerate         <string>     .D........ set video frame rate// 采样率-sample_rate       <int>        .D........ set audio sample rate (from 0 to INT_MAX) (default 0)// 采样大小(位深度)-sample_size       <int>        .D........ set audio sample size (from 0 to 16) (default 0)// 声道数-channels          <int>        .D........ set number of audio channels, such as 1 or 2 (from 0 to INT_MAX) (default 0)-audio_buffer_size <int>        .D........ set audio device buffer latency size in milliseconds (default is the device's default) (from 0 to INT_MAX) (default 0)// true表示列出dshow支持的所有设备-list_devices      <boolean>    .D........ list available devices (default false)// true表示列出特定设备支持的所有参数-list_options      <boolean>    .D........ list available options for specified device (default false)-video_device_number <int>        .D........ set video device number for devices with same name (starts at 0) (from 0 to INT_MAX) (default 0)-audio_device_number <int>        .D........ set audio device number for devices with same name (starts at 0) (from 0 to INT_MAX) (default 0)-crossbar_video_input_pin_number <int>        .D........ set video input pin number for crossbar device (from -1 to INT_MAX) (default -1)-crossbar_audio_input_pin_number <int>        .D........ set audio input pin number for crossbar device (from -1 to INT_MAX) (default -1)-show_video_device_dialog <boolean>    .D........ display property dialog for video capture device (default false)-show_audio_device_dialog <boolean>    .D........ display property dialog for audio capture device (default false)-show_video_crossbar_connection_dialog <boolean>    .D........ display property dialog for crossbar connecting pins filter on video device (default false)-show_audio_crossbar_connection_dialog <boolean>    .D........ display property dialog for crossbar connecting pins filter on audio device (default false)-show_analog_tv_tuner_dialog <boolean>    .D........ display property dialog for analog tuner filter (default false)-show_analog_tv_tuner_audio_dialog <boolean>    .D........ display property dialog for analog tuner audio filter (default false)-audio_device_load <string>     .D........ load audio capture filter device (and properties) from file-audio_device_save <string>     .D........ save audio capture filter device (and properties) to file-video_device_load <string>     .D........ load video capture filter device (and properties) from file-video_device_save <string>     .D........ save video capture filter device (and properties) to file

查看摄像头支持的参数

ffmpeg -f dshow -list_options true -i video="Integrated Camera"// 结果如下:
DirectShow video device options (from video devices)Pin "捕获" (alternative pin name "捕获")vcodec=mjpeg  min s=1280x720 fps=30 max s=1280x720 fps=30vcodec=mjpeg  min s=320x180 fps=30 max s=320x180 fps=30vcodec=mjpeg  min s=320x240 fps=30 max s=320x240 fps=30vcodec=mjpeg  min s=352x288 fps=30 max s=352x288 fps=30vcodec=mjpeg  min s=424x240 fps=30 max s=424x240 fps=30vcodec=mjpeg  min s=640x360 fps=30 max s=640x360 fps=30vcodec=mjpeg  min s=640x480 fps=30 max s=640x480 fps=30vcodec=mjpeg  min s=848x480 fps=30 max s=848x480 fps=30vcodec=mjpeg  min s=960x540 fps=30 max s=960x540 fps=30
pixel_format=yuyv422  min s=1280x720 fps=10 max s=1280x720 fps=10
pixel_format=yuyv422  min s=320x180 fps=30 max s=320x180 fps=30
pixel_format=yuyv422  min s=320x240 fps=30 max s=320x240 fps=30
pixel_format=yuyv422  min s=352x288 fps=30 max s=352x288 fps=30
pixel_format=yuyv422  min s=424x240 fps=30 max s=424x240 fps=30
pixel_format=yuyv422  min s=640x360 fps=30 max s=640x360 fps=30
pixel_format=yuyv422  min s=640x480 fps=30 max s=640x480 fps=30
pixel_format=yuyv422  min s=848x480 fps=20 max s=848x480 fps=20
pixel_format=yuyv422  min s=960x540 fps=15 max s=960x540 fps=15
pixel_format=bgr24  min s=1280x720 fps=10 max s=1280x720 fps=10
pixel_format=bgr24  min s=320x180 fps=30 max s=320x180 fps=30
pixel_format=bgr24  min s=320x240 fps=30 max s=320x240 fps=30
pixel_format=bgr24  min s=352x288 fps=30 max s=352x288 fps=30
pixel_format=bgr24  min s=424x240 fps=30 max s=424x240 fps=30
pixel_format=bgr24  min s=640x360 fps=30 max s=640x360 fps=30
pixel_format=bgr24  min s=640x480 fps=30 max s=640x480 fps=30pixel_format=bgr24  min s=848x480 fps=20 max s=848x480 fps=20pixel_format=bgr24  min s=960x540 fps=15 max s=960x540 fps=15

录制

ffmpeg -f dshow -i video="Integrated Camera" out.yuv// 结果如下:
Input #0, dshow, from 'video=Integrated Camera':Duration: N/A, start: 188460.155000, bitrate: N/A
// 输入参数 yuvj422p, 1280x720, 30 fpsStream #0:0: Video: mjpeg (Baseline) (MJPG / 0x47504A4D), yuvj422p(pc, bt470bg/unknown/unknown), 1280x720, 30 fps, 30 tbr, 10000k tbn, 10000k tbc
Stream mapping:Stream #0:0 -> #0:0 (mjpeg (native) -> rawvideo (native))
Press [q] to stop, [?] for help
Output #0, rawvideo, to 'out.yuv':Metadata:encoder         : Lavf58.45.100
// 输出参数 yuvj422p, 1280x720, 30 fpsStream #0:0: Video: rawvideo (Y42B / 0x42323459), yuvj422p, 1280x720, q=2-31, 442368 kb/s, 30 fps, 30 tbn, 30 tbcMetadata:encoder         : Lavc58.91.100 rawvideo

自定义参数录制

ffmpeg -f dshow -video_size 640x480 -pixel_format yuyv422 -framerate 30 -i video="Integrated Camera" out.yuv

播放

ffplay -video_size 640x480 -pixel_format yuyv422 -framerate 30 out.yuv

代码

// 1.注册设备 - 一个应用只注册一次
avdevice_register_all();qDebug() << "开始录制视频";
// 2.获取输入格式
AVInputFormat * fmt = av_find_input_format(FOMART_NAME);
if(!fmt){qDebug() << "获取输入格式失败 -> " << FOMART_NAME;return;
}
// 3.打开设备
// 格式上下文
AVFormatContext * ctx = nullptr;
// 选项
AVDictionary * options;
av_dict_set(&options,"video_size","1280x720",0);
av_dict_set(&options,"pixel_format","yuyv422",0);
av_dict_set(&options,"framerate","30",0);
int ret = avformat_open_input(&ctx,DEVICE_NAME,fmt,&options);
if(ret < 0){char error_buff[1024] = {0};av_strerror(ret,error_buff,sizeof(error_buff));qDebug() << "打开设备失败 -> " << error_buff;return;
}
// 4.采集数据
// 数据包
AVPacket * pkt = av_packet_alloc();
// 文件名
QString file_name = FILE_NAME;
file_name += QDateTime::currentDateTime().toString("yyyy_MM_dd_HH_mm_ss");
file_name += ".yuv";
QFile file(file_name);
// 文件只写 - 文件不存在就创建,存在就清空,再开始写入
if(!file.open(QIODevice::WriteOnly)){qDebug() << "文件打开失败 -> " << file_name;avformat_close_input(&ctx);return;
}// 计算每一帧的大小
AVCodecParameters *params = ctx->streams[0]->codecpar;
int imageSize = av_image_get_buffer_size((AVPixelFormat) params->format,params->width, params->height,1);// 保存数据
while(!isInterruptionRequested() && av_read_frame(ctx,pkt) == 0){file.write((const char *)pkt->data,pkt->size);qDebug() << "录制视频中...";// 回收资源av_packet_unref(pkt);
}// 5.释放资源
av_packet_free(&pkt);
file.close();
avformat_close_input(&ctx);
qDebug() << "录制视频结束";// 6.测试out.yuv文件
// ffplay -video_size 1280x720 -pixel_format yuyv422 -framerate 30 out.yuv

FFmpeg视频录制(WIN)相关推荐

  1. FFmpeg视频录制压缩处理走过的坑

    在公司里面开发项目做视频处理时遇到了问题,这个问题困扰我很久了,解决了只想给大家说出来,虽然很简单的问题,免得你们遇到我类似的问题再次难以自拔! 视频压缩处理我用了两种方式来解决的,一种是第三方,一种 ...

  2. FFmpeg 视频录制 - 视频添加滤镜和编码

    前言 音视频开发中,视频编码是另一个重要的部分,基于 FFmpeg 软件解码前面系列文章已经介绍过了. 接下来主要介绍软件编码这一块,包括视频编码.音频编码.为视频添加滤镜等,后续文章安排介绍 And ...

  3. FFmpeg 开发(10):FFmpeg 视频录制 - 视频添加滤镜和编码

    音视频开发中,视频编码是另一个重要的部分,基于 FFmpeg 软件解码前面系列文章已经介绍过了,接下来主要介绍软件编码这一块,包括视频编码.音频编码.为视频添加滤镜等.后期文章安排将介绍 Androi ...

  4. FFmpeg 开发(12):Android FFmpeg 实现带滤镜的微信小视频录制功能

    前文利用 FFmpeg 分别实现了对 Android Camera2 采集的预览帧进行编码生成 mp4 文件,以及对 Android AudioRecorder 采集 PCM 音频进行编码生成 aac ...

  5. ffmpeg命令录制windows音视频

    欢迎转载请注明出处:海漩涡 http://blog.csdn.net/tanhuifang520                 ffmpeg命令录制windows音视频 一.下载ffmpeg 存放在 ...

  6. android+高仿视频录制,高仿微信视频录制, 涂鸦水印添加, 基于 ffmpeg 视频编辑

    功能主要包含5点: 1.基于ffmpeg的视频拍摄及合成; 2.自定义拍摄按钮, 长按放大并且显示拍摄进度; 3.自定义view, 实现手绘涂鸦; 4.自定义可触摸旋转缩放位移的表情文字view; 5 ...

  7. android仿微信拍摄视频教程,仿微信视频拍摄UI, 基于ffmpeg的视频录制编辑(上)

    本项目所使用的so库是VCamera,个人免费, 禁止商用,只用作demo演示 因为最近项目做了关于视频拍摄和视频处理的需求, 所以特来分享一下, 做了一个基于微信录制,  分析ffmpeg视频编辑的 ...

  8. 利用FFmpeg玩转Android视频录制与压缩(二)

    请尊重原创,转载请注明出处:http://blog.csdn.net/mabeijianxi/article/details/72983362 预热 时光荏苒,光阴如梭,离上一次吹牛逼已经过去了两三个 ...

  9. 利用FFmpeg玩转Android视频录制与压缩(三)

    请尊重原创,转载请注明出处http://blog.csdn.net/mabeijianxi/article/details/73011313 前言 上一回说到啊,这千秋月没是佳人离别,时逢枯枝落旧城, ...

最新文章

  1. easyui datagrid checkbox的相关属性整理
  2. python图形用户界面设计报告_19.1 Python图形用户界面开发工具包
  3. 基于Windows环境下MyEclipse10快捷键总结
  4. SAMBA服务和FTP服务讲解(week3_day1)--技术流ken
  5. HTML制作搞笑照片,40张创意搞笑的照片PS效果
  6. Spring Boot整合Thymeleaf模板引擎
  7. hazelcast_HazelCast的Spring-Boot和Cache抽象
  8. api代理提取_了解提取API
  9. ideal如何快速导入import_【MAC版】pr预设安装目录?pr如何快速批量导入lut
  10. HDU - 2828 网络流
  11. 23. 考虑用排序的vector替代关联容器
  12. 开发一款AirPods或者Beats耳机查看电量的软件
  13. 项目管理及Office Project 2013 项目管理计划工具的使用详解(全)
  14. MATLAB符号函数的求导
  15. 阿里云Maven仓库
  16. Excel怎样设置行高和列宽
  17. SoftICE初使用
  18. Python 2和Python 3 用pip 安装时如何区分
  19. kettle-作业【定时同步数据表中数据】
  20. 用python实现FMM和BMM

热门文章

  1. solidworks批量图号分离_SolidWorks2014基于宏实现快速图号名称分离.docx
  2. voip系统与网络电话
  3. 算法题-----题目、题解、个人算法、个人思考
  4. python 查找excel表格中重复的信息并标出来
  5. 这篇文章让你实现时光机特效的操作
  6. QQ伤感日志_你教会了我爱,让我懂得了爱
  7. 盛大开业!三星生活家电体验馆正式入驻红星美凯龙
  8. recon-ng的使用
  9. 了解云的一些基本概念
  10. 基于FME的地形图图面压盖检查工具的设计与制作