前言

在Android音视频开发中,网上知识点过于零碎,自学起来难度十分大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 – 使命列表》。本文是Android音视频使命列表的其间一个, 对应的要学习的内容是:FFmpeg常见指令行(一):FFmpeg东西运用根底


音视频使命列表

音视频使命列表: 点击此处跳转查看.


目录

FFmpeg常见命令行(一):FFmpeg工具使用基础


1.1 FFmpeg简介

1.1.1 FFmpeg的定义

FFmpeg是一个开源的跨渠道多媒体处理东西集,它能够用于处理音频、视频和其他多媒体数据。FFmpeg供给了一组功用强大的指令行东西,用于音频和视频的编解码、转化、处理、流媒体传输等使命。

FFmpeg支撑多种音频和视频格局,包含常见的MP3、AAC、FLAC、H.264、H.265等。它能够进行音频和视频的编码(将数据压缩为特定格局)、解码(将数据解压为原始格局)、转码(在不同格局之间进行转化)、编排、兼并、提取音频或视频流、增加字幕、调整音量、运用滤镜作用等操作。

FFmpeg是一个十分灵活和强大的东西集,广泛运用于多媒体处理范畴。它被许多软件、渠道和服务所运用,包含视频修正软件、流媒体服务器、音频播映器、视频转码服务等。因为其开源的特性,FFmpeg也得到了广泛的社区支撑和贡献,使其不断发展和改善。


1.1.2 FFmpeg的根本组成

FFmpeg由多个中心组件组成,它们共同构成了这个多媒体处理东西集的根底。以下是FFmpeg的根本组成:

  1. libavcodec:这是FFmpeg的中心编解码库,供给了音频和视频编解码器的完成。它支撑各种格局的音频和视频编码,包含常见的MP3、AAC、FLAC、H.264、H.265等。libavcodec担任将音频和视频数据从一种格局转化为另一种格局。
  2. libavformat:这个组件处理音频和视频的容器格局(例如MP4、AVI、MKV等)。它能够解析和封装多种容器格局,使得FFmpeg能够读取和写入不同的音频和视频文件。
  3. libavfilter:这是FFmpeg的滤镜库,用于完成各种音频和视频的滤镜作用,如调整亮度、对比度、色彩平衡,增加水印,去噪等。libavfilter允许用户在处理音频和视频时运用各种视觉和音频作用。
  4. libavutil:这是一个辅助库,供给了一些常用的东西函数,用于处理音频、视频和其他多媒体数据。它包含了数据结构、数学运算、时刻管理、内存管理等功用,为其他组件供给了根底支撑。
  5. libswscale:这个组件用于图像的缩放和色彩空间转化。它能够将不同分辨率和不同色彩空间的图像进行转化,以习惯不同的显现设备或编码要求。

除了上述中心组件外,FFmpeg还包含许多其他的辅助东西和库,用于处理音频、视频和其他多媒体使命。例如,指令行东西FFmpegffprobe是常用的东西,用于履行音视频转码、剖析多媒体文件等操作。

总之,FFmpeg的根本组成是由编解码库、容器处理库、滤镜库、东西库等多个组件构成,它们协同工作,供给了丰厚的功用和灵活性,使得FFmpeg成为一个强大的多媒体处理东西集。


1.1.3 FFmpeg的编解码东西FFmpeg

FFmpeg的编解码东西指令行是FFmpeg中最常用和最重要的东西之一,用于履行音频和视频的编解码、转化、处理等使命。

运用FFmpeg东西,你能够经过指定输入文件和输出文件的参数,对音频和视频进行各种操作。以下是一些常见的用法示例:

  1. 音视频转码:将一个音频或视频文件转化为不同的编码格局。
ffmpeg -i input.mp4 output.avi

上述指令将输入文件input.mp4转码为输出文件output.avi

  1. 编排和裁剪:截取音频或视频的一部分,或许裁剪音频或视频的尺度。
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 -c copy output.mp4

