FFmpeg常用命令讲解及实战二

news2024/9/22 5:40:44

文章目录

  • 前言
  • 一、ffmpeg 常用命令
    • 1、ffmpeg 的封装转换
    • 2、ffmpeg 的编转码
    • 3、ffmpeg 的基本编转码原理
  • 二、ffprobe 常用参数
    • 1、show_format
    • 2、show_frames
    • 3、show_streams
    • 4、print_format
    • 5、select_streams
  • 三、ffplay 的常用命令
    • 1、ffplay 常用参数
    • 2、ffplay 高级参数
    • 3、ffplay 的数据可视化分析应用


前言

FFmpeg 有三个作用不同的工具软件 ffmpeg.exeffplay.exeffprobe.exe,本文主要讲讲这些工具软件的使用方法。


一、ffmpeg 常用命令

ffmpeg 在做音视频编解码时非常方便,所以很多场景下转码使用的是 ffmpeg,通过 ffmpeg -help 命令操作可以看到 ffmpeg 常见的命令大概分为六部分:

  • ffmpeg 信息查询部分
  • 公共操作参数部分
  • 文件主要操作参数部分
  • 视频操作参数部分
  • 音频操作参数部分
  • 字幕操作参数部分
D:\Work\test>ffmpeg -help
ffmpeg version 6.0-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
  libavutil      58.  2.100 / 58.  2.100
  libavcodec     60.  3.100 / 60.  3.100
  libavformat    60.  3.100 / 60.  3.100
  libavdevice    60.  1.100 / 60.  1.100
  libavfilter     9.  3.100 /  9.  3.100
  libswscale      7.  1.100 /  7.  1.100
  libswresample   4. 10.100 /  4. 10.100
  libpostproc    57.  1.100 / 57.  1.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Getting help:
    -h      -- print basic options
    -h long -- print more options
    -h full -- print all options (including all format and codec specific options, very long)
    -h type=name -- print all options for the named decoder/encoder/demuxer/muxer/filter/bsf/protocol
    See man ffmpeg for detailed description of the options.

Print help / information / capabilities:
-L                  show license
-h topic            show help
-? topic            show help
-help topic         show help
--help topic        show help
-version            show version
-buildconf          show build configuration
-formats            show available formats
-muxers             show available muxers
-demuxers           show available demuxers
-devices            show available devices
-codecs             show available codecs
-decoders           show available decoders
-encoders           show available encoders
-bsfs               show available bit stream filters
-protocols          show available protocols
-filters            show available filters
-pix_fmts           show available pixel formats
-layouts            show standard channel layouts
-sample_fmts        show available audio sample formats
-dispositions       show available stream dispositions
-colors             show available color names
-sources device     list sources of the input device
-sinks device       list sinks of the output device
-hwaccels           show available HW acceleration methods

Global options (affect whole program instead of just one file):
-loglevel loglevel  set logging level
-v loglevel         set logging level
-report             generate a report
-max_alloc bytes    set maximum size of a single allocated block
-y                  overwrite output files
-n                  never overwrite output files
-ignore_unknown     Ignore unknown stream types
-filter_threads     number of non-complex filter threads
-filter_complex_threads  number of threads for -filter_complex
-stats              print progress report during encoding
-max_error_rate maximum error rate  ratio of decoding errors (0.0: no errors, 1.0: 100% errors) above which ffmpeg returns an error instead of success.

