1、查看版本号和功能支持

到官网 http://ffmpeg.org/download.html 下载已经编译好的ffmpeg,选用的是Windows环境下。的BtbN/FFmpeg-Builds/Auto-Build 2020-10-31的版本。

F:\zzr_work_folder\ffmpeg-n4.3.1-lgpl-shared\bin>ffmpeg -version     //解压目录下
ffmpeg version n4.3.1-22-gc464b5c205 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9.3-win32 (GCC) 20200320
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32
 --enable-version3 --disable-debug --enable-shared --disable-static --disable-debug --enable-iconv --enable-zlib --enable-libxml2 --enable-libfreetype --enable-libfribidi
--enable-gmp --enable-lzma --enable-fontconfig --enable-opencl --enable-libvmaf --disable-vulkan --enable-libvorbis --enable-amf --enable-libaom --disable-avisynth
--enable-libdav1d --disable-libdavs2 --enable-ffnvcodec --enable-cuda-llvm --disable-libglslang --enable-libass --enable-libbluray --enable-libmp3lame
--enable-libopus --enable-libtheora --enable-libvpx --enable-libwebp --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg
--enable-librav1e --disable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libtwolame --disable-libvidstab --disable-libx264
--disable-libx265 --disable-libxavs2 --disable-libxvid --enable-libzimg --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-libs=-lgomp
libavutil      56. 51.100 / 56. 51.100
libavcodec     58. 91.100 / 58. 91.100
libavformat    58. 45.100 / 58. 45.100
libavdevice    58. 10.100 / 58. 10.100
libavfilter     7. 85.100 /  7. 85.100

这个命令行除了查询当前使用的版本号以外,其实可以查询到当前ffmpeg支持的各种功能项。 以上红色标记处可以看到几个我关注的信息。可以看到x264和x265都是disable的,所以就是为什么有些很紧急的同学就问,为啥命令行分离不出264/265的码流,就是因为所使用的ffmpeg都不支持,怎么搞?

所有我们需要的版本要如何下载?以Windows为例,到官网 http://ffmpeg.org/download.html 选用Windows builds from gyan.dev跳转到https://www.gyan.dev/ffmpeg/builds/,然后下拉到release标签下选择ffmpeg-release-full-shared.7z,如下图所示,然后再试试ffmpeg -version吧骚年。

2、FFmpeg命令行基础选项

先来一组命令行示例,说说基础参数。

F:\zzr_work_folder\ffmpeg-4.3.1-2020-11-19-full_build-shared\bin>
ffmpeg   -ss 10  -i ..\test\guide.mp4 (红色为输入参数) -t 10    -vcodec copy -acodec copy  -f flv   -y   ..\test\guide_copy.flv  (蓝色为输出参数)

1、-f  format(封装格式,mp4/flv/rmvb ...)指定输入或者输出文件格式。常规可省略而使用依据扩展名(文件的前几百K的内容,智能分析)的自动指定,但一些选项需要强制明确设定,个人建议在输出文件前还是写上,增加效率。

2、-i filename (input) 指定输入文件,字面意思,不作解释。

3、-y (global)默认自动覆盖输出文件,而不再询问确认。

4、-n (global)不覆盖输出文件,如果输出文件已经存在则立即退出。

5、-t duration (input/output)限制输入/输出的时间。如果是在-i 前面,就是限定从输入文件中读取多少时间的数据;如果是用于限定输出文件,则表示写入多少时间数据后就停止。duration可以是以秒为单位的数值或者hh:mmss[xxx]格式的时间值。

6、-to position (output)只写入position 时间后就停止,position 可以是以秒为单位的数值或者hh:mm:ss[xxx]格式的时间值,譬如只输出前1分钟的视频,就可以在输出参数增加-to 60 / -to 00:01:00 注意 -to 和-t是互斥的,-t有更高优先级。-t是指整个内容的时长,而-to是指具体的时间点。

