图像处理

常见的图片格式包括YUV、BMP、JPG、GIF、PNG。

图像的创建

可以使用下面命令从输入源中截取图像

ffmpeg -i input -ss t image.type

从videoclip.avi中的1:23:45截一张图,输出为JPG。

ffmpeg -i videoclip.avi -ss 01:23:45 image.jpg

从视频中生成GIF

GIF是比较常见的动图的格式,在网络上普遍使用。需要注意的GIF中的帧是未压缩的,帧数不能太多,否则可能导致生成文件过大。使用下面命令行可以从.flv中生成GIF。

ffmpeg -i promotion.swf -pix_fmt rgb24 promotion.gif

ffmpeg提供的测试输入源

  • color 提供纯色的画面生成机制,参数中可指定显示颜色
  • smptebars 方形的电视节目测试图片,彩条
  • testsrc 圆形的电视节目测试图片,有一个变化的渐变进度条和右侧的一个时间戳。

上面几个输出源的分辨率是320x240。可以用下面命令测试下具体效果:

ffplay -f lavfi -i smptebars

ffplay -f lavfi -i testsrc

ffplay -f lavfi -i color=random

视频转换为图片

可以使用下面命令将clip.avi中的视频帧存储为JPG图片(运行的时候建议找个小点的视频,否则你的硬盘可能废掉)

ffmpeg -i clip.avi frame%d.jpg

不同图片格式之间的转换

可以使用下面的命令

ffmpeg -i image.type1 image.type2

实际调用,可以将BMP转JPG

ffmpeg -i in.bmp out.jpg

使用图片构建视频

视频本来就是由图片附加上时间信息构成的。

可以使用一张图重复构成一个视频。参考下面命令:

ffmpeg -loop 1 -i photo.jpg -t 10 photo.mp4

输出的视频长度为10s,重复播放一张图片。

也可以将一些列图片合成到一个视频中。比如下面命令,将图片img1.jpg、img2.jpg、……、img100.jpg按照25fps输出为4s的视频。

ffmpeg -f image2 -i img%d.jpg -r 25 video.mp4

数字音频

数字音频是将模拟音频信号通过量化和采样实现的,其中必要重要的概念是量化位数和采样率。量化位数通常有8位、16位、32位,量化位数用于表示音频幅度信号的刻画精细程度;采样率表示单位时间内需要采样的音频点数,比较常用的是8KHz(电话、语音)、44.1kHz(CD)、48kHz(DVD、TV)。

常见文件格式

音频常见的文件格式有WAV、MP3、PCM、AAC、WMA等。

声道和layout

音频中的声道指的是音频采样设备,对于多声道的音频,通常是多个音频采样点获取的音量值。下图是关于声道的缩写,以及不同的声道布局-layout。

单声道mono指的是FC,立体声stereo指代FL+FR。

设置输出音量大小

可以使用-vol命令来指定输出音量大小,范围为[0,255]。命令行如下:

ffmpeg -i sound.wav -vol 180 sound_middle_loud.wav

也可以使用volume audio filter处理音量大小。

Codec支持的预设 Preset

比如-apre-vpre-spre-fpre分别用于指定音频、视频、字幕和codec的预设。

举例说明,一个简单的 mpeg2.ffpreset 可能只包含一个指令:

vcodec=mpeg2video

我们可以用下面语句使用mpeg2.ffpreset,

ffmpeg -i input -fpre mpeg2.ffpreset -q 1 MPEG2_video.mpg

再比如可以定义下面flv.ffpreset预设文件(括号内的表示注释)

vcodec=flv (video codec)
b:v=300k (video bitrate)
g=160 (group of picture size)
mbd=2 (macroblock decision algorithm)
flags=+aic+mv0+mv4 (aic - h263 advanced intra coding; always try a mb with
mv=<0,0>; mv4 - use 4 motion vector by macroblock)
trellis=1 (rate-distortion optimal quantization)
ac=1 (number of audio channels)
ar=22050 (audio sampling rate)
b:a=56k (audio bitrate)

使用下面命令调用

ffmpeg -i input.avi -f flv -r 29.97 -vf scale=320:240 -aspect 4:3 -cmp dct -subcmp dct -fpre flv.ffpreset output.flv

通下面语句等价:

ffmpeg -i input.avi -vcodec flv -f flv -r 29.97 -vf scale=320:240

-aspect 4:3 -b:v 300k -g 160 -cmp dct -subcmp dct -mbd 2 -flags

+aic+mv0+mv4 -trellis 1 -ac 1 -ar 22050 -b:a 56k output.flv

输入设备

windows下可以使用dshow来访问输入设备。比如下面输入可以列出系统中的输入设备(麦克和摄像头):

ffmpeg -list_devices 1 -f dshow -i dummy

如果你的主机上有个摄像头,上面的语句输出的名字为“HP Webcam”,那么你就可以使用该设备录像了。命令行如下:

ffplay -f dshow -i video="HP Webcam"

ffmpeg -f dshow -i video="HP Webcam" -f sdl "webcam via ffmpeg"

当然也可以使用-list_options查看设备支持的参数。

同理,可以使用音频设备。

高级话题

  • delogo video filter,用于去除视频上的logo。
  • deshake video filter,用于去抖动。
  • drawbox video filter,用于在视频上绘制颜色矩形框。
  • 使用ffmpeg -i input.mpg -f null /dev/null获取视频帧数。
  • blackdetect/blackframe video filter,用于黑场检测。
  • showinfo video filter,可显示每一帧的信息,包括pts、宽高比等。
  • showspectrum multimedia filter,显示音频频谱图。
  • showwaves multimedia filter,显示音频波形图。
  • flite audio source,用于语音合成。
  • ffmpeg支持-debug[:specifier]用于调试输出信息,比如量化参数、pts、运动矢量等。
  • 提供-err_detect命令,用于检测流中可能的错误。
  • 显示cpu和内存占用情况,可使用-benchmark

