偶遇FFmpeg(一) —— 初了解

FFmpeg_logo.png

整体的目标

  • [ ] 完成将多张图片转换成视频。并添加背景音乐的任务。
  • [ ] 完成将音频混音到视频中的任务。
  • [ ] 完成将找到的视频合并的任务。

目前计划确定

  • [ x ] 1. 寻找Android端可以解决的方案
  • [ x ] 2. 了解方案和实现
  • [ x ] 3. 完成任务

具体内容

FFmpeg的了解

FFmpeg的介绍网上还是很多的。官网的wiki上面也有很多内容。围绕目标,主要是有两套实现的思路。早期,其实是想通过自己编写C代码,来完成整个流程的。但是无奈目前的水平有限,而且时间不够充裕。故最后的思路是通过学习现有的命令行参数,来快速完成FFmpeg的使用。但是这样的弊端也极大的,在此暂时不诉。

FFmpeg主要包含了以下几个核心的库:
  1. libavformat
    用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音 视频帧等功能;音视频的格式解析协议,为 libavcodec 分析码流提供独立的音频或视频码流源。
  2. libavcodec
    用于各种类型声音/图像编解码;该库是音视频编解码核心,实现了市面上可见的绝大部分解码器 的功能,libavcodec 库被其他各大解码器 ffdshow,Mplayer 等所包含或应用。
  3. libavdevice
    硬件采集、加速、显示。操作计算机中常用的音视频捕获或输出设备: ALSA,AUDIO_BEOS,JACK,OSS,1394,VFW。
  4. libavfilter
    filter(FileIO、FPS、DrawText)音视频滤波器的开发,如宽高比 裁剪 格式化 非格式化 伸缩。
  5. libavutil
    包含一些公共的工具函数的使用库,包括算数运算 字符操作;
  6. libavresample
    音视频封转编解码格式预设等。
  7. libswscale
    (原始视频格式转换)用于视频场景比例缩放、色彩映射转换;图像颜色空间或格式转换,如 rgb565
    rgb888 等与 yuv420 等之间转换。
  8. libswresample
    原始音频格式转码
  9. libpostproc:
    (同步、时间计算的简单算法)用于后期效果处理;音视频应用的后处理,如图像的去块效应。 ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;
  • ffsever
    一个 HTTP 多媒体即时广播串流服务器;
  • ffplay
    是一个简单的播放器,使用 ffmpeg 库解析和解码,通过 SDL 显示;

从官网上下载好ffmpeg,进入FFmpeg命令行工具所在的文件夹,就开始干活。
因为直接使用cmd 是没有历史记录的,所以书内推荐使用其他的客户端来操作,但是为了便捷,则是还是使用最简单的工具。

FFmpeg Basic的学习

  1. 参考FFmpeg Basic FFmpeg封装好的命令行整体是是这样的
Command line syntax
     ffmepg [global options] [input file options] -i input_file [output file options] output_file
 [ ]中的内容是可选的参数,其他则是必填的参数。
一图比千言—CommanLine.png
  1. 使用ffmpeg进行转码
    ffmpeg可以输入各种文件或者流,进行操作。整体的工作流程是解码器将未压缩的帧数据在经过filter之后,再进行编码和输出。其中很重要的一点就是它能够构造一个 filterchains 和 filtergraphs (滤镜链和滤镜图)。
转码流程.png

看了这个图,可能会问 什么是 packets ,什么是frames ,在这里暂且不表

  1. Filters,filter chains 和filtergraphs
    在多媒体的进程中,filter意味着在输入文件进行编码之前将其修改的一个软件工具。他被分成音频的滤镜和视频的滤镜。FFmpeg已经内置好了多种滤镜而且能够通过多种方式结合他们使用。这样简化了媒体的进程,因为在编解码的过程中。会整体的质量。 libavfilter就是整个软件库。使用-vf 来操作视频滤镜 使用 -af来使用音频的滤镜。