Per-file main options:
-f fmt              force format
-c codec            codec name
-codec codec        codec name
-pre preset         preset name
-map_metadata outfile[,metadata]:infile[,metadata]  set metadata information of outfile from infile
-t duration         record or transcode "duration" seconds of audio/video
-to time_stop       record or transcode stop time
-fs limit_size      set the limit file size in bytes
-ss time_off        set the start time offset
-sseof time_off     set the start time offset relative to EOF
-seek_timestamp     enable/disable seeking by timestamp with -ss
-timestamp time     set the recording timestamp ('now' to set the current time)
-metadata string=string  add metadata
-program title=string:st=number...  add program with specified streams
-target type        specify target file type ("vcd", "svcd", "dvd", "dv" or "dv50" with optional prefixes "pal-", "ntsc-" or "film-")
-apad               audio pad
-frames number      set the number of frames to output
-filter filter_graph  set stream filtergraph
-filter_script filename  read stream filtergraph description from a file
-reinit_filter      reinit filtergraph on input parameter changes
-discard            discard
-disposition        disposition

Video options:
-vframes number     set the number of video frames to output
-r rate             set frame rate (Hz value, fraction or abbreviation)
-fpsmax rate        set max frame rate (Hz value, fraction or abbreviation)
-s size             set frame size (WxH or abbreviation)
-aspect aspect      set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)
-display_rotation angle  set pure counter-clockwise rotation in degrees for stream(s)
-display_hflip      set display horizontal flip for stream(s) (overrides any display rotation if it is not set)
-display_vflip      set display vertical flip for stream(s) (overrides any display rotation if it is not set)
-vn                 disable video
-vcodec codec       force video codec ('copy' to copy stream)
-timecode hh:mm:ss[:;.]ff  set initial TimeCode value.
-pass n             select the pass number (1 to 3)
-vf filter_graph    set video filters
-b bitrate          video bitrate (please use -b:v)
-dn                 disable data

Audio options:
-aframes number     set the number of audio frames to output
-aq quality         set audio quality (codec-specific)
-ar rate            set audio sampling rate (in Hz)
-ac channels        set number of audio channels
-an                 disable audio
-acodec codec       force audio codec ('copy' to copy stream)
-ab bitrate         audio bitrate (please use -b:a)
-af filter_graph    set audio filters

Subtitle options:
-s size             set frame size (WxH or abbreviation)
-sn                 disable subtitle
-scodec codec       force subtitle codec ('copy' to copy stream)
-stag fourcc/tag    force subtitle tag/fourcc
-fix_sub_duration   fix subtitles duration
-canvas_size size   set canvas size (WxH or abbreviation)
-spre preset        set the subtitle options to the indicated preset

ffmpeg 信息查询部分主要参数:
其中通过 ffmpeg --help 查看到的 help 信息是基础的信息,如果想获得高级参数部分,可以通过使用 ffmpeg --help long 参数来查看,如果希望获得全部的帮助信息,可以同过使用 ffmpeg --help full 参数来获得。

通过 -L 参数,可以看到 ffmpeg 目前所支持的 license 协议,通过 -version 查看 ffmpeg 的版本,这里所查看的版本, 是详细的版本,包含 libavformatlibavcodeclibavutillibavfilterlibswscalelibswresample 的版本。

有时候使用 ffmpeg 转码,发现无法解析视频文件,或者无法生成视频文件,报一些不支持生成对应的视频文件的错误,这个时候就需要查看当前使用的 ffmpeg 是否支对应的视频文件格式,需要使用 ffmpeg -formats 来查看。
封装格式/解封装格式如下图:
在这里插入图片描述
注:因列表比较长,因此只截取一部分

在上面输出的内容中,分为三部门:

  • 第一列是多媒体文件格式的 Demuxing 支持与 Muxing 支持;
  • 第二列是多媒体文件格式;
  • 第三列是文件格式的详细说明。

1、ffmpeg 的封装转换

  • Avformat
  • Avcodec
  • Avutil

