• FFmpeg Basic学习笔记(4)


    图像处理

    常见的图片格式包括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。
    3-1.jpg

    单声道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官网。

  • 相关阅读:
    Google的Protobuf安装及使用笔记一
    std::list与std::map的排序比较
    svn库镜像
    daemontools中supervise系统进程监控
    memcached的客户端
    Memcached安装及使用
    eclipse下maven配置
    栈溢出
    堆排序
    redis使用笔记
  • 原文地址:https://www.cnblogs.com/tocy/p/ffmpeg-basic-learning-4.html
Copyright © 2020-2023  润新知