当前位置:文档之家› ffmpeg使用

ffmpeg使用

ffmpeg使用
ffmpeg使用

ffmpeg 中的Libavformat 和 libavcodec库是访问大多数视频文件格式的一个很好的方法。不幸的是,在开发您自己的程序时,这套库基本上没有提供什么实际的文档可以用来作为参考(至少我没有找到任何文档),并且它的例程也并没有太多的帮助。

这种情况意味着,当我在最近某个项目中需要用到

libavformat/libavcodec 库时,需要作很多试验来搞清楚怎样使用它们。这里是我所学习的--希望我做的这些能够帮助一些人,以免他们重蹈我的覆辙,作同样的试验,遇到同样的错误。你还可以从这里下载一个demo程序。我将要公开的这部分代码需要0.4.8 版本的ffmpeg库中的 libavformat/libavcodec 的支持(我正在写最新版本)。如果您发现以后的版本与我写的程序不能兼容,请告知我。

在这个文档里,我仅仅涉及到如何从文件中读入视频流;音频流使用几乎同样的方法可以工作的很好,不过,我并没有实际使用过它们,所以,我没于办法提供任何示例代码。

或许您会觉得奇怪,为什么需要两个库文件 libavformat 和 libavcodec :许多视频文件格式(AVI就是一个最好的例子)实际上并没有明确指出应该使用哪种编码来解析音频和视频数据;它们只是定义了音频流和视频流(或者,有可能是多个音频视频流)如何被绑定在一个文件里面。这就是为什么有时候,当你打开了一个AVI文件时,你只能听到声音,却不能看到图象--因为你的系统没有安装合适的视频解码器。所以,libavformat 用来处理解析视频文件并将包含在其中的流分离出来,而libavcodec 则处理原始音频和视频流的解码。

打开视频文件:

首先第一件事情--让我们来看看怎样打开一个视频文件并从中得到流。我们要做的第一件事情就是初始化libavformat/libavcodec:

av_register_all();

这一步注册库中含有的所有可用的文件格式和编码器,这样当打开一个文件时,它们才能够自动选择相应的文件格式和编码器。要注意你只需调用一次

av_register_all(),所以,尽可能的在你的初始代码中使用它。如果你愿意,你可以仅仅注册个人的文件格式和编码,不过,通常你不得不这么做却没有什么原因。

下一步,打开文件:

AVFormatContext *pFormatCtx;

const char *filename="myvideo.mpg";

// 打开视频文件

if(av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL)!=0)

handle_error(); // 不能打开此文件

最后三个参数描述了文件格式,缓冲区大小(size)和格式参数;我们通过简单地指明NULL或0告诉 libavformat 去自动探测文件格式并且使用默认的缓冲区大小。请在你的程序中用合适的出错处理函数替换掉handle_error()。

下一步,我们需要取出包含在文件中的流信息:

// 取出流信息

if(av_find_stream_info(pFormatCtx)<0)

handle_error(); // 不能够找到流信息

这一步会用有效的信息把 AVFormatContext 的流域(streams field)填满。作为一个可调试的诊断,我们会将这些信息全盘输出到标准错误输出中,不过你在一个应用程序的产品中并不用这么做:

dump_format(pFormatCtx, 0, filename, false);

就像在引言中提到的那样,我们仅仅处理视频流,而不是音频流。为了让这件事情更容易理解,我们只简单使用我们发现的第一种视频流:

int i, videoStream;

AVCodecContext *pCodecCtx;

// 寻找第一个视频流

videoStream=-1;

for(i=0; inb_streams; i++)

if(pFormatCtx->streams->codec.codec_type==CODEC_TYPE_VIDEO)

{

videoStream=i;

break;

}

if(videoStream==-1)

handle_error(); // Didn't find a video stream

// 得到视频流编码上下文的指针

pCodecCtx=&pFormatCtx->streams[videoStream]->codec;

好了,我们已经得到了一个指向视频流的称之为上下文的指针。但是我们仍然需要找到真正的编码器打开它。

AVCodec *pCodec;

// 寻找视频流的解码器

pCodec=avcodec_find_decoder(pCodecCtx->codec_id);

if(pCodec==NULL)

handle_error(); // 找不到解码器

// 通知解码器我们能够处理截断的bit流--ie,

// bit流帧边界可以在包中

if(pCodec->capabilities & CODEC_CAP_TRUNCATED)

pCodecCtx->flags|=CODEC_FLAG_TRUNCATED;

// 打开解码器

if(avcodec_open(pCodecCtx, pCodec)<0)

handle_error(); // 打不开解码器

(那么什么是“截断bit流”?好的,就像一会我们看到的,视频流中的数据是被分割放入包中的。因为每个视频帧的数据的大小是可变的,那么两帧之间的边界就不一定刚好是包的边界。这里,我们告知解码器我们可以处理bit流。)

存储在 AVCodecContext结构中的一个重要的信息就是视频帧速率。为了允许非整数的帧速率(比如 NTSC的 29.97帧),速率以分数的形式存储,分子在pCodecCtx->frame_rate,分母在 pCodecCtx->frame_rate_base 中。在用不同的视频文件测试库时,我注意到一些编码器(很显然ASF)似乎并不能正确的给予赋值( frame_rate_base 用1代替1000)。下面给出修复补丁:

// 加入这句话来纠正某些编码器产生的帧速错误

if(pCodecCtx->frame_rate>1000 && pCodecCtx->frame_rate_base==1)

pCodecCtx->frame_rate_base=1000;

注意即使将来这个bug解决了,留下这几句话也并没有什么坏处。视频不可能拥有超过1000fps的帧速。

只剩下一件事情要做了:给视频帧分配空间以便存储解码后的图片:

AVFrame *pFrame;

pFrame=avcodec_alloc_frame();

就这样,现在我们开始解码这些视频。

------------------------------------------------------2011.10.09

解码视频帧

就像我前面提到过的,视频文件包含数个音频和视频流,并且他们各个独自被分开存储在固定大小的包里。我们要做的就是使用libavformat依次读取这些包,过滤掉所有那些视频流中我们不感兴趣的部分,并把它们交给 libavcodec 进行解码处理。在做这件事情时,我们要注意这样一个事实,两帧之间的边界也可以在包的中间部分。