上述指令从input.mp4文件中提取从第10秒开端持续30秒的内容,并将其保存为output.mp4文件。

  1. 增加水印:在视频上增加文字或图像水印。
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=W-w-10:H-h-10" output.mp4

上述指令将名为watermark.png的水印增加到input.mp4视频的右下角,并生成output.mp4文件。

  1. 调整音频和视频参数:调整音频和视频的比特率、帧率、分辨率等参数。
ffmpeg -i input.mp4 -b:v 1M -r 30 -s 1280x720 output.mp4

上述指令将输入文件input.mp4的视频比特率设置为1 Mbps,帧率设置为30帧/秒,分辨率设置为1280×720,并输出为output.mp4文件。

这仅仅一些FFmpeg东西的常见用法示例,它具有十分丰厚的功用和选项,能够履行各种杂乱的音频和视频处理使命。你能够经过查阅FFmpeg的文档或在指令行中输入FFmpeg --help来获取更多详细的用法和选项信息。


1.1.4 FFmpeg的播映器ffplay

FFmpeg供给了一个指令行播映器东西,名为ffplay,它用于播映音频和视频文件。ffplay具有简略的界面,能够实时播映音频和视频,并支撑根本的播映操控。

下面是一些运用ffplay的示例:

  1. 播映音频文件
ffplay input.mp3

上述指令将播映名为input.mp3的音频文件。

  1. 播映视频文件
ffplay input.mp4

上述指令将播映名为input.mp4的视频文件。

  1. 调整播映速度
ffplay -vf "setpts=0.5*PTS" input.mp4

上述指令将以0.5倍速度播映input.mp4视频文件。

  1. 跳转到指定时刻
ffplay -ss 00:01:30 input.mp4

上述指令将从input.mp4视频文件的1分30秒处开端播映。

  1. 全屏形式
ffplay -fs input.mp4

上述指令将以全屏形式播映input.mp4视频文件。

ffplay还支撑一些其他的选项和快捷键,例如调整音量、截图、设置字幕等。你能够经过在指令行中输入ffplay --help来查看详细的选项和用法信息。

需要注意的是,虽然ffplay是一个方便的指令行播映器东西,但它的功用相对简略,不如专业的媒体播映器那样完善和高档。假如你需要更杂乱的播映需求,能够考虑运用其他媒体播映器软件,如VLC媒体播映器。


1.1.5 FFmpeg的多媒体剖析器ffprobe

FFmpeg供给了一个多媒体剖析器东西,名为ffprobeffprobe用于剖析音频和视频文件的详细信息,包含编解码格局、比特率、分辨率、帧率、音频通道、元数据等。

以下是一些运用ffprobe的示例:

  1. 查看文件信息
ffprobe input.mp4

上述指令将显现input.mp4视频文件的详细信息,包含视频流、音频流、格局信息等。

  1. 输出JSON格局
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4

上述指令将以JSON格局输出input.mp4视频文件的信息,包含格局信息和流信息。

  1. 查看特定流的信息
ffprobe -show_streams -select_streams a input.mp4

上述指令将显现input.mp4视频文件中的音频流信息。

  1. 提取元数据
ffprobe -show_format -loglevel error -of default=noprint_wrappers=1:nokey=1 -sexagesimal input.mp4

上述指令将提取input.mp4视频文件的元数据信息,如时长、创立时刻等。

ffprobe支撑许多其他的选项和用法,能够经过在指令行中输入ffprobe --help来查看详细的信息。

经过运用ffprobe,你能够快速了解音频和视频文件的各种属性和参数,以便进行后续的处理和剖析。它在媒体文件的调试、调优、元数据提取等方面十分有用。


1.2 FFmpeg常用指令

1.2.1 FFmpeg的封装转化

下面是一些FFmpeg常用的指令,用于封装转化:

  1. 视频格局转化:
FFmpeg -i input.mp4 output.avi