Filter syntax
      [input_link_label1]...
            filter_name=parameters
                [output_link_label1]...
  #####Filterchain
      "filter1,filter2,...."
  #####Filtergraph
      "filterchain1;filterchain2;..."
  #####使用filtergraph能够有效的简化命令行。将两行变成一行
      #使用前
      ffmpeg -i input.mpg -vf hqdn3d,pad=2*iw outpt.mp4
      ffmpeg -i output.mp4 -i input.mpg -filter_complex overlay=w compare.mp4
      #使用后
      ffplay -i i.mpg -vf split[a][b];[a]pad=2*iw[A];[b]hqdn3d[B];[A][B]overlay=w
      # 将输入的i.mpg 分成[a]和[b] ;将[a]左右一个filterchains的输入,输出为[A];将[b]作为输入,输出为[B],最后再将[A][B] 通过overLay filter产生一个对比。
加上Filter之后的总体流程
  1. 媒体流的选择。
    • 许多封装格式存在多个流媒体。ffmpeg能够识别5种流。 audio(a),attachment(t),data(d),subtitle(s) and video(v)。可以通过-map后面添加这些参数来完成选择。

      syntax
        file_number:stream_type [:stream_number]
        #其中file_number、stream_number都是从0开始。
        #-map 0 表示选择所有
        #-map i:v表示从角标为i的文件中选择所有的视频流。 -map: i:a 则是所有的音频流
        # -an,-vn,-sn 简单的理解就是 剔除音频。视频。和字母(... no ..)
        
        #将A中的视频和B中的音频和C中的字幕合并到clip.mov中
        ffmpeg -i A.mov -i B.mov -i C.mov -map 0:v:0 -map 1:a:0 -map 2:s:0 clip.mov
      
      - 除此之外,还有其他的可以定义流的信息
            #-b 可以设置音频和视频的bit rate
            ffmpeg -i input.mpg -b:a 128k -b:v 1500k outpu.mp4


![map steam 示意图.png](http://upload-images.jianshu.io/upload_images/1877190-954ea618c5f03ccc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


   4. **有用的命令。**
      将输出输出到文件当中。
          ffmpeg -help > help.txt
          ffmpeg -filters >> data.txt   #续写
   5. **概念的介绍**
   比特率、帧率和文件大小之间的关系
   #####帧率。
每秒被编码到视频文件中的帧数。人眼至少需要15fps,才能举得是一个连续的滑动。它也进程被较为一个帧的频繁度 。它的单位是Hz.LCD显示器通常是60Hz的。
```shell
    # 直接使用- r 能够制定帧率
         ffmepg -i input -r fps output
     #使用fpsfilter来指定帧率
         ffmpeg -i clip.mpg -vf fps=fps=25 clip.webm
比特率

确定的是音频和视频总体的质量。它定义的是 每个时间单元携带的数据量。

Type Abbreviation
Average bit rate ABR 每秒平均的比特率。在VBR编码模式下也需要。通常用于确定的输出大小
Constant bit rate CBR 每秒处理的比特率是相同的。这并不实际。因为在运动的处理过程中,需要更多的比特率。CBR通常用于在混合多媒体流的时候使用。
Variable bit rate VBR 可变的比特率。简言之就是需要多的时候多,反之亦然。但是同样需要更多的cpu来处理这些判断

之前说过,通过-b就可以设定比特率。-b:v 就 可以设定视频

# 在视频通话中,因为传输的数据不能被缓存。所有需要设定
#一个固定的比特率来输出。通常需要设定三个参数。 -b -minrate -maxrate .设置maxrate的同时,还得设置一个 -bufsize来缓存。           
ffmpeg -i in.avi -b 0.5M -minirate 0.5M -maxrate 0.5M -bufsize 1M out.mkv

#为了控制文件的大小,可以使用 -fs
 ffmpeg -i -input.avi -fs 10MB output.mp4
文件大小的计算公式
  • 视频大小
    video_size =vieo_birate * time_inseconds/8
  • 音频大小
    (未压缩)audio_size=sampling_ratebit_depthchannelstime_in_seconds/8
    (压缩)audio_size = bitrate
    time_in_seconds/8
    最后计算的文件,应该比两个相加还略大一点。因为还有以下meta data 和overhead。

未完待续。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容