FFmpeg 的封装转换部分,主要是通过 libavformat 这部分来完成的功能,通过 libavformat 库进行 mux 和 demux 操作,多媒体文件的格式有很多种,但是还是有好多 demux 与 mux 的操作参数是公用的,下面来详细介绍一下这些公用的参数:

  • avioflags:format 的缓冲设置,默认为 0,就是有缓冲;
  • direct:无缓冲状态;
  • probesize:获得文件内容的大小;
  • formatprobesiz:设置一个获得文件内容的大小来解析文件的 format;
  • fflags: 设置读取或者写出的格式的形式的标签,分为多种方式:flush_packets,ignidx,genpts,nofillin,noparse,igndts,discardcorrupt,sortdts,keepside,fastseek,latm,nobuffer,bitexact

下面针对这些 format 读写方式进行一一详解:
AVPacket(压缩的 h264/aac),AVFrame(原始未压缩:yuv,pcm)

  • flush_packets:立即将 packets 数据刷新入文件中;
  • genpts:输出是产生 pts; //pts, presentation timestamp, dts:decoding timestamp
  • nofillin:不填写可以精确计算缺失的值;
  • igndts:忽略 dts;
  • discardcorrupt:丢弃损坏的帧;
  • sortdts:尝试以 dts 的顺序为准输出;
  • keepside:不合并数据;
  • fastseek:快速 seek,但是不够精确;
  • latm:设置 RTP MP4_LATM 生效;
  • nobuffer:直接读取或者写出,不存 buffer;
  • bitexact:不写入随机或者不稳定的数据;
  • seek2any:支持随意 seek,这个 seek 可以不以 keyframe 为参考;
  • analyzeduration:指定解析媒体所需要花销的时间,这里设置的值越高,解析的越准确,如果在直播中为了降低延迟, 这个可以设置得低一些;
  • codec_whitelist:设置可以解析的 codec 的白名单;
  • format_whitelist:设置可以解析的 format 的白名单;

2、ffmpeg 的编转码

FFmpeg 的编解码部分主要是通过 libavcodec 这个库来完成的功能,通过 libavcodec 库进行 encode 与 decode 操作,多媒体的编码格式种类很多,但是还是有好多基本的操作参数是共同可以设置的,下面来详细介绍一下这些公用的参数:
通过查看 ffmpeg 的 help full 参数可以看到 AVCodecContext AVOptions,在这个选项下面的所有参数均为编解码可以使用的参数:

  • b:设置音频与视频码率,可以认为是音视频加起来的码率,默认为 200k;使用这个参数可以根据 b:v 设置视频码率,b:a 设置音频码率;
  • ab:设置音频的码率, 默认是 128k;
  • g:设置视频 GOP 大小,关键帧间隔,默认是 12 帧一个 gop;// r:帧率,比如 25 帧一个 gop
  • ar:设置音频采样率,默认为 0;
  • ac:设置音频通道数,默认为 0;
  • bf:设置非 B 帧之间的 B 帧个数,默认为 0; // Ibbpbbpbbp, Ipppppppp
  • maxrate:最大码率设置,与 bufsize 一同使用即可, 默认为 0;
  • minrate:最小码率设置,配合 maxrate 与 bufsize 可以设置为 CBR 模式,平时基本没用, 默认为 0;
  • bufsize:设置控制码率的 buffer 的大小,默认为 0;
  • keyint_min:设置最小 IDR 帧间隔,默认为 25;// I 帧,IDR 帧不同;
  • sc_threshold:设置场景切换支持,默认为 0;
  • me_threshold:设置运动估计阀值,默认为 0;
  • mb_threshold:设置宏块阀:threshold 值, 默认为 0;
  • profile:设置音视频的 profile,默认为 -99;
  • level:设置音视频的 level,默认为 -99;
  • imecode_frame_start:设置 GOP 帧的开始时间, 需要在 non-drop-frame 默认情况下使用;
  • channel_layout:设置音频通道的布局格式;
  • threads:设置编解码等工作的线程数;

3、ffmpeg 的基本编转码原理

ffmpeg 工具主要用途为编码、解码和转码,常用 ffmpeg 做的为转码操作,使用 ffmpeg 转码主要原理为:
在这里插入图片描述

二、ffprobe 常用参数