听起来很复杂?幸运的是,我们在一个例程中封装了整个过程,它仅仅返回下一帧:

bool GetNextFrame(AVFormatContext *pFormatCtx, AVCodecContext

*pCodecCtx,

int videoStream, AVFrame *pFrame)

{

static AVPacket packet;

static int bytesRemaining=0;

static uint8_t *rawData;

static bool fFirstTime=true;

Int bytesDecoded;

Int frameFinished;

// 我们第一次调用时,将 packet.data 设置为NULL指明它不用释放了 if(fFirstTime)

{

fFirstTime=false;

packet.data=NULL;

}

// 解码直到成功解码完整的一帧

while(true)

{

// 除非解码完毕,否则一直在当前包中工作

while(bytesRemaining > 0)

{

// 解码下一块数据

bytesDecoded=avcodec_decode_video(pCodecCtx, pFrame, &frameFinished, rawData, bytesRemaining);

// 出错了?

if(bytesDecoded < 0)

{

fprintf(stderr, "Error while decoding frame\n"); return false;

}

bytesRemaining-=bytesDecoded;

rawData+=bytesDecoded;

// 我们完成当前帧了吗?接着我们返回

if(frameFinished)

return true;

}

// 读取下一包,跳过所有不属于这个流的包

do

{

// 释放旧的包

if(packet.data!=NULL)

av_free_packet(&packet);

// 读取新的包

if(av_read_packet(pFormatCtx, &packet)<0)

goto loop_exit;

} while(packet.stream_index!=videoStream);

bytesRemaining=packet.size;

rawData=packet.data;

}

loop_exit:

// 解码最后一帧的余下部分

bytesDecoded=avcodec_decode_video(pCodecCtx, pFrame,

&frameFinished,

rawData, bytesRemaining);

// 释放最后一个包

if(packet.data!=NULL)

av_free_packet(&packet);

return frameFinished!=0;

}

现在,我们要做的就是在一个循环中,调用 GetNextFrame () 直到它返回false。还有一处需要注意:大多数编码器返回 YUV 420 格式的图片(一个亮度和两个色度通道,色度通道只占亮度通道空间分辨率的一半(译者注:此句原句为the chrominance channels samples at half the spatial resolution of the luminance channel))。看你打算如何对视频数据处理,或许你打算将它转换至RGB格式。(注意,尽管,如果你只是打算显示视频数据,那大可不必要这么做;查看一下 X11 的 Xvideo 扩展,它可以在硬件层进行 YUV到RGB 转换。)幸运的是, libavcodec 提供给我们了一个转换例程 img_convert ,它可以像转换其他图象进行 YUV 和 RGB之间的转换。这样解码视频的循环就变成这样:

while(GetNextFrame(pFormatCtx, pCodecCtx, videoStream, pFrame))

{

img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24,

(AVPicture*)pFrame,

pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height);

// 处理视频帧(存盘等等)

DoSomethingWithTheImage(pFrameRGB);

}

RGB图象pFrameRGB (AVFrame *类型)的空间分配如下:

AVFrame *pFrameRGB;

int numBytes;

uint8_t *buffer;

// 分配一个AVFrame 结构的空间

pFrameRGB=avcodec_alloc_frame();

if(pFrameRGB==NULL)

handle_error();

// 确认所需缓冲区大小并且分配缓冲区空间

numBytes=avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,

pCodecCtx->height);

buffer=new uint8_t[numBytes];

// 在pFrameRGB中给图象位面赋予合适的缓冲区

avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24,

pCodecCtx->width, pCodecCtx->height);

清除

好了,我们已经处理了我们的视频,现在需要做的就是清除我们自己的东西:// 释放 RGB 图象

delete [] buffer;

av_free(pFrameRGB);

// 释放YUV 帧

av_free(pFrame);

// 关闭解码器(codec)

avcodec_close(pCodecCtx);

// 关闭视频文件

av_close_input_file(pFormatCtx);

完成!

更新(2005年4月26号):有个读者提出:在 Kanotix (一个 Debian 的发行版)上面编译本例程,或者直接在 Debian 上面编译,头文件中avcodec.h 和avformat.h 需要加上前缀“ffmpeg”,就像这样:

#include

#include

同样的, libdts 库在编译程序时也要像下面这样加入进来:

g++ -o avcodec_sample.0.4.9 avcodec_sample.0.4.9.cpp \

-lavformat -lavcodec -ldts -lz

几个月前,我写了一篇有关使用ffmpeg下libavformat 和 libavcodec库的文章。从那以来,我收到过一些评论,并且新的ffmpeg预发行版(0.4.9-pre1) 最近也要出来了,增加了对在视频文件中定位的支持,新的文件格式,和简单的读取视频帧的接口。这些改变不久就会应用到CVS中,不过这次是我第一次在发行版中看到它们。(顺便感谢 Silviu Minut 共享长时间学习CVS版的ffmpeg的成果--他的有关ffmpeg的信息和demo程序在这里。)

在这篇文章里,我仅仅会描述一下以前的版本(0.4.8)和最新版本之间的区别,所以,如果你是采用新的 libavformat / libavcodec ,我建议你读前面的文章。

首先,说说有关编译新发行版吧。用我的编译器( SuSE 上的 gcc 3.3.1 ),在编译源文件 ffv1.c 时会报一个编译器内部的错误。我怀疑这是个精简版的gcc--我在编译 OpenCV 时也遇到了同样的事情--但是不论如何,一个快速的解决方法就是在编译此文件时不要加优化参数。最简单的方法就是作一个make,当编译时遇到编译器错误,进入 libavcodec 子目录(因为这也是 ffv1.c 所在之处),在你的终端中使用gcc命令去编译ffv1.c,粘贴,编辑删除编译器开关(译者注:就是参数)"-O3",然后使用那个命令运行gcc。然后,你可以变回ffmpeg主目录并且重新运行make,这次应该可以编译了。

都有哪些更新?

有那些更新呢?从一个程序员的角度来看,最大的变化就是尽可能的简化了从视频文件中读取个人的视频帧的操作。在ffmpeg 0.4.8 和其早期版本中,在从一个视频文件中的包中用例程av_read_packet()来读取数据时,一个视频帧的信息通常可以包含在几个包里,而另情况更为复杂的是,实际上两帧之间的边界还可以存在于两个包之间。幸亏ffmpeg 0.4.9 引入了新的叫做av_read_frame()的例程,它可以从一个简单的包里返回一个视频帧包含的所有数据。使用