7、-ss position (input/output)当在-i 前,表示定位输入文件到position指定的位置。注意可能一些格式是不支持精确定位的,所以ffmpeg可能是定位到最接近position (在之前)的可定位点。position 可以
是以秒为单位的数值或者hh:mm:ss[xxx] 格式的时间值。

8、-[v/a/s]codec[:stream_ specifier]   (input/output,per-stream)为特定的文件选择编/解码模式,对于输出文件就是编码器,对于输入或者某个流就是解码器。
-vcodec代表的是视频编解码器,-acodec代表音频,-scodec代表是字幕。也可以写-codec:a, -codec:v, -codec:s 还可以写 -c:a, -c:v, -c:s 。如果只有-c则是针对源文件中所有流,后面加入copy参数用于复制源文件中的相关流。选项参数中[:stream_ specifier] 指定的是编解码器的名字,或者是copy(仅对输出文件)则意味着流数据直接复制而不再重新转换编码方式。譬如 -vcodec x265 指定的是以265的编码格式进行输出(要--enable-libx265才能支持)下文进行详细描述。

3、常用视频指令归纳

F:\zzr_work_folder\ffmpeg-4.3.1-2020-11-19-full_build-shared\bin>

ffmpeg -i ..\test-file\720_h264.mp4(红色为输入参数) -vcodec libx265   -r 25 -s 1280*960   -aspect 1.333333   -f mp4 -y ..\test-file\720_h265.mp4(蓝色为输出参数)

1、-vframes number (output)设置输出文件的帧数,是 -frames:v的别名。(但需要注意的是,这个是截取多少输出帧的数量,并不是控制fps)
2、-b bitrate (output)设置比特率,缺省200kb/s
2、-r[:stream_specifier] fps (input/output,per-stream)设置帧率。(一种H值,缩写或者分数值,这个才是我们常用的改变视频的fps)
3、-s[:stream_specifier] size (input/output,per-stream)设置帧的尺寸。(字面意思,缩放尺寸大小)
4、-vn (output)禁止输出视频。N:no(当想只要音频,不要视频的时候,使用此指令)
5、-vcodec codec (output)设置视频编码器,这是 -codec:v的一个别名。-vcodec代表的是视频编解码器,-acodec代表音频,-scodec代表是字幕。也可以写-codec:a, -codec:v, -codec:s 还可以写 -c:a, -c:v, -c:s 。如果只有-c则是针对源文件中所有流,后面加入copy参数用于复制源文件中的相关流。
6、-aspect[:stream_specifier] aspect (output,per-stream)指定视频的纵横比(长宽显示比例)。aspect是一个浮点数字符串或者num:den格式字符串(其值就是num/den),例如"4:3" ,"16:9" ,"1.3333"以及"1.7777"都是常用参数值。要结合(-s)指令一起使用。

4、常用音频指令归纳

F:\zzr_work_folder\ffmpeg-4.3.1-2020-11-19-full_build-shared\bin>

ffmpeg -i ..\test-file\bg.mp3(红色为输入参数) -vn -aframes 200 -acodec libmp3lame -ac 2 -ar 48000 -y ..\test-file\bgc.mp3(蓝色为输出参数)

1、-aframes number (output)设置number音频帧输出,是-frames:a的别名。(注意,这个和-vframes是一样的,就是截取多少输出帧的额数量,并不是采样率)
2、-ar[:stream_specifier] freq (input/output,per-stream)设置音频采样率。默认是输出同于输入。对于输入进行设置,仅仅通道是真实的设备或者raw数据分离出并映射的通道才有效。对于输出则可以强制设置音频量化的采用率。
3、-aq q (output)设置音频品质(编码指定为VBR),它是-q:a 的别名。一些常用的音频品质参数:
quality settings (VBR)      -aq 4 = 128 kb/s      -aq 5 = 160 kb/s      -aq 6 = 192 kb/s      -aq 7 = 224 kb/s      -aq 8= 256 kb/s
4、-ac[:stream_specifier] channels (input/output,per-stream)设置音频通道数。默认输出会有输入相同的音频通道。对于输入进行设置,仅仅通道是真实的设备或者raw数据分离出并映射的通道才有效。
5、-an (output)禁止输出音频。
6、-acode codec (input/output)设置音频解码/编码的编/解码器,是-codec:a 的别名。-vcodec代表的是视频编解码器,-acodec代表音频,-scodec代表是字幕。也可以写-codec:a, -codec:v, -codec:s 还可以写 -c:a, -c:v, -c:s 。如果只有-c则是针对源文件中所有流,后面加入copy参数用于复制源文件中的相关流。