附加说明

本部分内容是Ffmpeg Basic第15章之后的内容,主要整理了下我感兴趣的、不是很熟悉的内容。比如ffmpeg中的图片处理、数字音频处理、Preset定义和使用、输入设备获取和使用、高级应用等。更为详细的内容建议参考ffmpeg官网。

FFmpeg Basic学习笔记(4)的更多相关文章

  1. FFmpeg Basic学习笔记(3)

    视频叠加--画中画效果 overlay video filter 视频叠加比较常见的应用场景是台标的叠加,在画面左上角.右上角.左下角或右下角叠加台标. ffmpeg提供的overlay filter ...

  2. FFmpeg Basics学习笔记(2)

    帧率 fps的概念 帧率,单位FPS(frame per second), 用于衡量视频每秒的处理帧数,对于编码器而言说明编码器在1s的编码的速度,通常可以使用一帧的编码时间倒数简单计算:对于解码器而 ...

  3. FFmpeg Basics学习笔记(1)ffmpeg基础

    1 FFmpeg的由来 FFmpeg缩写中,FF指的是Fast Forward,mpeg是 Moving Pictures Experts Group的缩写.官网:ffmpeg.org 编译好的可执行 ...

  4. FFmpeg编程学习笔记二:音频重採样

    ffmpeg实现音频重採样的核心函数swr_convert功能很强大,但是ffmpeg文档对它的凝视太过简单.在应用中往往会出这样那样的问题,事实上在读取数据->重採样->编码数据的循环中 ...

  5. Linux Basic学习笔记01

    介绍课程: 中级: 初级:系统基础 中级:系统管理.服务安全及服务管理.Shell脚本: 高级: MySQL数据库: cache & storage 集群: Cluster lb: 4laye ...

  6. Decimal Basic 学习笔记(1)

    定义变量 LET a 输入变量值 INPUT a INPUT a,b 运算结果绝对值小于1前面的0省略,科学计数 PRINT语句 数值直接写,字符串用“” 通过 分号: 和 逗号,来分隔显示两个项目 ...

  7. FFmpeg常用命令学习笔记(一)基本信息查询命令

    笔者才开始学习音视频开发,FFmpeg学习笔记系列主要是从慕课网李超老师的FFmpeg音视频核心技术精讲与实战课程学习的心得体会. FFmpeg音视频核心技术精讲与实战:https://coding. ...

  8. ffmpeg学习笔记

           对于每一个刚開始学习的人,刚開始接触ffmpeg时,想必会有三个问题最为关心,即ffmpeg是什么?能干什么?怎么開始学习?本人前段时间開始接触ffmpeg,在刚開始学习过程中.这三个问 ...

  9. mysql basic operation,mysql总结,对mysql经常使用语句的详细总结,MySQL学习笔记

    mysql> select * from wifi_data where dev_id like "0023-AABBCCCCBBAA" ; 1.显示数据库列表.show d ...

随机推荐

  1. JavaScript概念梳理

    一.JavaScript 的奇葩命名史 1995 年,网景浏览器(Netscape Navigator)首次发布了一种运行于浏览器端的脚本语言,网景给这个新语言命名为 LiveScript.一年后,为 ...

  2. Socket模型(二):完成端口(IOCP)

    为什么要采用Socket模型,而不直接使用Socket? 原因源于recv()方法是堵塞式的,当多个客户端连接服务器时,其中一个socket的recv调用时,会产生堵塞,使其他链接不能继续.这样我们又 ...

  3. NBUT [1475] Bachelor

    [1475] Bachelor http://acm.nbut.cn:8081/Problem/view.xhtml?id=1475 时间限制: 1000 ms 内存限制: 65535 K 问题描述 ...

  4. HTTP 请求头 Header

    HTTP 请求头 Header HTTP请求头概述 (HttpServletRequest) HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST或者HEA ...

  5. 【JQuery】jQuery(document).ready(function($) { });的几种表示方法及load和ready的区别

    jQuery中处理加载时机的几种方式 第一种: jQuery(document).ready(function() { alert("你好"); }); //或 $(documen ...

  6. Mac Apache Tomcat 配置

    1.配置准备工作 1)配置 Tomcat 准备工作 下载相关软件 apache-tomcat-9.0.6.zip tomcat 官网 Tomcat 配置软件下载地址,密码:sgrn. 2)配置注意事项 ...

  7. log4j(二)——如何控制日志信息的输出?

    一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 二:先看栗子再来下结论 import org.apache.log4j.*; import test.log4j.bean ...

  8. [MSP430] 对MSP430单片机__delay_cycles精确延时的说明及改正

    在这里, 我来讨论一下关于MSP430单片机使用__delay_cycles延时的问题. IAR for MSP430编译器提供了一个编译器内联的精确延时函数(并非真正的 函数)以提供用户精确延时使用 ...

  9. [AaronYang风格]微软Unity2.X系统学习笔记,记录

    读者约定: Unity我直接简写U了 Unity Dependency Injection(DI) 欢迎学习Unity,通过学完下面的几个流程的引导,你应该就可以很顺利的应用Unity到你的项目中去了 ...

  10. Smarty标签运算,控制结构[if,for,foreach,section,while]

    Smarty标签运算: 在页面上做简单的运算[temp5.html] 条件判断if 循环结构 for foreach用得比较多,foreach例子从数据库取出的数据 section功能和foreach ...