您当前的位置: 首页 > 

顺其自然~

暂无认证

  • 1浏览

    0关注

    1317博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ffmpeg是什么

顺其自然~ 发布时间:2021-08-16 11:21:09 ,浏览量:1

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"(快速前进,快进,快转)。FFmpeg编码库可以使用GPU加速。

开发建议使用ffmpeg-4.4.1,稳定,网上例子多。下载地址:Builds - CODEX FFMPEG @ gyan.dev

功能

多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。

视频采集功能

ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。

ffmpeg在Linux下的视频采集

在Linux平台上,ffmpeg对V4L2的视频设备提供了很好的支持,如:

./ffmpeg -t 10 -f video4linux2 -s 176*144 -r 8 -i /dev/video0 -vcodec h263 -f rtp rtp://192.168.1.105:5060 > /tmp/ffmpeg.sdp

以上命令表示:采集10秒钟视频,对video4linux2视频设备进行采集(放在输入之前是对输入文件有效),采集QCIF(176*144)的视频,每秒8帧,视频设备为/dev/video0,视频编码为H263,输出格式为RTP(放在输入之后,输出之前是对输出文件有效),后面定义了IP地址及端口,将该码流所对应的SDP文件重定向到/tmp/ffmpeg.sdp中,将此SDP文件上传到流媒体服务器就可以实现直播了。

ffmpeg在windows下的视频采集

在windows下关于ffmpeg视频采集的资料非常少,但是ffmpeg还是支持windows下视频采集的。ffmpeg支持windows下video for windows(VFW)设备的视频采集,不过VFW设备已经过时,正在被WDM的视频设备所取代,但是ffmpeg还没有支持WDM的计划,不过好像有将WDM转为VFW的工具,因此ffmpeg还是可以在windows下进行视频采集的。

视频格式转换功能

ffmpeg视频转换功能。视频格式转换,比如可以将多种视频格式转换为flv格式,可不是视频信号转换 。

ffmpeg可以轻易地实现多种视频格式之间的相互转换(wma,rm,avi,mod等),例如可以将摄录下的视频avi等转成视频网站所采用的flv格式。

视频截图功能

对于选定的视频,截取指定时间的缩略图。视频抓图,获取静态图和动态图,不提倡抓gif文件;因为抓出的gif文件大而播放不流畅。

给视频加水印功能

使用ffmpeg 视频添加水印(logo)。

项目组成

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了领先的音/视频编码库libavcodec等。(av:audio video)

libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;

libavcodec:用于各种类型声音/图像编解码;

libavutil:包含一些公共的工具函数;

libswscale:用于视频场景比例缩放、色彩映射转换;

libpostproc:用于后期效果处理;

ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;

ffsever:一个 HTTP 多媒体即时广播串流服务器;

ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示;

命令集

F:\ffmpeg\bin>ffmpeg -h ffmpeg version 2022-03-07-git-e645a1ddb9-full_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers   built with gcc 11.2.0 (Rev7, Built by MSYS2 project)   configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint   libavutil      57. 22.100 / 57. 22.100   libavcodec     59. 22.100 / 59. 22.100   libavformat    59. 17.103 / 59. 17.103   libavdevice    59.  5.100 / 59.  5.100   libavfilter     8. 27.100 /  8. 27.100   libswscale      6.  5.100 /  6.  5.100   libswresample   4.  4.100 /  4.  4.100   libpostproc    56.  4.100 / 56.  4.100 Hyper fast Audio and Video encoder usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Getting help:     -h      -- print basic options     -h long -- print more options     -h full -- print all options (including all format and codec specific options, very long)     -h type=name -- print all options for the named decoder/encoder/demuxer/muxer/filter/bsf/protocol     See man ffmpeg for detailed description of the options.

Print help / information / capabilities: -L                  show license -h topic            show help -? topic            show help -help topic         show help --help topic        show help -version            show version -buildconf          show build configuration-formats            show available formats  展示可用格式 -muxers             show available muxers -demuxers           show available demuxers-devices            show available devices  展示可用设备 -codecs             show available codecs  展示可用编解码器 -decoders           show available decoders -encoders           show available encoders -bsfs               show available bit stream filters -protocols          show available protocols -filters            show available filters -pix_fmts           show available pixel formats -layouts            show standard channel layouts -sample_fmts        show available audio sample formats -dispositions       show available stream dispositions -colors             show available color names -sources device     list sources of the input device -sinks device       list sinks of the output device -hwaccels           show available HW acceleration methods

Global options (affect whole program instead of just one file):全局选项 -loglevel loglevel  set logging level -v loglevel         set logging level -report             generate a report -max_alloc bytes    set maximum size of a single allocated block-y                  overwrite output files -n                  never overwrite output files -ignore_unknown     Ignore unknown stream types -filter_threads     number of non-complex filter threads -filter_complex_threads  number of threads for -filter_complex -stats              print progress report during encoding -max_error_rate maximum error rate  ratio of decoding errors (0.0: no errors, 1.0: 100% errors) above which ffmpeg returns an error instead of success. -vol volume         change audio volume (256=normal)