av_read_packet()读取视频数据的老办法仍然支持,但是不赞成使用--我说:摆脱它是可喜的。

这里让我们来看看如何使用新的API来读取视频数据。在我原来的文章中(与0.4.8 API相关),主要的解码循环就像下面这样:

while(GetNextFrame(pFormatCtx, pCodecCtx, videoStream, pFrame))

{

img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24,

(AVPicture*)pFrame,

pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height);

// 处理视频帧(存盘等等)

DoSomethingWithTheImage(pFrameRGB);

}

GetNextFrame() 是个有帮助的例程,它可以处理这样一个过程,这个过程汇编一个完整的视频帧所需要的所有的包。新的API简化了我们在主循环中实际直接读取和解码数据的操作:

while(av_read_frame(pFormatCtx, &packet)>=0)

{

// 这是视频流中的一个包吗?

if(packet.stream_index==videoStream)

{

// 解码视频流

avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,

packet.data, packet.size);

// 我们得到一帧了吗?

if(frameFinished)

{

// 把原始图像转换成 RGB

img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24,

(AVPicture*)pFrame, pCodecCtx->pix_fmt,

pCodecCtx->width,

pCodecCtx->height);

// 处理视频帧(存盘等等)

DoSomethingWithTheImage(pFrameRGB);

}

}

// 释放用av_read_frame分配空间的包

av_free_packet(&packet);

}

看第一眼,似乎看上去变得更为复杂了。但那仅仅是因为这块代码做的都是要隐藏在GetNextFrame()例程中实现的(检查包是否属于视频流,解码帧并释放包)。总的说来,因为我们能够完全排除 GetNextFrame (),事情变得更简单了。

我已经更新了demo程序使用最新的API。简单比较一下行数(老版本222行 Vs 新版本169行)显示出新的API大大的简化了这件事情。

0.4.9 的另一个重要的更新是能够在视频文件中定位一个时间戳。它通过函数av_seek_frame() 来实现,此函数有三个参数:一个指向 AVFormatContext 的

指针,一个流索引和定位时间戳。此函数在给定时间戳以前会去定位第一个关键帧。所有这些都来自于文档。我并没有对av_seek_frame()进行测试,所以这里我并不能够给出任何示例代码。如果你成功的使用av_seek_frame() ,我很高兴听到这个消息。

-------------------------------------------------以下为捕获视频(略)捕获视频(Video4Linux and IEEE1394)

Toru Tamaki 发给我了一些使用 libavformat / libavcodec 库从 Video4Linux 或者 IEEE1394 视频设备源中抓捕视频帧的样例代码。对 Video4Linux,调用

av_open_input_file() 函数应该修改如下:

AVFormatParameters formatParams;

AVInputFormat *iformat;

formatParams.device = "/dev/video0";

formatParams.channel = 0;

formatParams.standard = "ntsc";

formatParams.width = 640;

formatParams.height = 480;

formatParams.frame_rate = 29;

formatParams.frame_rate_base = 1;

filename = "";

iformat = av_find_input_format("video4linux");

av_open_input_file(&ffmpegFormatContext,

filename, iformat, 0, &formatParams);

For IEEE1394, call av_open_input_file() like this:

AVFormatParameters formatParams;

AVInputFormat *iformat;

formatParams.device = "/dev/dv1394";

filename = "";

iformat = av_find_input_format("dv1394");

av_open_input_file(&ffmpegFormatContext,

filename, iformat, 0, &formatParams);

此文来自中华视频网

https://www.doczj.com/doc/f211249005.html,/index.php?option=com_content&task=view&id=2 54&Itemid=5

ffmpeg编译、使用与常见问题

FFMPEG编译、使用与常见问题 一. Linux下FFMPEG的安装与测试 (1) 二. FFMPEG编译中出现的一些问题与解决方法 (4) 三. FFMpeg简介及命令选项参数 (8) 四. FFMPEG与x264的编译 (13) 一.Linux下FFMPEG的安装与测试 a. 先装mp3在linux下的包:lame-3.97.tar.gz; tar -xvzf lame-3.97.tar.gz; cd lame-3.97; ./configure --enable-shared --prefix=/usr/; make; make install; b. 支持Ogg Vorbis: as4自带相应的rpm包,你可以安装一下如下rpm包: libvorbis, libvorbis-devel,libogg, libogg-devel 一般情况下as4都会安装 c. 支持xvid x264,现在最流行的两种高质量的压缩格式 xvid的编译安装 wget https://www.doczj.com/doc/f211249005.html,/downloads/xvidcore-1.1.0.tar.gz tar zvxf xvidcore-1.1.0.tar.gz cd xvidcore-1.1.2/build/generic ./configure --prefix=/usr --enable-shared make make install x264的获取用git: git clone git://https://www.doczj.com/doc/f211249005.html,/x264.git cd x264 ./configure --prefix=/usr --enable-shared make make install3 d. AC3和dts编码的支持

ffmpeg开发指南(使用 libavformat 和 libavcodec)

ffmpeg开发指南(使用libavformat 和libavcodec) ffmpeg开发指南(使用libavformat 和libavcodec) ffmpeg开发指南(使用libavformat 和libavcodec)Ffmpeg 中的Libavformat 和libavcodec库是访问大多数视频文件格式的一个很好的方法。不幸的是,在开发您自己的程序时,这套库基本上没有提供什么实际的文档可以用来作为参考(至少我没有找到任何文档),并且它的例程也并没有太多的帮助。这种情况意味着,当我在最近某个项目中需要用到libavformat/libavcodec 库时,需要作很多试验来搞清楚怎样使用它们。这里是我所学习的--希望我做的这些能够帮助一些人,以免他们重蹈我的覆辙,作同样的试验,遇到同样的错误。你还可以从这里下载一个demo程序。我将要公开的这部分代码需要0.4.8 版本的ffmpeg库中的 libavformat/libavcodec 的支持(我正在写最新版本)。如果您发现以后的版本与我写的程序不能兼容,请告知我。在这个文档里,我仅仅涉及到如何从文件中读入视频流;音频流使用几乎同样的方法可以工作的很好,不过,我并没有实际使用过它们,所以,我没于办法提供任何示例代码。或许您会觉得奇怪,为什么需要两个库文件libavformat 和libavcodec :许多视频文件格式(AVI就是一个最好的例子)