5、字幕指令归纳

F:\zzr_work_folder\ffmpeg-4.3.1-2020-11-19-full_build-shared\bin>
ffmpeg -i ..\test-file\test.mp4 -vf subtitles=012.srt -y output1001.mp4

1、-scodec codec (input/output)设置字幕解码器,是-codec:s的别名。-vcodec代表的是视频编解码器,-acodec代表音频,-scodec代表是字幕。也可以写-codec:a, -codec:v, -codec:s 还可以写 -c:a, -c:v, -c:s 。如果只有-c则是针对源文件中所有流,后面加入copy参数用于复制源文件中的相关流。
2、-sn (output)禁止输出字幕。
3、-s: subtitle:输入字幕 
4、-vf参数,即videofilter,调用libavfilter中的函数,这样字幕流就相当于覆盖在视频流中,变成原视频流中的像素点,最后output的文件是没有字幕流的。即已把字幕像素点渲染到视频当中。

字幕格式种类:srt,ass,ssa 。。。
字幕格式转换:srt--->ass
ffmpeg -i 012.srt 012.ass

视频混入字幕流
ffmpeg -i test.mp4 -i 012.ass -c copy  -y output1002.mkv

6、 ffprobe的基础命令

在FFmpeg套件中,除了ffmpeg还有ffprobe, ffprobe 主要用来查看多媒体文件的信息,下面看一下ffprobe 中常见的基本命令.

1、ffprobe -show_ packets ..\test\guide.mp4 (输入命令之后会不断打印输入文件的所有解封装AVPacket,可以用ctrl+c暂停输出)

查看的多媒体包信息使用PACKET标签所包括起来,就是ffmpeg解封装后没解压的数据格式AVPacket,其中包含的信息主要如下:

