ffmpeg存储
A. python3 如何存储ffmpeg获取到的音频文件信息,它是打印出来的。
搜一下:python3
如何存储ffmpeg获取到的音频文件信息,它是打印出来的。
B. ffmpeg怎么把编码好的h264帧存入ts文件里
仅转换可以使用命令,把任一mp4转换成ts
ffmpeg -i input.mp4 -c -bsf h264_mp4toannexb output.ts 很高兴为您解答!
有不明白的可以追问!如果您认可我的回答。
请点击下面的【选为满意回答】按钮,谢谢!
C. 如何用ffmpeg将rtsp视频流录制成mp4文件
ffmpeg -y -i rtsp:\\192.168.1.188:8089\test -vcodec -acodec -f mp4 e:\x.mp4
D. 请问ffmpeg解码出来的视频数据保存在哪我用avcodec_decode_video方法解码后解码出得数据放在哪里的呢
avcodec.h中
int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
int *got_picture_ptr,
const AVPacket *avpkt);
解码后的数据保存在picture中。。。
E. 如何用ffmpeg录像并存储到本地
您好,您试试:
ffmpeg -f video4linux -s 320*240 -r 10 -i /dev/video0 test.asf
运行的结果是
FFmpeg version SVN-r16967, Copyright (c) 2000-2009 Fabrice Bellard, et al.
configuration: --enable-pthreads --enable-x11grab --enable-memalign-hack --enable-gpl --enable-libmp3lame --disable-vhook
libavutil 49.14. 0 / 49.14. 0
libavcodec 52.11. 0 / 52.11. 0
libavformat 52.25. 0 / 52.25. 0
libavdevice 52. 1. 0 / 52. 1. 0
built on Feb 3 2009 15:22:03, gcc: 4.3.2
Input #0, video4linux, from '/dev/video0':
Duration: N/A, start: 1233715988.062058, bitrate: 9216 kb/s
Stream #0.0: Video: rawvideo, yuv420p, 320x240, 9216 kb/s, 10.00 tb(r)
Output #0, asf, to 'test.asf':
Stream #0.0: Video: msmpeg4, yuv420p, 320x240, q=2-31, 200 kb/s, 10.00 tb(c)
Stream mapping:
Stream #0.0 -> #0.0
Press [q] to stop encoding
VIDIOCMCAPTURE: Invalid argument
frame= 1 fps= 0 q=6.5 Lsize= 32kB time=0.10 bitrate=2594.5kbits/s
video:28kB audio:0kB global headers:0kB muxing overhead 11.194542%
F. 怎么查看ffmpeg源文件存放的位置
源文件指
Database应文件(.MDF, .LDF)
G. 如何随机抽取每段视频画面中的一帧保存为图片格式
打开FFmpeg软件的官方网站http://ffmpeg.org/,点击"Download"下载按钮就如下载详情页
H. Java利用ffmpeg对视频逐帧保存,截取的帧太多近万张,如何设置帧间隔大些,使一定时间内的帧数变少
我给出正解:
ffmpeg -i /mnt/11m夜店_H264.vod /mnt/h264/ffmpeg-0.5.1/picture/1m%04d.jpg -vcodec mjpeg -ss 0:1:2 -t 0:0:1
以上将视频 1分02秒 处开始,持续1秒长的视频输出为jpg的序列
-ss 起始时间
-t 持续时间。
如果你要从片头开始,转换前2分钟为图片序列,则是:
ffmpeg -i /mnt/11m夜店_H264.vod /mnt/h264/ffmpeg-0.5.1/picture/1m%04d.jpg -vcodec mjpeg -ss 0:0:0 -t 0:2:0
另外告诉你,输出的图片数量是25/s的
I. 如何使用ffmpeg库把从摄像头传回的bmp图像不断保存成视频
使用ffmpeg编码....
J. 如何用nginx+ffmpeg实现苹果HLS协议
大致叙述的内容包括:
HLS协议的理解
nginx ffmpeg的编译 安装 调试,以及工具的选择 使用 gdb等
nginx模块开发
ffmpeg的开发
重点将集中在 ffmpeg 的开发上。
HLS协议的实现有很多的细节,比如我在实际的开发过程中,就面临将多种不同格式的视频源文件(来源于不同的编码器以及有不同的profile)动态切片输出。而现有能在网上找到的方式基本都是对视频文件做了预先处理,比如用ffmpeg将视频文件先转换成物理存储的mpeg2ts文件,然后用nginx进行动态切片输出。这对开发带来了很大的困难。
如果我们将问题简化的话,即 输入文件为 mp4 (isom512 , 2 channels stereo),那么最简单的实现方式是如下命令行:
avconv -i input_file.mp4 -vcodec -acodec -vbsfh264_mp4toannexb –ss00:00:00–t00:00:10 output_file.ts
然后通过 对 参数 –ss00:00:00 –t00:00:10 的调整,获得多个物理切片,提供给nginx输出。
这里需要提供一个细节,即 处理的性能。 所以在上述的命令行中,仅仅进行了 remux 而没有任何 ecode 和 decode 的操作。
我们要做的,就是将这行命令变成 可供 nginx 调用的 api。
当然,任然可以选择最简单的作法,nginx模块里面调用系统命令。不过这样子,貌似有点儿寒碜吧。呵呵。
所以,我们需要的是这样一个接口:
int segment(byte** output, int *output_len, int start, int end, const char * inputfile)
从命令行到接口方法,第一步就是弄懂ffmpeg如何解析命令行参数并赋值
ffmpeg参数解析
——此文档为《如何用nginx+ffmpeg实现苹果HLS协议》的一个章节。
谢绝对非技术问题的修改,转载请注明来源
继续以命令行
avconv -i input_file.mp4 -vcodec -acodec -vbsfh264_mp4toannexb –ss00:00:00–t00:00:10 output_file.ts
为例说明ffmpeg如何将命令行参数解析处理。
int main(int argc,char**argv)
{
//初始化参数容器
OptionsContext o={0};
//重置参数
reset_options(&o);
//解析参数
parse_options(&o, argc, argv, options,opt_output_file);
}
1.重置参数
staticvoid reset_options(OptionsContext*o)
依次进行了以下步骤:
1.1第一步:释放特殊类型
释放所有的 OPT_SPEC(对应struct SpecifierOpt)和 OPT_STRING (对应 char*)类型的OptionDef
代码如下:
//指向全局变量options
const OptionDef*po= options;
//遍历options
while(po->name){
//dest指针指向当前option对应的OptionContext中的位置
void*dst=(uint8_t*)o+ po->u.off;
//判断是否是SpecifierOpt类型
if(po->flags& OPT_SPEC){
//so指向SpecifierOpt*的首地址
SpecifierOpt **so= dst;
//获得数组长度
int i,*count=(int*)(so+1);
//循环遍历SpecifierOpt*数组
for(i=0; i<*count; i++){
//释放SpecifierOpt的specifier(char*类型)
av_freep(&(*so)[i].specifier);
//如果OPT类型是字符串,释放SpecifierOpt的u.str(char*类型)
if(po->flags& OPT_STRING)
av_freep(&(*so)[i].u.str);
}
//释放SpecifierOpt*指针数组
av_freep(so);
//重置计数器
*count=0;
}
//判断是否是char*类型
elseif(po->flags& OPT_OFFSET&& po->flags& OPT_STRING)
av_freep(dst);
po++;
}
这里需要对OptionContext的内容做一些说明:
OptionContext 包含了在视频编转码过程中需要用到的参数,这些参数来自于命令行的输入。
参数在OptionContext中的存储形式有:
#defineOPT_INT 0x0080
#defineOPT_FLOAT 0x0100
#defineOPT_INT64 0x0400
#defineOPT_TIME 0x10000
#defineOPT_DOUBLE 0x20000
等,详情参见 structOptionDef
在上述代码中,主要循环释放的是OPT_SPEC(对应struct SpecifierOpt)和 OPT_STRING
在OptionContext中,OPT_SPEC类型是成对出现的,如下:
typedefstructOptionsContext{
int64_t start_time;
constchar*format;
SpecifierOpt *codec_names;
int nb_codec_names;
SpecifierOpt *audio_channels;
int nb_audio_channels;
即:
SpecifierOpt *xxx_vars;
int nb_xxx_vars; //nb_读作number_意思是xxx_vars数组的长度
然后我们来分析对SpecifierOpt*数组的遍历:
SpecifierOpt **so= dst;
int i,*count=(int*)(so+1);
for(i=0; i<*count; i++){
这里可以这么理解:
so —指向—> SpecifierOpt *xxx_vars;
so+1—指向—> int nb_xxx_vars;
so+1 的含义:so是个SpecifierOpt指针,指针+1则移动了sizeof(SpecifierOpt)的位置,即跳到nb_xxx_vars的位置。