FFmpeg视频录制(WIN)
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)相关推荐
- FFmpeg视频录制压缩处理走过的坑
在公司里面开发项目做视频处理时遇到了问题,这个问题困扰我很久了,解决了只想给大家说出来,虽然很简单的问题,免得你们遇到我类似的问题再次难以自拔! 视频压缩处理我用了两种方式来解决的,一种是第三方,一种 ...
- FFmpeg 视频录制 - 视频添加滤镜和编码
前言 音视频开发中,视频编码是另一个重要的部分,基于 FFmpeg 软件解码前面系列文章已经介绍过了. 接下来主要介绍软件编码这一块,包括视频编码.音频编码.为视频添加滤镜等,后续文章安排介绍 And ...
- FFmpeg 开发(10):FFmpeg 视频录制 - 视频添加滤镜和编码
音视频开发中,视频编码是另一个重要的部分,基于 FFmpeg 软件解码前面系列文章已经介绍过了,接下来主要介绍软件编码这一块,包括视频编码.音频编码.为视频添加滤镜等.后期文章安排将介绍 Androi ...
- FFmpeg 开发(12):Android FFmpeg 实现带滤镜的微信小视频录制功能
前文利用 FFmpeg 分别实现了对 Android Camera2 采集的预览帧进行编码生成 mp4 文件,以及对 Android AudioRecorder 采集 PCM 音频进行编码生成 aac ...
- ffmpeg命令录制windows音视频
欢迎转载请注明出处:海漩涡 http://blog.csdn.net/tanhuifang520 ffmpeg命令录制windows音视频 一.下载ffmpeg 存放在 ...
- android+高仿视频录制,高仿微信视频录制, 涂鸦水印添加, 基于 ffmpeg 视频编辑
功能主要包含5点: 1.基于ffmpeg的视频拍摄及合成; 2.自定义拍摄按钮, 长按放大并且显示拍摄进度; 3.自定义view, 实现手绘涂鸦; 4.自定义可触摸旋转缩放位移的表情文字view; 5 ...
- android仿微信拍摄视频教程,仿微信视频拍摄UI, 基于ffmpeg的视频录制编辑(上)
本项目所使用的so库是VCamera,个人免费, 禁止商用,只用作demo演示 因为最近项目做了关于视频拍摄和视频处理的需求, 所以特来分享一下, 做了一个基于微信录制, 分析ffmpeg视频编辑的 ...
- 利用FFmpeg玩转Android视频录制与压缩(二)
请尊重原创,转载请注明出处:http://blog.csdn.net/mabeijianxi/article/details/72983362 预热 时光荏苒,光阴如梭,离上一次吹牛逼已经过去了两三个 ...
- 利用FFmpeg玩转Android视频录制与压缩(三)
请尊重原创,转载请注明出处http://blog.csdn.net/mabeijianxi/article/details/73011313 前言 上一回说到啊,这千秋月没是佳人离别,时逢枯枝落旧城, ...
最新文章
- easyui datagrid checkbox的相关属性整理
- python图形用户界面设计报告_19.1 Python图形用户界面开发工具包
- 基于Windows环境下MyEclipse10快捷键总结
- SAMBA服务和FTP服务讲解(week3_day1)--技术流ken
- HTML制作搞笑照片,40张创意搞笑的照片PS效果
- Spring Boot整合Thymeleaf模板引擎
- hazelcast_HazelCast的Spring-Boot和Cache抽象
- api代理提取_了解提取API
- ideal如何快速导入import_【MAC版】pr预设安装目录?pr如何快速批量导入lut
- HDU - 2828 网络流
- 23. 考虑用排序的vector替代关联容器
- 开发一款AirPods或者Beats耳机查看电量的软件
- 项目管理及Office Project 2013 项目管理计划工具的使用详解(全)
- MATLAB符号函数的求导
- 阿里云Maven仓库
- Excel怎样设置行高和列宽
- SoftICE初使用
- Python 2和Python 3 用pip 安装时如何区分
- kettle-作业【定时同步数据表中数据】
- 用python实现FMM和BMM