[PACKET]
codec_type=video(多媒体类型,例如视频包,音频包等;)
stream_index=0(多媒体的stream索引;)
pts=0(多媒体的显示时间值//presentation timestamp)
pts_time=0.000000(根据不同格式计算过后的多媒体的显示时间)
dts=-2048(多媒体解码时间值//decoding timestamp)
dts_time=-0.200000(根据不同格式计算过后的多媒体解码时间)
duration=1024(多媒体包占用的时间值)
duration_time=0.100000(根据不同格式计算过后的多媒体包占用的时间值)
convergence_duration=N/A
convergence_duration_time=N/A
size=150517(多媒体包的大小)
pos=48(多媒体包所在的文件偏移位置)
flags=K_(多媒体包标记,关键包与非关键包的标记)
[/PACKET]

2、ffprobe -show_format ..\test\guide.mp4

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

[FORMAT]
filename=..\test\guide.mp4
nb_streams=1
nb_programs=0
format_name=mov,mp4,m4a,3gp,3g2,mj2
format_long_name=QuickTime / MOV
start_time=0.000000
duration=53.200000
size=2764668
bit_rate=415739
probe_score=100
TAG:major_brand=isom
TAG:minor_version=512
TAG:compatible_brands=isomiso2avc1mp41
TAG:encoder=Lavf58.12.100
[/FORMAT]

通过读取format信息,可以看到这个视频文件只有一个流通道,起始时间是0.00000,长度为85.867000,文件大小为2377700字节,码率为221523字节每秒,这个文件有可能是一个mov、有可能是mp4、有可能是m4a、有可能是3gp、有可能是3g2、也有可能是mj2,之所以ffprobe会这么输出,是因为这几种封装格式在ffmpeg中所识别的标签基本相同,所以才会这么多种显示方式,而其他种封装格式不一定是这样的

3、ffprobe -show_frames ..\test\guide.mp4 (输入命令之后会不断打印输入文件的所有解码对象AVFrame,可以用ctrl+c暂停输出)

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

[FRAME]
media_type=video (帧类型)
stream_index=0(帧所在索引区域)
key_frame=1(是否关键帧)
pkt_pts=0(frame包的pts)
pkt_pts_time=0.000000(frame包的pts的时间显示)
pkt_dts=0(frame包的dts)
pkt_dts_time=0.000000(frame包的dts的时间显示)
best_effort_timestamp=0
best_effort_timestamp_time=0.000000
pkt_duration=1024(frame包的时长)
pkt_duration_time=0.100000(frame包的时长时间显示)
pkt_pos=48(frame包所在文件的偏移位置)
pkt_size=150517(frame包的大小)
width=1280(帧显示宽度)
height=720(帧显示高度)
pix_fmt=yuv420p(帧图像格式)
sample_aspect_ratio=N/A(采样比率)
pict_type=I(帧图像类型)
coded_picture_number=0
display_picture_number=0
interlaced_frame=0
top_field_first=0
repeat_pict=0
color_range=unknown
color_space=unknown
color_primaries=unknown
color_transfer=unknown
chroma_location=left
[/FRAME]

4、ffprobe -show_streams ..\test\guide.mp4

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

[STREAM]
index=0(流所在的索引区域)
codec_name=h264(编码格式名字)
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10(编码格式全名)
profile=High(编码的profile)
codec_type=video(编码类型)
codec_time_base=1/20(编码的时间戳计算的时间基)
codec_tag_string=avc1(编码标签类型)
codec_tag=0x31637661(编码标签数据)
width=1280(设置编码宽)
height=720(设置编码高)
coded_width=1280(编码后的宽)
coded_height=720(编码后的高)
closed_captions=0
has_b_frames=2(包含b帧)
sample_aspect_ratio=N/A
display_aspect_ratio=N/A
pix_fmt=yuv420p(图像格式)
level=31(编码等级)
color_range=unknown
color_space=unknown
color_transfer=unknown
color_primaries=unknown
chroma_location=left
field_order=unknown
timecode=N/A
refs=1
is_avc=true
nal_length_size=4
id=N/A
r_frame_rate=10/1
avg_frame_rate=10/1
time_base=1/10240
start_pts=0
start_time=0.000000
duration_ts=544768
duration=53.200000
bit_rate=414656
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=532
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=1
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
TAG:language=eng
TAG:handler_name=VideoHandler
[/STREAM]

5、ffprobe -show_ frames -select_ streams v -of xml ..\test\guide.mp4

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

6、ffprobe -show_frames ..\test\guide.mp4 -print_ format json

ffprobe使用前面的参数可以获得到对应的key-value,但是阅读起来因习惯不同所以有的人认为方便,有的人认为不方便,这样就需要用到ffprobe的print__format参数来进行相应的格式输出,支持包括以下格式:xml,json,ini,csv,flat

That is ...

FFmpeg命令行,从小白入门到收藏吃灰——基础归纳相关推荐

  1. FFmpeg命令行,从小白入门到收藏吃灰——功能大全,总有你需要的!

    学习 / 工作 / 归纳 总结文档,持续更新...请先参考 基础归纳篇 1.获取视频信息,包括网络url ffmpeg -i input.mp4 ffmpeg -i http://xxx.com/vi ...

  2. [总结]FFMPEG命令行工具之ffmpeg详解

    目录 0 前言 1 语法 Synopsis 2 描述 Description 3 详细描述 Detailed description 3.1 滤镜 Filtering 3.1.1 简单滤镜图 Simp ...

  3. [总结]FFMPEG命令行工具之ffplay详解

    目录 0 前言 1 语法 Synopsis 2 描述 Description 3 选项 Options 3.1 流指定器 Stream specifiers 3.2 通用选项 Generic opti ...

  4. Git使用 从入门到入土 收藏吃灰系列(三) Git常用命令

    文章目录 一.前言 二.常用的命令 一.前言 参考安装Git 详细安装教程 参考视频B站 Git最新教程通俗易懂,这个有点长,感觉讲的精华不多 参考视频『Git』知道这些就够了_哔哩哔哩_bilibi ...

  5. [总结]FFMPEG命令行工具之ffprobe详解

    目录 0 前言 1 语法 Synopsis 2  描述 Description 3 选项 Options 3.1 流指定器 Stream specifiers 3.2 通用选项 Generic opt ...

  6. 【FFmpeg】Windows 搭建 FFmpeg 命令行运行环境

    文章目录 前言 一.下载 FFMPEG 二.拷贝可执行文件 三.拷贝动态库文件 四.运行 ffmpeg 命令 总结 前言 Android 中需要使用到 FFMPEG , 先在 Windows 中搭建一 ...

  7. 使用ffmpeg 命令行解码并显示像素格式为.raw图像

    使用ffmpeg 命令行解码并显示像素格式为.raw图像,命令如下: ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt bayer_gbrg8 -s 2448* ...

  8. FFmpeg命令行(ffmpeg、ffplay、ffprobe)

    ffmpeg命令行 A command line tool to convert multimedia files between formats. 名称 命令 解释 查看当前设备输入信息 ffmpe ...

  9. FFmpeg命令行解析

    目录标题 一.引言(Introduction) 1.1 FFmpeg简介(Overview of FFmpeg) 1.2 FFmpeg命令行的应用场景(Application Scenarios of ...

最新文章

  1. whereis php,Linux命令教程之比较搜索命令whereis与which的区别
  2. FreeRTOS知识点
  3. 如何最小化混合云中影子IT带来的风险
  4. BZOJ4589. Hard Nim
  5. 15个Java多线程面试题
  6. Android 自定义控件之圆形扩散View(DiffuseView)
  7. java html 转图片_Java 将Excel转为图片、html、XPS、XML、CSV
  8. 亲历李飞飞的AI4ALL,是一种怎样的体验?
  9. mysql 截取最后三位查询
  10. HTML:hr横线改变颜色
  11. spss分析qpcr数据_SPSS统计分析案例:Kappa一致性系数
  12. matlab环境下图像分形维数的计算,MATLAB环境下图像分形维数的计算
  13. 数值分析 解线性方程组的编程实现(Hilbert)
  14. hlg2146【多维背包】
  15. SDRAM中的DQM
  16. 一文讲透计算机网络的数据链路层
  17. 4.8 putsgets函数
  18. c语言求字符ascii,C语言中ASCII码是什么意思? c语言怎么求字符的ascii码
  19. 从字节跳动提前批来看今年校招形势
  20. CMD/DOS学习笔记

热门文章

  1. 反射 Nio channel Buffer
  2. stm32 m5311上传gps数据上onenet云平台实现地图定位
  3. Java编程语言的8大优势
  4. 六顶思考帽与单一职责
  5. 搭建gataway鉴权流程
  6. python知乎爬虫收藏夹_知乎福利收藏夹爬虫
  7. 2.Nginx实现负载均衡、限流、缓存、黑白名单和灰度发布
  8. HTML_超级链接详细讲解
  9. 蒸汽机器人布里茨天赋_LOL蒸汽机器人天赋加点_S10布里茨出装玩法_KDA电竞
  10. 临床基因组/外显组数据分析实战技术研讨会(2023.4)