FFmpeg命令行实践

news/2024/7/10 20:48:43 标签: 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查看如下:
在这里插入图片描述
这个用来转换为任意需要的编码格式,采样率和采样通道数。具体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 结语

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


http://www.niftyadmin.cn/n/927495.html

相关文章

Ubuntu18.04 PulseAudio实战

1 前言 2 下载编译 具体构建过程参照官方文档&#xff1a;https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/Developer/PulseAudioFromGit/ 2.1 下载代码 git clone git://anongit.freedesktop.org/pulseaudio/pulseaudio 2.2 编译 编译过程遇到太多错…

Ubuntu18.04 x264命令行实操

Ubuntu18.04 x264命令行实操1 源码下载编译2 基本参数介绍2.1 profile参数详解2.2 tune参数详解2.3 preset参数详解2.4 速率控制QPABRCBR2-Pass ABRCRFVBV3 命令行实践3.1 查看帮助3.2 输入文件3.2 输出文件3.3 基本命令3.4 参考文献1 源码下载编译 https://code.videolan.org…

dpkg: error processing package xxx解决方法

1 错误内容&#xff1a; rootxxx:/home/my_project/application-necessities# sudo apt-get -y install build-essential nghttp2 libnghttp2-dev libssl-dev Reading package lists... Done Building dependency tree Reading state information... Done build-essent…

curl: (60) SSL certificate problem: certificate has expired终极解决方案

问题&#xff1a; rootubuntu-64bit:/home/work/avs_project/build# curl -I https://nghttp2.org/ -v * Trying 139.162.123.134... * TCP_NODELAY set * Connected to nghttp2.org (139.162.123.134) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * Ciph…

mosquitto-1.5.7交叉编译

1 下载源文件 下载地址&#xff1a;http://mosquitto.org/files/source/ tar -xvf mosquitto-1.5.7.tar.gz cd mosquitto-1.5.7 2 修改配置 vi config.mk #修改下面配置 WITH_SRV:no WITH_UUID:no WITH_WEBSOCKETS:no WITH_DOCS:no #添加ssl交叉编译库路径和头文件路径 CFLAGS…

设计模式初探

设计模式初探0 前言1 基础知识1.1 组合优于继承1.2 虚函数继承1.3 类之间的关系2 设计原则1.1 开放封闭原则1.2 单一职责原则1.3 接口隔离原则1.4 里氏替换原则1.5 面向接口原则1.6 依赖倒置原则1.7 封装变化点1.8 组合优于继承2 模板方法3 观察者模式4 策略模式0 前言 设计模…

设计模式之二

设计模式之二1 单例模式&#xff1a;2 工厂模式3 抽象工厂模式4 责任链模式5 装饰器模式1 单例模式&#xff1a; 很多人看到单例&#xff0c;马上就激动了&#xff0c;这题我会&#xff01; 然后就是在静态全局区new了一个对象&#xff0c;其实单例模式存在很多陷阱。 定义&am…

交叉编译小结

交叉编译小结前言1 环境准备2 交叉编译2.1 源码获取2.2 交叉编译编译2.3 三方库交叉编译两种方式&#xff1a;2.3.1 configure2.3.2 cmake前言 交叉编译一般是利用虚拟机将三方源码进行编译成目标机想要的可执行程序或者库文件。这个过程一般需要目标机的交叉编译环境&#xf…