Per-file main options:单个文件选项-f fmt              force format  指定格式(输入格式或输出格式) -c codec            codec name(文件编码,音视频容器编码) -codec codec        codec name -pre preset         preset name -map_metadata outfile[,metadata]:infile[,metadata]  set metadata information of outfile from infile -t duration         record or transcode "duration" seconds of audio/video -to time_stop       record or transcode stop time -fs limit_size      set the limit file size in bytes -ss time_off        set the start time offset -sseof time_off     set the start time offset relative to EOF -seek_timestamp     enable/disable seeking by timestamp with -ss -timestamp time     set the recording timestamp ('now' to set the current time) -metadata string=string  add metadata -program title=string:st=number...  add program with specified streams -target type        specify target file type ("vcd", "svcd", "dvd", "dv" or "dv50" with optional prefixes "pal-", "ntsc-" or "film-") -apad               audio pad -frames number      set the number of frames to output -filter filter_graph  set stream filtergraph -filter_script filename  read stream filtergraph description from a file -reinit_filter      reinit filtergraph on input parameter changes -discard            discard -disposition        disposition

Video options:视频选项 -vframes number     set the number of video frames to output -r rate             set frame rate (Hz value, fraction or abbreviation) -fpsmax rate        set max frame rate (Hz value, fraction or abbreviation) -s size             set frame size (WxH or abbreviation) -aspect aspect      set aspect ratio (4:3, 16:9 or 1.3333, 1.7777) -vn                 disable video-vcodec codec       force video codec ('copy' to copy stream) -timecode hh:mm:ss[:;.]ff  set initial TimeCode value. -pass n             select the pass number (1 to 3) -vf filter_graph    set video filters -ab bitrate         audio bitrate (please use -b:a) -b bitrate          video bitrate (please use -b:v) -dn                 disable data

Audio options:音频选项 -aframes number     set the number of audio frames to output -aq quality         set audio quality (codec-specific) -ar rate            set audio sampling rate (in Hz) -ac channels        set number of audio channels -an                 disable audio -acodec codec       force audio codec ('copy' to copy stream) -vol volume         change audio volume (256=normal) -af filter_graph    set audio filters

Subtitle options:字幕选项 -s size             set frame size (WxH or abbreviation) -sn                 disable subtitle -scodec codec       force subtitle codec ('copy' to copy stream) -stag fourcc/tag    force subtitle tag/fourcc -fix_sub_duration   fix subtitles duration -canvas_size size   set canvas size (WxH or abbreviation) -spre preset        set the subtitle options to the indicated preset

ffmpeg 命令集举例

1.获取视频的信息

ffmpeg -i video.avi

2.将图片序列合成视频

ffmpeg -f image2 -i image%d.jpg video.mpg

上面的命令会把当前目录下的图片(名字如:image1.jpg. image2.jpg. 等...)合并成video.mpg

3.将视频分解成图片序列

ffmpeg -i video.mpg image%d.jpg

上面的命令会生成image1.jpg. image2.jpg. ...

支持的图片格式有:PGM. PPM. PAM. PGMYUV. JPEG. GIF. PNG. TIFF. SGI

4.为视频重新编码以适合在iPod/iPhone上播放

ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4

说明:

* 源视频:source_video.avi

* 音频编码:aac

* 音频位率:128kb/s

* 视频编码:mpeg4

* 视频位率:1200kb/s

* 视频尺寸:320 X 180

* 生成的视频:final_video.mp4

5.为视频重新编码以适合在PSP上播放

ffmpeg -i source_video.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4

说明:

* 源视频:source_video.avi

* 音频编码:aac

* 音频位率:32kb/s

* 视频编码:xvid

* 视频位率:1200kb/s

* 视频尺寸:320 X 180

* 生成的视频:final_video.mp4

6.从视频抽出声音.并存为Mp3

ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3

说明:

* 源视频:source_video.avi

* 音频位率:192kb/s

* 输出格式:mp3

* 生成的声音:sound.mp3

7.将wav文件转成Mp3

ffmpeg -i son_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3

8.将.avi视频转成.mpg

ffmpeg -i video_origine.avi video_finale.mpg

9.将.mpg转成.avi

ffmpeg -i video_origine.mpg video_finale.avi

10.将.avi转成gif动画(未压缩)

ffmpeg -i video_origine.avi gif_anime.gif

11.合成视频和音频

ffmpeg -i son.wav -i video_origine.avi video_finale.mpg

12.将.avi转成.flv

ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv

13.将.avi转成dv

ffmpeg -i video_origine.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv

