FFmpeg使用基础

本文介绍了FFmpeg的基础概念和使用,包括命令行格式、转码过程、滤镜的使用(滤镜链、滤镜图)、流拷贝和流选择。重点讲解了滤镜的多种应用,如滤镜链、滤镜图的创建,以及stream_specifier的使用方法。通过实例展示了如何在命令行中操作FFmpeg进行多媒体处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10297002.html

本文介绍FFmpeg最基础的概念,了解FFmpeg的简单使用,帮助理解FFmpeg工程源码。内容主要节选和翻译自书籍《FFmpeg Basics》及官网文档“Documentation-ffmpeg”和“Documentation-ffmpeg-all”。

1. 概述

FFmpeg是一款用于多媒体处理的自由软件工程,基于GPL许可证发布。FFmpeg提供的最核心的命令行工具是ffmpegffmpeg命令行工具的主要特征是输出快速、高品质、文件尺寸小。“FFmpeg”中“FF”表示“Fast Forward”,“mpeg”表示“Moving Pictures Experts Group”。

FFmpeg提供如下四个命令行工具:
ffmpeg 音视频编码器/解码器
ffplay 媒体播放器
ffprobe 显示媒体文件信息
ffserver 多媒体流广播服务器,使用HTTP和RTSP协议。FFmpeg 4.1版本已经删除ffserver,新的替代者还未添加进来。

FFmpeg提供如下软件开发库:
libavcodec 多媒体编解码器库
libavdevice 设备库
libavfilter 滤镜库
libavformat 媒体格式库
libavutil software library containing various utilities
libpostproc 后处理库
libswresample 音频重采样库
libswscale software library for media scaling

2. 命令行格式

命令行基本格式为:
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
格式分解如下:

ffmpeg
    global_options
        input1_options -i input1
        input2_options -i input2
        ...
            output1_options output1
            output2_options output2
            ...

ffmpeg读取任意数量的输入“文件”(可以是常规文件、管道、网络流、录制设备等,由“-i”选项指定),写入任意数量的输出“文件”。命令行中无法被解释为选项(option)的任何元素都会被当作输出文件。

每个输入或输出文件,原则上都可以包含任意数量的流。FFmpeg中流的类型有五种:视频(video)、音频(audio)、字幕(subtitle)、附加数据(attachment)、普通数据(data)。文件中流的数量和(或)流类型种数的极限值由文件封装格式决定。选择哪一路输入的哪一路流输出到哪一路输出,这个选择过程既可以由FFmpeg自动完成,也可以通过“-map”选项指定(后续“Stream selection”章节会深入描述)。

注:关于附加数据(attachment)和普通数据(data)的说明如下:

Attachments could be liner notes, related images, metadata files, fonts, etc.
Data tracks would be for things like timecode, navigation items, cmml, streaming tracks.
参考资料[3] “What are the the data and attachment stream type?

命令行中的输入文件及输入文件中的流都可以通过对应的索引引用,文件、流的索引都是从0开始。例如,2:3表示第3个输入文件中的第4个流。(后续“Stream specifiers”章节会详细描述)。

一个通用规则是:输入/输出选项(options)作用于跟随此选项后的第一个文件。因此,顺序很重要,并且可以在命令行中多次指定同一选项。每个选项仅作用于离此选项最近的下一输入或输出文件。全局选项不受此规则限制。

不要把输入文件和输出文件混在一起———应该先将输入文件写完,再写输出文件。也不要把不同文件的选项混在一起,各选项仅对其下一输入或输出文件有效,一个选项不能跨越一个文件传递到后续文件。

举几个命令行例子:

  • 设置输出文件码率为64kbit/s:
    ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
    其中“-b:v 64k”和“-bufsize 64k”是输出选项。
  • 强制输入文件帧率(仅对raw格式有效)是1fps,输出文件帧率为24fps:
    ffmpeg -r 1 -i input.m2v -r 24 output.avi
    其中“-r 1”是输入选项,“-r 24”是输出选项。
  • 转封装:将avi格式转为mp4格式,并将视频缩放为vga分辨率
    ffmpeg -y -i video.avi -s vga video.mp4
    其中“-y”是全局选项,“-s vga”是输出选项。

3. 转码过程

 _______              ______________
|  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值