这个指令将输入的input.mp4文件转化成output.avi文件,能够依据需要修正输入输出的文件名和途径。

  1. 视频封装:
FFmpeg -i input.mp4 -c copy output.mkv

这个指令将输入的input.mp4文件进行封装,转化成Matroska封装格局(.mkv)。运用-c copy选项能够直接仿制视频和音频流,加速转化速度而不进行从头编码。

  1. 音频格局转化:
FFmpeg -i input.mp3 output.ogg

这个指令将输入的input.mp3音频文件转化成output.ogg文件,能够依据需要修正输入输出的文件名和途径。

  1. 视频转化并调整分辨率和比特率:
FFmpeg -i input.mp4 -s 1280x720 -b:v 2M output.mp4

这个指令将输入的input.mp4视频文件转化成output.mp4文件,并将视频分辨率调整为1280×720,视频比特率为2 Mbps。你能够依据需要修正分辨率和比特率的值。

  1. 视频转化并裁剪:
FFmpeg -i input.mp4 -ss 00:00:10 -to 00:00:30 -c:v copy -c:a copy output.mp4

这个指令将输入的input.mp4视频文件从第10秒裁剪到第30秒,并将裁剪后的视频保存为output.mp4文件。运用-c:v copy-c:a copy选项能够直接仿制视频和音频流,加速裁剪速度而不进行从头编码。

  1. 视频转化并增加水印:
FFmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4

这个指令将输入的input.mp4视频文件增加名为watermark.png的水印,并将水印方位设置为距离视频左上角10个像素的方位,然后保存为output.mp4文件。你能够调整overlay滤镜中的方位参数来更改水印方位。

以上是一些常用的FFmpeg指令,用于封装转化音视频文件。


1.2.2 FFmpeg的转码参数

FFmpeg供给了许多参数和选项,能够进行音视频的转码操作。下面是一些常用的转码参数示例:

  1. 指定输出编码格局:

    -c:a <编码器>:设置音频编码器
    -c:v <编码器>:设置视频编码器
    

    例如,运用AAC音频编码器和H.264视频编码器进行转码:

    FFmpeg -i input.mp4 -c:a aac -c:v libx264 output.mp4
    
  2. 指定输出码率(比特率):

    -b:a <音频比特率>:设置音频比特率
    -b:v <视频比特率>:设置视频比特率
    

    例如,设置音频比特率为128kbps,视频比特率为1000kbps:

    FFmpeg -i input.mp4 -b:a 128k -b:v 1000k output.mp4
    
  3. 指定输出分辨率:

    -s <宽度x高度>:设置输出分辨率
    

    例如,将视频转码为720p分辨率:

    FFmpeg -i input.mp4 -s 1280x720 output.mp4
    
  4. 指定输出帧率:

    -r <帧率>:设置输出帧率
    

    例如,将视频转码为30帧/秒:

    FFmpeg -i input.mp4 -r 30 output.mp4
    

这些是常见的转码参数示例,FFmpeg还供给了许多其他参数和选项,能够依据详细需求进行调整和装备。


1.2.3 FFmpeg的根本转码原理