ffprobe 常用参数比较多, 可以用过 ffprobe --help 来查看详细的信息.

ffprobe -show_packets "input_file":查看的多媒体包信息使用 PACKET 标签所包括起来, 其中包含的信息主要如下:

  • codec_type:多媒体类型,例如视频包,音频包等;
  • stream_index:多媒体的 stream 索引;
  • pts:多媒体的显示时间值;//presentation timestamp
  • pts_time:根据不同格式计算过后的多媒体的显示时间;
  • dts:多媒体解码时间值; //decoding timestamp
  • duration:多媒体包占用的时间值;
  • duration_time:根据不同格式计算过后的多媒体包占用的时间值;
  • size:多媒体包的大小;
  • pos:多媒体包所在的文件偏移位置;
  • flags:多媒体包标记,关键包与非关键包的标记;

1、show_format

除了 packets 与 data 外,ffprobe 还可以分析多媒体的封装格式,通过 show_format 参数可以查看多媒体的封装格式,封装格式使用 FORMAT 标签括起来显示:

ffprobe -show_format "input_file"

在这里插入图片描述
通过读取 format 信息,可以看到这个视频文件有两个流通道,起始时间是 0.000000,长度为 105.282000,文件大小为 21045377 字节,码率为 1599162 字节每秒。

2、show_frames

通过 ffprobe 的 show_frames 的参数可以查看视频文件中的帧信息, 输出的帧信息使用 FRAME 标签括起来

通过 -show_frames 参数查看到如图的信息, 能够看到每一帧的信息, 下面介绍一下重要的信息:
在这里插入图片描述
在这里插入图片描述

3、show_streams

通过 -show_streams 参数可以查看到多媒体文件中的流信息,流的信息使用 STREAMS 标签括起来:

如图所示,可以看到流的信息:
在这里插入图片描述

4、print_format

ffprobe 使用前面的参数可以获得到对应的 key-value,但是阅读起来因习惯不同,所以有的人认为方便,有的人认为不方便,这样就需要用到 ffprobe 的 print_format 参数来进行相应的格式输出,下面举几种输出的例子:

ffprobe -show_frames "input_file" -print_format json

最后一项可选:xml,json,ini,csv,flat

5、select_streams

如果只查看音频流或视频流,使用 select_streams 参数即可,例如只查看视频流的 frames 信息

ffprobe -show_frames -select_streams v -of xml "input_file"

三、ffplay 的常用命令

通常使用 ffplay 作为播放器,其实 ffplay 不但可以做播放器,同样可以作为很多图像化音视频数据的分析根据,通过 ffplay 可以看到视频图像的运动估计方向,音频数据的波形等。

1、ffplay 常用参数

ffplay 不仅仅是播放器,同时也是测试 ffmpeg 的 codec 引擎,format 引擎,以及 filter 引擎的工具,并且也可以做可视化的媒体参数分析,可以通过 ffplay --help 进行查看:

常见参数可以手动进行尝试:

  • 如果希望从视频的第 30 秒开始播放,播放 10 秒钟的文件,则可以使用如下命令:
    • ffplay -ss 30 -t 10 input.mp4
  • 如果希望视频播放时播放器的窗口显示标题为自定义标题,则使用如下命令:
    • ffplay -window_title "Hello World, This is a sample" output.mp4
  • 使用 ffplay 打开网络直播流,可以使用命令:
    • ffplay -window_title "播放测试" rtmp://up.v.test.com/live/stream

2、ffplay 高级参数

通过使用 ffplay --help 参数看到帮助信息比较多,其中包含了高级参数介绍,下面详细介绍一下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、ffplay 的数据可视化分析应用

使用 ffplay 除了可以播放视频流媒体文件之外,还可以作为可视化的视频流媒体分析工具,例如当播放音频文件时,不确定文件的声音是否正常,噪声数据等分析,可以直接使用 ffplay 播放音频文件,播放的时候将会把解码后的音频数据以音频波形显示出来:

