FFmpeg命令行实践

FFmpeg命令行实践

  • 1 概述
  • 2 基本原理
  • 3 命令行选项
  • 4 命令行实践
    • 4.1 音频转换
    • 4.2 视频转换
      • 4.2.1提取mkv中视频流转为h264裸流
      • 4.2.2 提取前5s时间转h264
      • 4.2.3 根据codec进行转换
      • 4.2.4 设置输出码率,帧率
      • 4.2.5 设置输出分辨率
      • 4.2.5 转yuv裸流文件
  • 5 结语

1 概述

参考官方文档:https://www.ffmpeg.org/ffmpeg.html
官方给出的定义:ffmpeg是一个非常快速的音视频转换器。

2 基本原理

FFmpeg实现音视频转换基本原理,首先输入文件经过解封装得到编码的数据–>经过解码器得到原始的的音视频数据–>再经过编码器重新编码成目标codec,最终经过封装器得到输出文件。整个流程是一个面向过程的实现方式,从输入经过一系列处理得到最终输出文件,比较容易理解。

 _______              ______________
|       |            |              |
| input |  demuxer   | encoded data |   decoder
| file  | ---------> | packets      | -----+
|_______|            |______________|      |
                                           v
                                       _________
                                      |         |
                                      | decoded |
                                      | frames  |
                                      |_________|
 ________             ______________       |
|        |           |              |      |
| output | <-------- | encoded data | <----+
| file   |   muxer   | packets      |   encoder
|________|           |______________|

3 命令行选项

FFmpeg命令行分为三个部分,一个是全局选项,一个是输入选项和一个输出选项。

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...

学习命令行肯定离不开使用帮助,这么多的命令直接记住是不可能的,也没啥必要,用到时候再查比较靠谱,当然常见的用多了自然也记住了。这里用的是ffmpeg 3.4.2-2版本,看着也不是很多命令这边直译一下其中比较常用的命令选项基本含义。

ffmpeg -h

全局选项 :
-y                  覆盖输出文件(危险)
-n                  不覆盖输出文件
-filter_threads     filter使用的线程数(默认是cpu数)
-filter_complex_threads  filter_complex线程数
-stats              打印编码进度/统计信息
-vol volume         修改音频音量 (256=normal)

文件的主要选项(输入/输出):
-f fmt              强制输入或输出文件格式
-c codec            指定编解码名称
-codec codec        指定编解码名称
-t duration         持续时间(单位s)
-to time_stop       停止时间
-fs limit_size      文件大小限制
-ss time_off        设置起始时间偏移
-sseof time_off     设置反向偏移(距结束位置)
-seek_timestamp     enable/disable seeking by timestamp with -ss
-timestamp time     设置录制时间戳 ('now' to set the current time)
-metadata string=string 添加元数据键值对
-program title=string:st=number...  add program with specified streams
-target type        设置目标文件类型 ("vcd", "svcd", "dvd", "dv" or "dv50" with optional prefixes "pal-", "ntsc-" or "film-")
-apad               填充输出音频流
-frames number      设置输出多少帧数

视频选项:
-vframes number     设置输出的视频帧数
-r rate             设置帧率(Hz 值、分数或缩写)
-s size             设置帧大小(WxH or abbreviation)
-aspect aspect      指定的视频显示纵横比 (4:3, 16:9 or 1.3333, 1.7777)
-bits_per_raw_sample number  set the number of bits per raw sample
-vn                 disable video
-vcodec codec       设置视频编解码器。别名-codec:v
-timecode hh:mm:ss[:;.]ff  指定用于初始的时间码
-pass n             用于进行两次视频编码 (1 to 3)
-vf filter_graph    别名-filter:v
-ab bitrate         指定音频码率 (please use -b:a)
-b bitrate          指定视频码率 (please use -b:v)
-dn                 关闭视频数据

音频选项:
-aframes number     设置音频输出帧数
-aq quality        -q:a 的别名
-ar rate            设置音频采样率 (in Hz)
-ac channels        设置音频通道数
-an                 关闭音频数据
-acodec codec       指定音频编码器别名:-c:a
-vol volume         设置音频音量 (256=normal)
-af filter_graph    设置音频滤镜

字幕选项:
-s size             设置回调帧分辨率 (WxH or abbreviation)
-sn                 关闭字幕
-scodec codec       设置字幕codec ('copy' to copy stream)
-fix_sub_duration   修复字幕持续时间
-canvas_size size   设置用于渲染字幕的画布大小(WxH or abbreviation)

4 命令行实践

4.1 音频转换

不覆盖文件的情况下将输入封装音视频Titanic.mkv文件中提取音频部分数据保存成wav;其中音频输出采样率设置为16k,音频通道设置为单通道,音频编码数据设置为pcm16。

ffmpeg -n -i Titanic.mkv -ar 16000 -ac 1 -acodec pcm_s16le Titanic_s16le.wav

输出文件利用mediainfo查看如下:
FFmpeg命令行实践_第1张图片
这个用来转换为任意需要的编码格式,采样率和采样通道数。具体codec支持的编码方式可以利用下面命令进行查看

#查看本机音视频支持的编码方式
ffmpeg -encoders
#其他参数查看方式也是这样
#查看本机音视频支持的解码方式
ffmpeg -decoders
#查看本机音视频支持的解码方式
ffmpeg -decoders
#查看本机音视频支持的文件格式
ffmpeg -formats
#查看本机音视频支持的滤镜格式
ffmpeg -filters

4.2 视频转换

4.2.1提取mkv中视频流转为h264裸流

ffmpeg -n -i Titanic.mkv Titanic.h264

4.2.2 提取前5s时间转h264

ffmpeg -y -t 5 -i Titanic.mkv Titanic.h264

4.2.3 根据codec进行转换

ffmpeg -y -t 5 -i Titanic.mkv -codec libx264 Titanic.h264
在这里插入图片描述

4.2.4 设置输出码率,帧率

码率设置为4M/s帧率设置为1帧/s

ffmpeg -y -t 5 -i Titanic.mkv -codec libx264 -b:v 4M -r:v 1 Titanic.h264
在这里插入图片描述

4.2.5 设置输出分辨率

ffmpeg -y -t 5 -i Titanic.mkv -codec libx264 -b:v 4M -r:v 1 -s 1080x720 Titanic.h264
在这里插入图片描述

4.2.5 转yuv裸流文件

ffmpeg -y -t 5 -i Titanic.h264 Titanic.yuv

5 结语

本文主要是针对常用命令行进行实操,熟悉基本的命令选项,对应比较高级的用法没有涉及到,比如滤镜功能,具体使用方法还是需要看官方文档。

你可能感兴趣的:(FFmpeg实践,ffmpeg,音频编码解码,视频处理)