或者:

ffmpeg -i video_origine.avi -target pal-dv video_finale.dv

14.将.avi压缩成divx

ffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi

15.将Ogg Theora压缩成Mpeg dvd

ffmpeg -i film_sortie_cinelerra.ogm -s 720x576 -vcodec mpeg2video -acodec mp3 film_terminate.mpg

16.将.avi压缩成SVCD mpeg2

NTSC格式:

ffmpeg -i video_origine.avi -target ntsc-svcd video_finale.mpg

PAL格式:

ffmpeg -i video_origine.avi -target pal-svcd video_finale.mpg

17.将.avi压缩成VCD mpeg2

NTSC格式:

ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg

PAL格式:

ffmpeg -i video_origine.avi -target pal-vcd video_finale.mpg

18.多通道编码

ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2

19.从flv提取mp3

ffmpeg -i source.flv -ab 128k dest.mp3

格式

支持的编码

源自FFmpeg项目组的两个视频编码:

Snow

FFV1

支持的格式

ASF

AVI

BFI

IFF

RL2

FLV

MXF, Material eXchange Format, SMPTE 377M

Matroska

Maxis XA

MSN Webcam stream

MPEG transport stream

TXD

OMA

GXF, General eXchange Format, SMPTE 360M

mov,mp4,m4a,3gp,

协议

支持的协议

HTTP

RTP

RTSP

RealMedia RTSP/RDT

Gopher

RTMP

RTMPT, RTMPE, RTMPTE, RTMPS (via librtmp)

SDP

MMS over TCP

相关版权

(Hall Of Shame)

FFmpeg被许多开源项目采用,比如ffmpeg2theora,VLC, MPlayer, HandBrake, Blender, Google Chrome等。还有DirectShow/VFW的ffdshow(external project)和QuickTime的Perian (external project)也采用了FFmpeg。

由于FFmpeg是在LGPL/GPL协议下发布的(如果使用了其中一些使用GPL协议发布的模块则必须使用GPL协议),任何人都可以自由使用,但必须严格遵守LGPL/GPL协议。有很多播放软件都使用了FFmpeg的代码,但它们并没有遵守LGPL/GPL协议,没有公开任何源代码。我们应该对这种侵权行为表示耻辱。

2009年加入FFmpeg的播放软件:暴风影音、QQ影音、KMP、GOM Player、PotPlayer(2010)都在其列。

2009年2月,韩国名软KMPlayer被FFmpeg开源项目发现使用了它们的代码和二进制文件,但是没有按照规定/惯例开放相应说明/源码。因此被人举报,进入了FFmpeg官网上的耻辱黑名单。

2009年5月,网友cehoyos下载了暴风影音软件,解压之后发现其安装程序内包含了大量的开源和私有解码器:avcodec,avformat,avutil,x264,xvid,bass,wmvdmod等,之后暴风影音被正式加入到FFmpeg耻辱名单。

2009年7月22日,陈俊豪(格式工厂作者)因用到了ffmpeg和RMVB的编码库,用到了FFmpeg的译码/编码算法,违反FFmpeg的LGPL协议,登上了2009年7月22日FFmpeg的“耻辱柱”上。

2009年11月,网友roo_zhou向FFmpeg举报,指出QQ影音的credit只给出了修改的FFmpeg源码下载,声称是LGPL许可证。但实际是修改过的ffdshow,采用的是GPL许可证,之后QQ影音被正式加入到FFmpeg耻辱名单之列。

Libav项目启动之后,FFmpeg官方版本也仍然在一直维护中。FFmpeg与libav属于独立的两个项目。 

版本发布

2019-6-2,FFmpeg4.2发布 

2014-12-5, FFmpeg2.5发布

2014-09-15, FFmpeg2.4发布 

2013-07-10, FFmpeg2.2发布

2012年01月27日,FFmpeg 0.9.1 发布,修复了很多 bug 和安全方面的补丁,包括: CVE-2011-3893 and CVE-2011-3895,同时显著提升对 H.264 的检索支持。 

2012年01月29日,FFmpeg 0.10 发布,这是一个主要的发行版本,包含大量的新特性和bug修复。

2012年04月07日,FFmpeg 0.10.1 发布,FFmpeg 0.10.1 修复了很多安全漏洞,超过 100 个 bug 修复,新增 swapuv 过滤器。 

2012年05月07,FFmpeg 0.10.3 发布,该版本修复了 4xm 分路器、cook 解码器、mm 分路器、mpeg 视频解码器、vqavideo 解码器、xmv 分路器的安全问题,以及包含一些重要的 bug 修复。

2012年06月09日,FFmpeg 0.11.1 发布,该版本修复了 70 个 bug,其中有一些安全方面的问题。

关注
打赏
1662339380
查看更多评论
立即登录/注册

微信扫码登录

0.0441s