实际上并没有明确指出应该使用哪种编码来解析音频和视 频数据;它们只是定义了音频流和视频流(或者,有可能是多个音频视频流)如何被绑定在一个文件里面。这就是为什么有时候,当你打开了一个AVI文件时,你只能听到声音,却不能看到图象--因为你的系统没有安装合适的视频解 码器。所以,libavformat 用来处理解析视频文件并将包含在其中的流分离出来,而libavcodec 则处理原始音频和视频流的解码。打开视频文件: 首先第一件事情--让我们来看看怎样打开一个视频文件 并从中得到流。我们要做的第一件事情就是初始化libavformat/libavcodec:av_register_all(); 这一步注册库中含有的所有可用的文件格式和编码器,这样当打开一个文件时,它们才能够自动选择相应的文件格式和编码器。要注意你只需调用一次av_register_all(),所以,尽可能的在你的初始代码中使用它。如果你愿意,你可以仅仅注册个人的文件格式和编码,不过,通常你不得不这么做却没有什么原因。下一步,打开文件: AVFormatContext *pFormatCtx;

视频直播系统设计与实现

龙源期刊网 https://www.doczj.com/doc/f211249005.html, 视频直播系统设计与实现 作者:高春雷 来源:《科技风》2016年第18期 摘要:本文研究了视频直播系统的设计,并基于ffmpeg、vlc和EasyDarwin开源软件进 行了二次开发,简单而有效地实现了该设计,具有较强的工程参考价值。 关键词:视频直播系统;ffmpeg;vlc;EasyDarwin 随着社会的发展,视频直播系统或者监控系统在场馆、学校、车载等场景中的应用越来越广泛。例如很多的幼儿园开始把监控系统作为辅助设备,也是幼儿园智能化管理的新趋势。本文研究了一种易于实现的视频直播系统。 一、系统设计 本系统主要由视频采集装置、推流服务器、流媒体服务器和视频监控设备构成。视频采集装置主要为摄像头。由于整个系统需要在不同的区域进行布防和监控,以幼儿园为例,其主要公共场所包括教室、活动区和出入口等,针对不同区域的实际情况安置不同类型的摄像机,公共活动区适合安装可调视角的球机,而楼道等可安装枪机。流媒体是指以流的方式在网络中传送视频、音频的媒体形式。流媒体服务器以TP/RTSP、MMS、RTMP等流式协议把视频文件传输到视频监控设备;流媒体服务器也可从视频采集装置接收实时的视频流,再以流式协议直播给视频监控设备。对于某些应用场景视频采集设备处于内网,不能直接和处于外网的流媒体服务器进行通讯。此时就需要推流服务器将内网设备所采集的视频推流到流媒体服务器。视频监控中设备可对所需区域进行有效的监控,可以包括电视墙显示系统等。此外,视频监控中心可扩展视频截屏录像、用户权限等功能。 二、系统实现 基于上述设计思路,本文采用开源软件快速实现简单的RTSP直播系统。系统采用ffmpeg 作为推流服务器将视频采集装置的视频流推送到流媒体服务器,EasyDarwin作为流媒体服务 器转发ffmpeg推送过来的视频流。视频监控设备的客户端采用VLC播放。实现过程如下: 1)部署EasyDarwin流媒体服务器。EasyDarwin基于Apple开源项目开发、优化的流媒体服务器,支持RTSP点播、直播(推拉模式)、HLS直播等功能。编译好EasyDarwin后需要在easydarwin.xml文件中对其进行设置。本文实验过程中将EasyDarwin流媒体服务器部署在127.0.0.1,端口:554。在控制台中启动服务,启动命令为:EasyDarwin.exe -d - c ./easydarwin.xml。 2)ffmpeg推送视频到EasyDarwin。FFmpeg可以用来记录、转换数字音频、视频,并能将其转化为流。FFmpeg开发于Linux平台,但它可在Windows、Mac OS X等操作系统环境中

视频解码中用到的ffmpeg交叉编译技巧

视频解码中用到的ffmpeg交叉编译技巧 一、简介 FFmpeg是一个集录制,转换,音/视频编码解码功能为一体的完整的开源解决方案。FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。 由于ffmpeg是基于linux开发的,源代码和windows下最常见的visual studio提供的c/c++编译器不兼容,因此不能直接使用msvc++编译,想要使用ffmpeg,需要在windows下配置一个类似Linux 的编译环境,并将ffmpeg编译为二进制库以后,再利用其进行进一步开发。 目前,windows下可直接使用的最新版本是由ffmpeg工程组,于2008年4月份发布的ffmpeg full sdk v3.2。该sdk尽可能的集成了更多的编解码器。 在应用中,使用该开发包存在2个缺陷,第一,该sdk编译基于ffmpeg r12790,编解码效率上,当前已经有了较大的提升;第二,该开发包包含了很多不需要的编解码器,需要尽可能减少开发包的体积及关联的库的个数。基于以上需求,需要自己编译出windows下可用动态库及静态库。 使用到的库文件有4个,libavcodec,libavformat,libavutil,libswscale,其中库 libavcodec,libavformat用于对媒体文件进行处理,如编解码;libavutil是一个通用的小型函数库,该库中实现了CRC校验码的产生,128位整数数学,最大公约数,整数开方,整数取对数,内存分配,大端小端格式的转换等功能,libswscale主要用于图像格式转换及缩放。因效率的需要,我们选择了 ffmpeg-mt版本,同时通过配置编译尽量减少相关文件的体积。 网上类似编译过程说明较多,但实际编译过程中碰到一些问题,这些问题的解决花费了不少时间,本文档对这一过程进行记录,以便后续维护及学习。 二、编译环境搭建 windows下ffmpeg编译环境有多种可选择方案。这里我们使用MinGW+MSYS。 1.下载mingw+msys并安装 https://www.doczj.com/doc/f211249005.html,/projects/mingw/ mingw,默认安装,在choose components时选择g++ compiler及MinGW Make Msys,默认安装, Do you wish to continue with the post install【yn】,y! Do you have mingw installed?【yn】,y Where is your mingw installation? C:/mingw