ffplay -showmode 1 1.mp3

在这里插入图片描述
从图中可以看到,音频的播放时的波形可以通过振幅显示出来,可以用来看到音频的播放情况


我的qq:2442391036,欢迎交流!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1245074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ARCore:在Android上构建令人惊叹的增强现实体验

ARCore:在Android上构建令人惊叹的增强现实体验 一、 AR 介绍1.1 AR技术简介1.2 AR技术原理1.3 AR技术应用领域 二、Google的增强现实平台ARCore2.1 ARCore简介2.2 ARCore API介绍2.3 ARCore API使用示例 三、总结 一、 AR 介绍 增强现实 Augmented Reality&#x…

python中一个文件(A.py)怎么调用另一个文件(B.py)中定义的类AA详解和示例

本文主要讲解python文件中怎么调用另外一个py文件中定义的类,将通过代码和示例解读,帮助大家理解和使用。 目录 代码B.pyA.py 调用过程 代码 B.py 如在文件B.py,定义了类别Bottleneck,其包含卷积层、正则化和激活函数层,主要对…

【OpenCV实现图像:可视化目标检测框】

文章目录 概要画框函数代码实现标签美化角点美化透明效果小结 概要 目标检测框的可视化在计算机视觉和机器学习领域中是一项重要的任务,有助于直观地理解和评估目标检测算法的性能。通过使用Python和相关的图像处理库,可以轻松实现目标检测框的可视化。…

图神经网络的数学原理总结

图深度学习(Graph Deep Learning) 多年来一直在加速发展。许多现实生活问题使GDL成为万能工具:在社交媒体、药物发现、芯片植入、预测、生物信息学等方面都显示出了很大的前景。 本文将流行的图神经网络及其数学细微差别的进行详细的梳理和解释,图深度学…

docker国内镜像加速

创建或修改 /etc/docker/daemon.json 文件,修改为如下形式 {"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"] } Docker中国区官方镜像htt…

OpenWRT软路由web界面如何远程访问

文章目录 1.openWRT安装cpolar2.配置远程访问地址3.固定公网地址 简单几步实现在公网环境下远程访问openWRT web 管理界面,使用cpolar内网穿透创建安全隧道映射openWRT web 界面面板443端口,无需公网IP,无需设置路由器。 1.openWRT安装cpola…

redis运维(十七)事务

一 redis事务 事务核心参考 ① 基础概念 1、场景引入核心:通过现象思考原因? 2、事务的概念 3、事务四大特性说明: redis只具备部分特性 重点1: 原子性和一致性 重点2: 隔离性和持久性 ② redis的事务 1、基础铺垫备注&…

关于easy-es的聚合问题

es实体类&#xff1a; public class ChemicalES {IndexId(type IdType.CUSTOMIZE)private Long id;HighLightIndexField(fieldType FieldType.TEXT, analyzer "ik_max_word")private String name;IndexField(fieldType FieldType.KEYWORD)private List<Stri…

uni-app 跨端开发注意事项

文章目录 前言H5正常但App异常的可能性标题二H5正常但小程序异常的可能性小程序正常但App异常的可能性小程序或App正常&#xff0c;但H5异常的可能性App正常&#xff0c;小程序、H5异常的可能性使用 Vue.js 的注意区别于传统 web 开发的注意H5 开发注意微信小程序开发注意支付宝…

【JavaSE】基础笔记 - 异常(Exception)

目录 1、异常的概念和体系结构 1.1、异常的概念 1.2、 异常的体系结构 1.3 异常的分类 2、异常的处理 2.1、防御式编程 2.2、异常的抛出 2.3、异常的捕获 2.3.1、异常声明throws 2.3.2、try-catch捕获并处理 3、自定义异常类 1、异常的概念和体系结构 1.1、异常的…