FFmpeg的根本转码原理触及音视频编解码、封装格局和过滤器的处理。下面简要介绍FFmpeg的根本转码原理:

  1. 音视频编解码
    音视频编解码是将原始的音视频数据(例如MP4、AVI文件)转化成不同的编解码格局(例如H.264视频、AAC音频)。编码是将原始数据压缩成较小的尺度以节约空间,而解码是将压缩的数据还原为原始数据以进行播映或处理。

  2. 解封装和封装
    解封装是将音视频文件中的音视频流提取出来,使其成为独立的音频和视频数据流。封装是将音频和视频数据流组合成一个容器格局文件(如MP4、AVI、MKV),使其能够在播映器或修正软件中正常播映。

  3. 过滤器
    过滤器是一种对音视频数据进行处理的东西。在转码过程中,过滤器能够用来进行音频增益、视频裁剪、增加水印等操作。FFmpeg内置了丰厚的过滤器,也支撑自定义过滤器。

  4. 转码流程
    FFmpeg的转码流程通常包含以下步骤:

    • 打开输入文件:FFmpeg打开输入文件,并解析其间的音视频流信息。
    • 找到正确的解码器:依据输入文件中的音视频编码格局,FFmpeg会主动挑选正确的解码器来解码音视频流。
    • 解码音视频数据:FFmpeg将音视频数据解码成原始的未压缩数据。
    • 运用过滤器(可选):假如有需要,能够运用过滤器来对音视频数据进行处理。
    • 挑选正确的编码器:依据输出文件的需求,FFmpeg会主动挑选正确的编码器来编码音视频数据。
    • 编码音视频数据:FFmpeg将处理后的音视频数据编码成方针编码格局。
    • 封装数据:将编码后的音视频数据封装成输出文件。

值得注意的是,转码过程或许触及多个解码器和编码器的调用,以及对音视频数据的处理和转化,因而转码或许是一项杂乱的使命。正确挑选适宜的编解码参数和过滤器对于得到高质量的转码结果至关重要。


1.3 ffprobe常用指令

ffprobe是FFmpeg的伴侣东西,用于剖析和提取音视频文件的元数据信息。它能够供给有关音视频文件的详细信息,如编解码器、分辨率、帧率、比特率、时长等。以下是一些常用的ffprobe指令示例:

  1. 获取音视频文件的根本信息:

    ffprobe -i input.mp4
    

    这个指令将输出音视频文件input.mp4的根本信息,包含容器格局、流的详细信息、编码器信息等。

  2. 获取音视频流的详细信息:

    ffprobe -i input.mp4 -show_streams
    

    运用该指令,ffprobe将显现音视频文件input.mp4中一切流的详细信息,包含流的索引、编码格局、比特率、分辨率、帧率等。

  3. 获取特定流的信息:

    ffprobe -i input.mp4 -show_streams -select_streams a:0
    

    上述指令将显现音视频文件input.mp4的第一个音频流的详细信息。你能够运用”-select_streams”参数挑选特定的流,例如”a:0″表明音频流的索引为0。

  4. 输出JSON格局的信息:

    ffprobe -i input.mp4 -show_format -print_format json
    

    运用该指令,ffprobe将以JSON格局输出音视频文件input.mp4的格局信息,包含容器格局、时长、比特率等。

  5. 自定义输出信息:

    ffprobe -i input.mp4 -show_format -show_entries format=duration,size
    

    上述指令将显现音视频文件input.mp4的时长和文件巨细。你能够运用”-show_entries”参数来指定要显现的信息,经过运用逗号分隔不同的项。

这些是一些常用的ffprobe指令示例,用于获取音视频文件的元数据信息。ffprobe供给了许多其他选项和参数,能够进一步定制输出信息的格局和内容。


1.4 ffplay常用指令

1.4.1 ffplay常用参数

ffplay是FFmpeg的一个简略播映器东西,能够用于实时播映音视频文件。它供给了一些常用的参数,用于操控播映过程和显现作用。以下是一些常用的ffplay参数示例:

  1. 播映音视频文件:

    ffplay input.mp4
    

    这个指令将运用ffplay播映音视频文件input.mp4。

  2. 越过文件头部:

    ffplay -skip_initial_bytes 512 input.mp4
    

    运用该参数,ffplay将越过输入文件的前512字节。这在某些情况下或许有助于处理一些播映问题。

  3. 指定开始时刻:

    ffplay -ss 30 input.mp4
    

    上述指令将从音视频文件input.mp4的30秒处开端播映。能够运用”-ss”参数指定开始时刻,以秒为单位。

  4. 指定播映窗口巨细:

    ffplay -x 800 -y 600 input.mp4
    

    运用该指令,ffplay将在一个800×600的窗口中播映音视频文件input.mp4。能够运用”-x”和”-y”参数分别指定宽度和高度。

  5. 音量操控:

    ffplay -volume 50 input.mp4
    

    上述指令将以50%的音量播映音视频文件input.mp4。能够运用”-volume”参数指定音量巨细,规模从0到100。

  6. 调整播映速度:

    ffplay -vf "setpts=0.5*PTS" input.mp4
    

    运用该指令,ffplay将以原来速度的两倍快速播映音视频文件input.mp4。能够运用”-vf”参数结合滤镜来调整播映速度。