ffmpeg之参数详解29

本文讲述参数详解 1. ffmpeg.exe -i F:\闪客之家\闪客之 歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\11.flv ffmpe g -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\tes t.flv 使用-ss参数作用(time_off set the start time offset),可以从指定时间点开始转换任务。如: 转换文件格式的同时抓缩微图: ffmpeg -i "test.avi " -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg ' 对已有flv抓图: ffmpeg -i "test.flv " -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg ' -ss后跟的时间单位为秒Ffmpeg转换命令 ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 17 6x144 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp 或者 ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp ffmpeg参数设定解说 -bitexact 使用标准比特率 -vcodec xvid 使用xvid压缩 -s 320x240 指定分辨率 -r 29.97 桢速率(可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97) 画面部分,选其一 -b <比特率> 指定压缩比特率,似乎ffmpeg是自动VBR的,指定了就大概是平均比特率,比如768,1500这样的就是原来默认项目中有的 -qscale <数值> 以<数值> 质量为基础的VBR,取值0.01-255,约小质量越好 -qmin <数值> 设定最小质量,与-qmax(设定最大质量)共用,比如-qmin 10 -qmax 31 -sameq 使用和源同样的质量声音部分 -acodec aac 设定声音编码 -ac <数值> 设定声道数,1就是单声道,2就是立体声,转换单声道的TVrip可以用1(节省一半容量),高品质的DVDrip就可以用2 -ar <采样率> 设定声音采样率,PSP只认24000 -ab <比特率> 设定声音比特率,前面-ac设为立体声时要以一半比特率来设置,比如192kbps的就设成96,转换君默认比特率都较小,要听到较高品质声音的话建议设到160kbps(80)以上 -vol <百分比> 设定音量,某些DVDrip的AC3轨音量极小,转换时可以用这个提高音量,比如200就是原来的2倍这样,要得到一个高画质音质低容量的MP4的话,首先画面最好不要用固定比特率,而用VBR参数让程序自己去判断,而音质参数可以在原来的基础上提升一点,听起来要舒服很多,也不会太大(看情况调整例子:ffmpeg -y -i "1.avi " -title "Test

课题_基于VLC的播放器开发

VLC的C++封装 因为工作需要,研究了一段时间的播放器开发,如果从头开始做,可以学习下FFmpeg,很多播放器都是基于FFmpeg 开发的,但是这样工作量和难度都比较大,如果想很快能拿出一个播放器来用的,可以研究下开源的播放器,参考下射手播放器作者的文章:媒体播放器三大底层架构。 对比下现有的主流播放器:媒体播放器列表,VLC是在各个方面都表现很突出的一款。VLC 是一款免费、自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,DVD、音频CD、VCD 以及各类流媒体协议。 VLC是在Linux下用C语言开发的,如果想用其接口,可以将C的接口用C++封装一下,这样使用方便的很多,在CodeProject上搜到一个C++的封装,在他的基础上加了点函数,使用了最新的VLC版本(2.1.0),用MFC做成了如下的样子: 主要实现功能: 1、打开:加载音视频文件(同时开始播放)。 2、播放/暂停:播放暂停文件播放。

3、停止:停止播放。 4、快进:快进5秒。 5、快退:后退5秒。 6、音量:音量调节(0--100)。 7、播放进度控制:使用进度条控制。 基本上实现的功能和CodeProject上那个demo差不多,我修改后可以播放网络流媒体,将加载的文件名修改为流媒体地址就可以了。播放上面双语字幕的文件时貌似不能正常显示中文,VLC播放器本身也有这个问题,不过可以设置修改。其他更多的功能还有待研究,VLC的接口注释都很详细,按照它的接口应该可以实现更多的功能,有问题也可以直接在VideoLan的论坛上发帖问。 主要问题:运行时需要依赖的VLC的plugins目录里的DLL(66M大小)太多,有一些DLL是用不到的,如果封装成ActiveX给Web下调用,打包的cab的会比较大,需要裁剪。。。 VLC的C#封装 如果播放器客户端使用的是.Net开发的,如何使用VLC?可以有以下几种方法: 1、ActiveX控件:可以将上述MFC的播放器封装成ActiveX控件提供给C#调用。鉴于业余时间有限,现在这部分工作还没做。 2、使用.Net的PInvoke技术将VLC的C接口封装成C#接口,这方面网上的文章也很多.

用ffmpeg转换视频格式

用?mpeg转换视频格式deanraccoon@https://www.doczj.com/doc/f211249005.html, 2011年5月9日 目录

1实用?fmpeg命令 转自 https://www.doczj.com/doc/f211249005.html,/blog/19-ffmpeg-commands-for-all-needs 转自 https://www.doczj.com/doc/f211249005.html,/spip.php?article36 1.1查看视频文件信息 ffmpeg-i video.avi 1.2N个图片转化视频 ffmpeg-f image2-i image%d.jpg video.mpg 这个命令把当前文件夹下所有图片转成视频文件 1.3视频转化图片 ffmpeg video.mpg image%d.jpg 图片格式包括:PGM,PPM,PAM,PGMYUV,JPEG,GIF,PNG,TIFF,SGI 1.4视频转为iphone可播放的格式 ffmpeg source_video.avi input-acodec aac-ab128kb-vcodec mpeg4-b1200kb-mbd2-flags +4mv+trell-aic2-cmp2-subcmp2-s320x180-title X final_video.mp4 参数含义: ?源文件:source video.avi ?音频编码:aac ?音频的比特率:128kb/s ?视频编码:mpeg4 ?视频比特率:1200kb/s ?视频大小:320px par180px ?结果文件:?nal video.mp4 1.5视频转换成psp格式 ffmpeg-i source_video.avi-b300-s320x240-vcodec xvid-ab32-ar24000-acodec aac final_video.mp4参数含义: ?源文件:source video.avi

基于Qt+ffmpeg的跨平台安卓实时投屏软件的开发与设计

一种高分辨率实时屏幕共享硬件加速系统 摘要:建立一个支持超高分辨率(如4k)的交互式屏幕共享系统具有挑战性,因为延迟和帧速率在用户体验中扮演着重要角色。屏幕帧需要有效地压缩,而不需要消耗大量的计算资源。提出了一种实时屏幕共享的硬件加速系统,该系统通过利用连续屏幕帧间的内容冗余来减少编码工作量。提出了一种采用不同输入大小的H.264高级视频编码(H.264/AVC)的多个编码器,通过为更新的屏幕内容选择合适的编码方式,节省了编码时间。提出了一种优化的元数据处理方法。帧内的小而远的更新可以分割成独立的帧,以便进行更有效的压缩,这也有利于交互延迟。在评估中,在一般的屏幕共享场景中,该系统比一般的单个编解码器的编码时间更短。对延迟的测量表明,4K分辨率屏幕共享的端到端延迟仅为17-25ms,这使得该系统适合于本地有线和无线连接中的各种应用。 关键词:4K分辨率,硬件-加速编码,低延迟屏幕共享

目录 第1章绪论 (1) 1.1研究背景和意义 (1) 1.1.1 系统的开发背景分析 (1) 1.1.2 本课题的研究意义 (1) 1.2 国内外的研究 (2) 1.2.1 国内研究 (2) 1.2.2 国外研究 (2) 1.3课题研究方法和内容 (2) 1.3.1 研究方法和关键技术 (2) 第2章开发工具及安装 (4) 2.1 Qt (4) 2.1.1 Qt简介 (4) 2.1.2 Qt的安装 (4) 2.2 Visual Studio 2017 (6) 2.2.1 Visual Studio 2017的安装和环境配置 (6) 第3章系统功能需求 (10) 3.1 系统总体功能需求 (10) 3.2 系统总体功能描述 (10) 3.2.1.实时显示Android设备屏幕 (10) 3.2.2实时键鼠控制Android设备 (11) 3.2.3屏幕录制 (11) 3.2.4无线连接 (11) 3.2.5全屏显示 (11) 3.2.6常用功能按键 (11) 3.2.7传输文件/apk (11) 3.2.8后台录制 (11) 3.2.9复制粘贴 (12) 3.2.10在计算机和设备之间双向同步剪贴板 (12) 3.3 用户子系统的功能需求 (12) 第4章系统设计 (13) 4.1 系统总体设计 (13) 第5章 UML建模 (14) 5.1 用例图 (14) 5.1.1 用户用例图 (14) 5.2 用例规约表 (14) 5.2.1 启动服务用例规约表 (14) 5.2.2 相关配置用例规约表 (15) 5.2.3 无线连接用例规约表 (16) 5.3 类图 (18) 5.3.1 系统实现类图 (18) 5.4 顺序图 (19)

ffmpeg用法

ffmpeg.exe -i F:\闪客之家\闪客之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\11.flv ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 使用-ss参数作用(time_off set the start time offset),可以从指定时间点开始转换任务。如: 转换文件格式的同时抓缩微图: ffmpeg -i "test.avi " -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg ' 对已有flv抓图: ffmpeg -i "test.flv " -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg ' -ss后跟的时间单位为秒Ffmpeg转换命令 ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x1 44 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp 或者 ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp ffmpeg参数设定解说 -bitexact 使用标准比特率 -vcodec xvid 使用xvid压缩 -s 320x240 指定分辨率 -r 29.97 桢速率(可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97) 画面部分,选其一 -b <比特率> 指定压缩比特率,似乎ffmpeg是自动VBR的,指定了就大概是平均比特率,比如768,1500这样的就是原来默认项目中有的 -qscale <数值> 以<数值> 质量为基础的VBR,取值0.01-255,约小质量越好 -qmin <数值> 设定最小质量,与-qmax(设定最大质量)共用,比如-qmin 10 -qmax 31 -sameq 使用和源同样的质量声音部分 -acodec aac 设定声音编码 -ac <数值> 设定声道数,1就是单声道,2就是立体声,转换单声道的TV rip可以用1(节省一半容量),高品质的DVDrip就可以用2 -ar <采样率> 设定声音采样率,PSP只认24000 -ab <比特率> 设定声音比特率,前面-ac设为立体声时要以一半比特率来设置,比如192kbps的就设成96,转换君默认比特率都较小,要听到较高品质声音的话建议设到160kbps (80)以上 -vol <百分比> 设定音量,某些DVDrip的AC3轨音量极小,转换时可以用这个提高音量,比如200就是原来的2倍这样,要得到一个高画质音质低容量的MP4的话,首先画面最好不要用固定比特率,而用VBR参数让程序自己去判断,而音质参数可以在原来的基础上提升一点,听起来要舒服很多,也不会太大(看情况调整例子:ffmpeg -y -i "1.avi " -title "Test " -vcodec xvid -s 368x208 -r 29.97 -b 1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol 200 -f psp -muxvb 768 "1.*** "

ffmpeg主要数据结构和函数

FFMpeg 中比较重要的函数以及数据结构如下:1. 数据结构: (1) AVFormatContext (2) AVOutputFormat (3) AVInputFormat (4) AVCodecContext (5) AVCodec (6) AVFrame (7) AVPacket (8) AVPicture (9) AVStream 2. 初始化函数: (1) av_register_all() (2) avcodec_open() (3) avcodec_close() (4) av_open_input_file() (5) av_find_input_format() (6) av_find_stream_info() (7) av_close_input_file() 3. 音视频编解码函数: (1) avcodec_find_decoder() (2) avcodec_alloc_frame() (3) avpicture_get_size() (4) avpicture_fill() (5) img_convert() (6) avcodec_alloc_context() (7) avcodec_decode_video() (8) av_free_packet() (9) av_free() 4. 文件操作:

(1) avnew_steam() (2) av_read_frame() (3) av_write_frame() (4) dump_format() 5. 其他函数: (1) avpicture_deinterlace() (2) ImgReSampleContext() 以下就根据,以上数据结构及函数在ffmpeg测试代码output_example.c中出现的前后顺进行分析。 交待完毕进入正题。 一.FFMpeg 中的数据结构: I. AVFormatContext 一般在使用ffmpeg sdk的代码中AVFormatContext是一个贯穿始终的数据结构,很多函数都要用到它作为参数。FFmpeg代码中对这个数据结构的注释是:format I/O context 此结构包含了一个视频流的格式内容。其中存有了AVInputFormat(or AVOutputFormat同一时间AVFormatContext内只能存在其中一个),和AVStream、AVPacket这几个重要的数据结构以及一些其他的相关信息,比如title,author,copyright 等。还有一些可能在编解码中会用到的信息,诸如:duration, file_size, bit_rate等。参考avformat.h头文件。 Useage: 声明: AVFormatContext *oc; (1) 初始化:由于AVFormatConext结构包含许多信息因此初始化过程是分步完成,而且有些变量如果没有值可用,也可不初始化。但是由于一般声明都是用指针因此一个分配内存过程不可少: oc = av_alloc_format_context(); (2) 结构中的AVInputFormat*(或AVOutputFormat*)是一定要初始化的,基本上这是编译码要使用什么codec的依据所在: oc->oformat = fmt; or oc->iformat = fmt; (3) 其中AVOutputFormat* fmt或AVInputFormat* fmt。(AVInputFormat and AVOutputForm at的初始化在后面介绍。随后在参考代码output_example.c中有一行: snprintf(oc-filename, sizeof(oc->filename), “%s”, filename); (4) 还不是十分清楚有什么作用,估计是先要在输出文件中写一些头信息。 在完成以上步骤後,(初始化完毕AVInputFormat*(或AVOutputFormat*)以及AVFormatContext)接下来就是要利用oc初始化本节开始讲到的AVFormatContext中的第二个重要结构。AVStream(假设已

ffmpeg开发指南(经典)

ffmpeg开发指南(使用 libavformat 和 libavcodec) Ffmpeg 中的Libavformat和 libavcodec库是访问大多数视频文件格式的一个很好的方法。不幸的是,在开发您自己的程序时,这套库基本上没有提供什么实际的文档可以用来作为参考(至少我没有找到任何文档),并且它的例程也并没有太多的帮助。 这种情况意味着,当我在最近某个项目中需要用到 libavformat/libavcodec 库时,需要作很多试验来搞清楚怎样使用它们。这里是我所学习的--希望我做的这些能够帮助一些人,以免他们重蹈我的覆辙,作同样的试验,遇到同样的错误。你还可以从这里下载一个demo程序。我将要公开的这部分代码需要0.4.8 版本的ffmpeg库中的 libavformat/libavcodec 的支持(我正在写最新版本)。如果您发现以后的版本与我写的程序不能兼容,请告知我。 在这个文档里,我仅仅涉及到如何从文件中读入视频流;音频流使用几乎同样的方法可以工作的很好,不过,我并没有实际使用过它们,所以,我没于办法提供任何示例代码。 或许您会觉得奇怪,为什么需要两个库文件 libavformat 和 libavcodec :许多视频文件格式(AVI就是一个最好的例子)实际上并没有明确指出应该使用哪种编码来解析音频和视频数据;它们只是定义了音频流和视频流(或者,有可能是多个音频视频流)如何被绑定在一个文件里面。这就是为什么有时候,当你打开了一个AVI文件时,你只能听到声音,却不能看到图象--因为你的系统没有安装合适的视频解码器。所以, libavformat 用来处理解析视频文件并将包含在其中的流分离出来,而libavcodec 则处理原始音频和视频流的解码。 1打开视频文件: 首先第一件事情--让我们来看看怎样打开一个视频文件并从中得到流。我们要做的第一件事情就是初始化libavformat/libavcodec: av_register_all(); 这一步注册库中含有的所有可用的文件格式和编码器,这样当打开一个文件时,它们才能够自动选择相应的文件格式和编码器。要注意你只需调用一次 av_register_all(),所以,尽可能的在你的初始代码中使用它。如果你愿意,你可以仅仅注册个人的文件格式和编码,不过,通常你不得不这么做却没有什么原因。 2下一步,打开文件: AVFormatContext *pFormatCtx; const char *filename="myvideo.mpg"; // 打开视频文件 if(av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL)!=0) handle_error(); // 不能打开此文件

ffmpeg命令详解

ffmpeg命令详解 一、ffmpeg命令详解 ffmpeg非常强大,轻松几条命令就可以完成你的工作。 把darkdoor.[001-100].jpg序列帧和001.mp3音频文件利用mpeg4编码方式合成视频文件darkdoor.avi: $ ffmpeg -i 001.mp3 -i darkdoor.%3d.jpg -s 1024x768 -author skypp -vcodec mpeg4 darkdoor.avi ffmpeg还支持mov格式: $ ffmpeg -i darkdoor.%3d.jpg darkdoor.mov 要查看你的ffmpeg支持哪些格式,可以用如下命令: $ ffmpeg -formats | less 还可以把视频文件导出成jpg序列帧: $ ffmpeg -i bc-cinematic-en.avi example.%d.jpg debian下安装ffmpeg很简单: #apt-get install ffmpeg ###################################### 下面是转来的使用说明,慢慢研究吧,嘿嘿 ###################################### ffmpeg使用语法 ffmpeg使用语法: ffmpeg [[options][`-i' input_file]]... {[options] output_file}... 如果没有输入文件,那么视音频捕捉就会起作用。 作为通用的规则,选项一般用于下一个特定的文件。如果你给–b 64选项,改选会设置下一个视频速率。对于原始输入文件,格式选项可能是需要的。 缺省情况下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。3.选项 a) 通用选项

ffmpeg完全安装

Linux下ffmpeg的完整安装: 首先安装各种解码器 1.安装MP3音频编码器lame lame-398-1.tar.gz Url:https://www.doczj.com/doc/f211249005.html,/project/showfiles.php?group_id=290&package_id=309 tar zxvf lame-398-1.tar.gz cd lame-398-1 ./configure --enable-shared --prefix=/usr make & make install 2.安装汇编优化器yasm,可能安装x264要用到 https://www.doczj.com/doc/f211249005.html,/projects/yasm/releases/ tar zxvf yasm-1.3.0.tar.gz cd yasm-1.3.0 ./configure --enable-shared --prefix=/usr make & make install 3.安装ogg库,libogg Url:https://www.doczj.com/doc/f211249005.html,/releases/ogg/libogg-1.3.2.tar.gz tar zxvf libogg-1.3.2.tar.gz cd libogg-1.3.2 ./configure --enable-shared --prefix=/usr make & make install 4.安装vorbis编解码器,libvorbis Url:https://www.doczj.com/doc/f211249005.html,/releases/vorbis/libvorbis-1.3.3.tar.gz tar zxvf libvorbis-1.3.3.tar.gz cd libvorbis-1.3.3 ./configure --enable-shared --prefix=/usr make & make install /*********************************这里是分隔符**************************/ 出错提示: *** Could not run Ogg test program, checking why... *** The test program compiled, but did not run. This usually means *** that the run-time linker is not finding Ogg or finding the wrong *** version of Ogg. If it is not finding Ogg, you'll need to set your *** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point *** to the installed location Also, make sure you have run ldconfig if that *** is required on your system *** *** If you have an old version installed, it is best to remove it, although *** you may also be able to get things to work by modifying LD_LIBRARY_PATH configure: error: must have Ogg installed! 解决: # vi /etc/ld.so.conf

linux下安装FFMPEG全纪录

怎样安装ffmpeg? 1,cd /usr/local/src 下载最新版本的ffmpeg: svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg 2,cd ffmpeg ./configure make && make install 以上是安装不带任何解码库的ffmpeg。 使用ffmpeg命令进行测试安装是否成功。例如: ffmpeg --help II,要加入则在./configure后面加上选项,前提是已经编译安装了这种编码库。 [root@ip-208-109-221-163 ffmpeg]# ffmpeg --help ffmpeg: error while loading shared libraries: libavdevice.so.52: cannot open shared object file: No such file or directory 找不到libavdevice.so.52库。 解决方案:(成功解决问题的方案) 首先到/usr/local/lib/目录下去查看是否有libavdevice.so.52,然后设置环境变量:export LD_LIBRARY_PA TH=/usr/local/lib/ 注意:这种方案经验证,关闭终端再打开终端,这个环境变量就失效了,也就是说只对当前终端有效

最终解决方案: //********************************************** 因为找不到库文件。编辑/etc/ld.so.conf,加入一行: /usr/local/lib 执行ldconfig命令即可。 //************************************** 然后添加软链接。 ln -s /usr/local/lib/libavdevice.so.52 /usr/lib/libavdevice.so.52 安装成功后,测试: ffmpe g -i /home/admn/public_html/ConvertVedioT est/rjmj.mpeg -ab 56 -ar 22050 -b 500 -r 15 -qscale 4 -s 640*480 rjmj.flv 转换成功。 等等。 ln -s /usr/local/lib/libavformat.so.50 /usr/lib/libavformat.so.50 ln -s /usr/local/lib/libavcodec.so.51 /usr/lib/libavcodec.so.51 ln -s /usr/local/lib/libavutil.so.49 /usr/lib/libavutil.so.49 ln -s /usr/local/lib/libmp3lame.so.0 /usr/lib/libmp3lame.so.0 ln -s /usr/local/lib/libavformat.so.51 /usr/lib/libavformat.so.51

ffmpeg绝对编译指南

编译集成ffmpeg指南 ###环境配置(centos/msys2) yum install autoconf automake cmake freetype-devel openssl-devel gcc gcc-c++ git libtool make mercurial nasm pkgconfig zlib-devel ###参考地址 https://www.doczj.com/doc/f211249005.html,/uid-23069658-id-4018842.html https://www.doczj.com/doc/f211249005.html,/wanglx_/article/details/50786307 ###2.1 Yasm(git clone --depth 1 git://https://www.doczj.com/doc/f211249005.html,/yasm/yasm.git) 汇编器,编译x264,ffmpeg会用到 autoreconf -fiv ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" make make install make distclean ###libx264 (git clone --depth 1 git://https://www.doczj.com/doc/f211249005.html,/x264) H264编码库,开启需要在FFmpeg的configure中指定:--enable-gpl 和--enable-libx264 ./configure --prefix="$HOME/ffmpeg_build" --enable-static --enable-shared make make install make distclean ###初始pkgconfig(必须) export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ###libx265(hg clone https://https://www.doczj.com/doc/f211249005.html,/multicoreware/x265) H265编码库,开启需要在FFmpeg的configure中指定:--enable-gpl 和--enable-libx265 cd 到/x265/build/msys目录下执行对应.sh文件,稍后在cmake弹框中编辑安装目录 make make install ###libfdk_aac(git clone --depth 1 git://https://www.doczj.com/doc/f211249005.html,/p/opencore-amr/fdk-aac) AAC编码库,开启需要在FFmpeg的configure中指定:--enable-libfdk-aac autoreconf -fiv ./configure --prefix="$HOME/ffmpeg_build" --enable-shared --enable-static SPEEXDSP_CFLAGS="$HOME/ffmpeg_build/include" SPEEXDSP_LIBS="$HOME/ffmpeg_build/lib" OGG_CFLAGS="$HOME/ffmpeg_build/include" OGG_LIBS="$HOME/ffmpeg_build/lib" make make install make distclean

ffmpeg 常用命令汇总

ffmpeg 常用命令汇总 2016-06-15 09:11 17116人阅读评论(0)收藏举报 (经常用到ffmpeg 做一些视频数据的处理转换等,用来做测试,今天总结了一下, 参考了网上部分朋友的经验,一起在这里汇总了一下,有需要的朋友可以收藏测试 一下,有问题欢迎在下面回帖交流,谢谢;by ternence.hsu) 1、ffmpeg使用语法 命令格式: ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件] ffmpeg [[options][`-i' input_file]]... {[options] output_file}... 1、参数选项: (1) -an: 去掉音频 (2) -acodec: 音频选项,一般后面加copy表示拷贝 (3) -vcodec:视频选项,一般后面加copy表示拷贝 2、格式: (1) h264: 表示输出的是h264的视频裸流 (2) mp4: 表示输出的是mp4的视频 (3)mpegts: 表示ts视频流 如果没有输入文件,那么视音频捕捉(只在Linux下有效,因为Linux下把音视频设备当作文件句柄选项一般用于下一个特定的文件。如果你给–b 64选项,改选会设置下一个视频速率。对于原始输入下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。(by ternence.hsu) 2、视频转换 H264视频转ts视频流 ffmpeg -i test.h264 -vcodec copy -f mpegts test.ts H264视频转mp4 ffmpeg -i test.h264 -vcodec copy -f mp4 test.mp4 ts视频转mp4 ffmpeg -i test.ts -acodec copy -vcodec copy -f mp4 test.mp4 mp4视频转flv ffmpeg -i test.mp4 -acodec copy -vcodec copy -f flv test.flv

相关主题
文本预览
相关文档 最新文档