vue一个页面左边是el-table表格 当点击每条数据时可以在右边界面编辑表格参数,右边保存更新左边表格数据

实现思路&#xff1a; 1.点击当前行通过row拿到当前行数据。 2.将当前行数据传给子组件。 3.子组件监听父组件传过来的数据并映射在界面。 4.点击保存将修改的值传给父组件更新表格。 5.父组件收到修改过后的值&#xff0c;可以通过字段判断比如id&#xff0c;通过 findIn…

81基于matlab GUI的图像处理

基于matlab GUI的图像处理&#xff0c;功能包括图像颜色处理&#xff08;灰度图像、二值图像、反色变换、直方图、拉伸变换&#xff09;&#xff1b;像素操作&#xff08;读取像素、修改像素&#xff09;、平滑滤波&#xff08;均值平滑、高斯平滑、中值平滑&#xff09;、图像…

基于element自动表单设计

需求是根据JSON文件生成表单&#xff0c;包含配置和自动model属性以及表单验证&#xff0c;数据回显。 目录 动态表单数据示例&#xff1a; 表单设置JSON示例&#xff1a; 表单输入JSON示例&#xff1a; 表单按钮JSON示例&#xff1a; 抛出数据示例&#xff1a; 动态表单…

如何将音频添加到视频并替换视频中的音轨

随着视频流媒体网站的流行和便携式设备的发展&#xff0c;你可能越来越倾向于自己制作视频并在互联网上分享。有时&#xff0c;你可能还需要编辑视频并为其添加背景音乐&#xff0c;因为音乐总是对视频的感知起着神奇的作用。 那如何给视频添加音频呢&#xff1f;或者如何用新…

[点云分割] 基于法线差的分割

效果&#xff1a; 总体思路&#xff1a; 1、计算DoN特征 2、依据曲率进行过滤 3、依据欧式距离进行聚类 计算DoN特征的目的是为了提供准确的曲率信息。 其他&#xff1a; 计算DoN特征&#xff0c;这个算法是一种基于法线差异的尺度滤波器&#xff0c;用于点云数据。对于点…

大数据分析与应用实验任务九

大数据分析与应用实验任务九 实验目的 进一步熟悉pyspark程序运行方式&#xff1b; 熟练掌握pysaprkRDD基本操作相关的方法、函数&#xff0c;解决基本问题。 实验任务 进入pyspark实验环境&#xff0c;打开命令行窗口&#xff0c;输入pyspark&#xff0c;完成下列任务&am…

视频剪辑达人分享:高效减片头时长并调整播放速度的技巧,提升视频品质

在视频剪辑的过程中&#xff0c;许多初学者经常会遇到一些问题&#xff0c;如片头过长、播放速度不适当等&#xff0c;这些问题不仅会影响观众的观看体验&#xff0c;还会对视频品质产生负面影响。在调整播放速度时&#xff0c;要根据视频内容来进行调整。一般来说&#xff0c;…

git的用法

目录 一、为什么需要git 二、git基本操作 2.1、初始化git仓库 2.2、配置本地仓库的name和email 2.3、认识工作区、暂存区、版本库 三、git的实际操作 3.1 提交文件 3.2 查看git状态以及具体的修改 3.3 git版本回退 git reset 3.1 撤销修改 四、git分支管理 4.…

洛谷 P1883 函数

P1883 函数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Error Curves - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这两题是一模一样的&#xff0c;过一题水两题。 分析 主要难点在于证明F(x)是一个单峰函数可以被三分&#xff0c;但是我随便画了几个f(x)之后发现好像…

Shell循环:for(一)

语法结构&#xff1a; for 变量名 [ in 取值列表] do 循环体 done 示例1&#xff1a; 1、需求&#xff1a;自动循环创建10个用户 2、演示&#xff1a; [rootlocalhost ~]# vim for.sh #脚本编写 #!/bin/bash for i in {1..10} do useradd "user$…