这些是一些常用的ffplay参数示例,用于操控播映过程和显现作用。ffplay还供给了其他参数和选项,能够进一步定制播映器的行为。


1.4.2 ffplay高档参数

除了常用参数外,ffplay还供给了一些高档参数和选项,用于更详尽地操控播映过程和显现作用。以下是一些ffplay的高档参数示例:

  1. 视频滤镜:

    ffplay -vf "scale=640:480,rotate=90" input.mp4
    

    运用该指令,ffplay将在播映音视频文件input.mp4时运用视频滤镜。上述示例中的滤镜将视频缩放为640×480,并将其旋转90度。你能够运用各种视频滤镜来调整视频的尺度、旋转、亮度、对比度等。

  2. 音频滤镜:

    ffplay -af "volume=2" input.mp4
    

    上述指令将在播映音视频文件input.mp4时运用音频滤镜。示例中的音频滤镜将音量增加两倍。你能够运用各种音频滤镜来调整音频的音量、均衡器、混响等。

  3. 帧精准定位:

    ffplay -ss 00:01:30.500 input.mp4
    

    运用该指令,ffplay将在音视频文件input.mp4中准确定位到1分30.5秒的方位开端播映。能够运用”-ss”参数指定开始时刻,支撑以时:分:秒.毫秒的格局。

  4. 主动循环播映:

    ffplay -loop 0 input.mp4
    

    上述指令将在播映音视频文件input.mp4时主动循环播映,即播映结束后会主动从头开端。能够运用”-loop”参数指定循环播映的次数,0表明无限循环。

  5. 设置窗口标题:

    ffplay -window_title "My Player" input.mp4
    

    运用该指令,ffplay将在播映窗口的标题栏上显现自定义的标题。能够运用”-window_title”参数来设置窗口标题。

这些是一些ffplay的高档参数示例,用于更详尽地操控播映过程和显现作用。ffplay还有许多其他选项和参数,能够依据详细需求进行调整和装备。


1.4.3 ffplay的数据可视化剖析运用

ffplay供给了一些数据可视化剖析运用,能够协助你剖析和查看音视频文件的特性和质量。以下是一些ffplay的数据可视化剖析运用的示例:

  1. 波形显现:

    ffplay -f lavfi "amovie=input.mp4, asplit [a][out1]; [a] showwaves=colors=red:scale=sqrt [out0]"
    

    上述指令将在ffplay中显现音频文件input.mp4的波形图。经过运用showwaves滤镜,你能够可视化音频波形,指定色彩、尺度等参数。

  2. 频谱显现:

    ffplay -f lavfi "amovie=input.mp4, asplit [a][out1]; [a] showspectrum=mode=combined:color=intensity:scale=log [out0]"
    

    运用该指令,ffplay将在播映器中显现音频文件input.mp4的频谱图。经过运用showspectrum滤镜,你能够可视化音频频谱,指定色彩、形式、尺度等参数。

  3. 视频直方图:

    ffplay -vf "split=2[a][b],[a]histogram,format=yuva444p[hh],[b][hh]overlay" input.mp4
    

    上述指令将在播映器中显现视频文件input.mp4的直方图。经过运用histogram滤镜,你能够可视化视频帧的亮度分布,然后将其与原视频进行叠加显现。

这些是一些ffplay的数据可视化剖析运用示例,用于剖析音视频文件的特性和质量。