ffmpeg的基础命令

文章目录

具体文档

https://www.ffmpeg.org/documentation.html

ffmpeg/ffplay/ffprobe区别

ffmpeg 的作用

用于在格式之间转换多媒体文件的命令行工具

ffplay的作用

基于SDL和ffmpeg库的简单媒体播放器

ffprobe的作用

一个简单的多媒体流分析器

注意三者在查看帮助文档的时候 都可以调用 名称 -h的命令来查看

ffmpeg

使用概述

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

功能概述

FFMPEG 是一个通用媒体转换器。它可以读取各种输入 - 包括实时抓取/录制设备 - 过滤并将它们转码为多种输出格式。

转码过程

简单使用

FFMPEG -i

从 -i 选项指定的任意数量的输入"文件"(可以是常规文件、管道、网络流、抓取设备等)中读取,并写入任意数量的输出"文件",这些输出"文件"由普通输出 URL 指定。在命令行上找到的任何不能解释为选项的内容都被视为输出 URL。

这个属性 -i 一般需要首要指定

不要混用输入和输出文件 -- 首先指定所有输入文件,然后指定所有输出文件。另外,不要混用属于不同文件的选项。所有选项仅适用于下一个输入或输出文件,并在文件之间重置。

常用的 -i例子
  • 1:通过重新编码媒体流,将输入媒体文件转换为其他格式
    ffmpeg -i input.avi output.mp4

  • 2:将输出文件的视频码率设置为64 kbit/s:
    ffmpeg -i input.avi -b:v 64k -bufsize 64k output.mp4

    修改视频的码率 用 -b:v 修改音频的码率 -b:a

  • 3:强制输出文件的帧速率为 24 fps:
    ffmpeg -i input.avi -r 24 output.mp4

  • 4 强制输入文件的帧速率(仅对原始格式有效)为 1 fps,并且 输出文件的帧速率为 24 fps

  • ffmpeg -r 1 -i input.m2v -r 24 output.mp4

    注意这样会让输入的视频帧率为1帧 输出的一般也是一帧了

ff***工具之间共享的选项

命令 作用
-L 显示许可证。
-h, -?, -help, --help arg 显示帮助。可以指定一个可选参数来打印有关特定项目的帮助。如果未指定参数,则仅显示基本(非高级)工具选项。
上面arg 的可能值为: long:除了基本工具选项外,还可以打印高级工具选项 full:打印选项的完整列表,包括编码器、解码器、解复用器、多路复用器、滤波器等的共享和私有选项。
type=name 类型 =姓名 来查看关键组件的信息 类型有encoder demuxer muxer filter bsf protocol 等
-version 显示版本。
-buildconf 显示构建配置,每行一个选项。
-formats 显示可用格式(包括设备)。
-demuxers 显示可用的解复用器。
-muxers 显示可用的多路复用器。
-devices 显示可用设备。
-codecs 显示 libavcodec 已知的所有编解码器。
-decoders 显示可用的解码器
-encoders 显示所有可用的编码器。
-bsfs 显示可用的比特流滤波器。
-protocols 显示可用的协议。
-filters 显示可用的 libavfilter 过滤器。
-pix_fmts 显示可用的像素格式。
-sample_fmts 显示可用的样本格式。
-dispositions 显示流处置。
-colors 显示已识别的颜色名称。
-sources 显示输入设备的自动检测源。某些设备可能提供无法自动检测的系统相关源名称。不能假定返回的列表始终是完整的。
-sinks device,opt1=val1\[,opt2=val2...] 显示输出设备的自动检测到的接收器。某些设备可能提供无法自动检测的系统相关接收器名称。不能假定返回的列表始终是完整的。
-loglevel flags+loglevel -v flags+loglevel
-report 将完整的命令行和日志输出转储到当前目录中名为 program-YYYYMMDD-HHMMSS.log 的文件。此文件对于错误报告非常有用。它还意味着 -loglevel 调试。
-hide_banner 禁止打印横幅。 所有 FFmpeg 工具通常会显示版权声明、构建选项和库版本。此选项可用于禁止打印此信息。
-cpuflags flags (global) 允许设置和清除 cpu 标志。此选项用于测试。除非您知道自己在做什么,否则不要使用它。
-cpucount count (global) CPU 计数的覆盖检测。此选项用于测试。除非您知道自己在做什么,否则不要使用它。
-max_alloc bytes 通过 ffmpeg 的 malloc 函数系列设置在堆上分配块的最大大小限制。使用此选项时要格外小心。如果您不了解这样做的全部后果,请不要使用。默认值为 INT_MAX。

ffmpeg主要选项

选项 作用
-f fmt (input/output) 强制输入或输出文件格式。对于输入文件,该格式通常是自动检测的,并从输出文件的文件扩展名中猜测出来,因此在大多数情况下不需要此选项。
-i url (input) input file url 输入文件 URL
-y (global) 在不询问的情况下覆盖输出文件。
-n (global) 请勿覆盖输出文件,如果指定的输出文件已存在,请立即退出。
-stream_loop number (input) 设定应循环输入流的次数。循环 0 表示无循环,循环 -1 表示无限循环。 就是循环播放视频或者音频的次数
-recast_media (global) 允许强制使用与解复用器检测或指定的媒体类型不同的解码器。用于解码作为数据流多路复用的媒体数据。
-c:stream_specifier 或 -codec:stream_specifier 为流选择编码器或者解码器 'ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT'
-t duration (input/output) 当用作输入选项时(在 -i 之前),请限制从输入文件读取数据的持续时间。用作输出选项(在输出 url 之前)时,在其持续时间达到持续时间后停止写入输出。
-to position (input/output) 停止写入输出或读取位置的输入。position 必须是持续时间规范,-to 和 -t 是互斥的,-t 具有优先权。
-fs limit_size (output) 设置文件大小限制,以字节为单位。超过限制后,不会再写入字节块。输出文件的大小略大于请求的文件大小。
-ss position (input/output) 当用作输入选项(在 -i 之前)时,在此输入文件中查找位置。请注意,在大多数格式中,不可能精确地搜索,因此 ffmpeg 将在位置之前搜索最近的搜索点。当转码 and -accurate_seek 启用(默认)时,搜索点和位置之间的这个额外段将被解码并丢弃。在执行流复制或使用时 -noaccurate_seek ,它将被保留

ffmpeg提取音视频数据

◼ 保留封装格式

ffmpeg -i test.mp4 -acodec copy -vn audio.mp4

ffmpeg -i test.mp4 -vcodec copy -an video.mp4

◼ 提取视频

保留编码格式:ffmpeg -i test.mp4 -vcodec copy -an test_copy.h264

强制格式:ffmpeg -i test.mp4 -vcodec libx264 -an test.h264

◼ 提取音频

保留编码格式:ffmpeg -i test.mp4 -acodec copy -vn test.aac

强制格式:ffmpeg -i test.mp4 -acodec libmp3lame -vn test.mp3

◼ 提取PCM

ffplay -ar 44100 -ac 2 -f s16le -i audio1.pcm

该命令的作用是使用ffplay播放频率为44100Hz,双通道,16位、小端的音频文件audio1.pcm。

注:

-i 表示指定的输入文件

-f 表示强制使用的格式

-ar 表示播放的音频数据的采样率

-ac 表示播放的音频数据的通道数

ffmpeg命令修改原有的视频格式

◼ 保持编码格式:

ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.ts

ffmpeg -i test.mp4 -codec copy test_copy2.ts

◼ 改变编码格式:

ffmpeg -i test.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv

◼ 修改帧率:

ffmpeg -i test.mp4 -r 15 output2.mp4

◼ 修改视频码率:

ffmpeg -i test.mp4 -b 400k output_b.mkv (此时音频也被重新编码)

◼ 修改视频码率:

ffmpeg -i test.mp4 -b:v 400k output_bv.mkv

◼ 修改音频码率:

ffmpeg -i test.mp4 -b:a 192k output_ba.mp4

如果不想重新编码video,需要加上-vcodec copy

◼ 修改音视频码率:

ffmpeg -i test.mp4 -b:v 400k -b:a 192k output_bva.mp4

◼ 修改视频分辨率:

ffmpeg -i test.mp4 -s 480x270 output_480x270.mp4

◼ 修改音频采样率:

ffmpeg -i test.mp4 -ar 44100 output_44100hz.mp4

ffmpeg命令裁剪和合并视频

◼ 找三个不同的视频每个视频截取10秒内容

ffmpeg -i test1.mp4 -ss 00:05:00 -t 10 -codec copy 1.mp4

ffmpeg -i test2.mp4 -ss 00:05:00 -t 10 -codec copy 2.mp4

ffmpeg -i test3.mp4 -ss 00:05:00 -t 10 -codec copy 3.mp4

如果音视频格式不统一则强制统一为 -vcodec libx264 -acodec aac

◼ 将上述1.mp4/2.mp4/3.mp4转成ts格式

ffmpeg -i 1.mp4 -codec copy -vbsf h264_mp4toannexb 1.ts

ffmpeg -i 2.mp4 -codec copy -vbsf h264_mp4toannexb 2.ts

ffmpeg -i 3.mp4 -codec copy -vbsf h264_mp4toannexb 3.ts

◼ 转成flv格式

ffmpeg -i 1.mp4 -codec copy 1.flv

ffmpeg -i 2.mp4 -codec copy 2.flv

ffmpeg -i 3.mp4 -codec copy 3.flv

拼接视频的方式1

方法1:ffmpeg -i "concat:1.mp4|2.mp4|3.mp4" -codec copy out_mp4.mp4

方法1:ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out_ts.mp4

方法1:ffmpeg -i "concat:1.flv|2.flv|3.flv" -codec copy out_flv.mp4

方法1只适用部分封装格式,比如TS

拼接视频的方式2

方法2:ffmpeg -f concat -i mp4list.txt -codec copy out_mp42.mp4

方法2:ffmpeg -f concat -i tslist.txt -codec copy out_ts2.mp4

方法2:ffmpeg -f concat -i flvlist.txt -codec copy out_flv2.mp4

这些txt 文件的内容为

file '1.** '

file '2.** '

file '3.** ' **表示数据的格式
建议: (1)使用方法2进行拼接 (2)转成TS格式再进行拼接

不同的视频拼接方式注意点

注意:

◼ 把每个视频封装格式也统一为ts,拼接输出的时候再输出你需要的封装格

式,比如MP4

◼ 视频分辨率可以不同,但是编码格式需要统一

◼ 音频编码格式需要统一,音频参数(采样率/声道等)也需要统一

ffmpeg命令提取像素格式

◼ 提取YUV

◼ 提取3秒数据,分辨率和源视频一致 格式转换为yub420p的格式

ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p yuv420p_orig.yuv

◼ 提取3秒数据并将分辨率转为320x240

ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p -s 320x240 yuv420p_320x240.yuv

◼ 提取RGB

◼ 提取3秒数据,分辨率转为320x240

ffmpeg -i test.mp4 -t 3 -pix_fmt rgb24 -s 320x240 rgb24_320x240.rgb

◼ RGB和YUV之间的转换

ffmpeg -s 320x240 -pix_fmt yuv420p -i yuv420p_320x240.yuv -pix_fmt rgb24 rgb24_320x240_2.rgb

fmpeg命令图片与视频互转

◼ 截取一张图片

ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.jpg

ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.bmp

-i 输入

-y 覆盖

-f 格式

image2 一种格式

-ss 起始值

-vframes 帧 如果大于1 那么 输出加%03d test%03d.jpg

-s 格式大小size

◼ 转换视频为图片(每帧一张图):

ffmpeg -i test.mp4 -t 5 -s 640x360 -r 15 frame%03d.jpg

◼ 图片转换为视频:

ffmpeg -f image2 -i frame%03d.jpg -r 25 video.mp4

◼ 从视频中生成GIF图片

ffmpeg -i test.mp4 -t 5 -r 1 image1.gif

ffmpeg -i test.mp4 -t 5 -r 25 -s 640x360 image2.gif

◼ 将 GIF 转化为 视频

ffmpeg -f gif -i image2.gif image2.mp4

ffplay 播放控制相关

  • q, ESC

    Quit. 退出。

  • f

    Toggle full screen. 切换全屏。

  • p, SPC

    Pause. 暂停。

  • m

    Toggle mute. 切换静音。

  • 9, 0

  • /, *

    Decrease and increase volume respectively.

    分别减小和增大音量。

  • a

    Cycle audio channel in the current program.

    在当前程序中循环音频通道。

  • v

    Cycle video channel. 循环视频频道。

  • t

    Cycle subtitle channel in the current program.

    在当前节目中循环字幕频道。

  • c

    Cycle program. 循环程序。

  • w

    Cycle video filters or show modes.

    循环视频过滤器或显示模式。

  • s

    Step to the next frame.

    步进到下一帧。

Pause if the stream is not already paused, step to the next video frame, and pause.

如果流尚未暂停,请暂停,请步入下一个视频帧,然后暂停。

  • left/right

    Seek backward/forward 10 seconds.

    向后/向前搜索 10 秒。

  • down/up

    Seek backward/forward 1 minute.

    向后/向前搜索 1 分钟。

  • page down/page up

    Seek to the previous/next chapter. or if there are no chapters Seek backward/forward 10 minutes.

    寻求上一章/下一章。或者,如果没有章节,则向后/向前寻求 10 分钟。

  • right mouse click

    拖动与显示宽度对应百分比的文件进行播放

  • left mouse double-click

    Toggle full screen. 切换全屏。

ffplay命令选项

选项 说明
-x width 强制显示宽带。
-y height 强制显示高度。
-video_size size 帧尺寸 设置显示帧存储(WxH格式),仅适用于类似
原始YUV等没有包含帧大小(WxH)的视频。
-pixel_format format 格式设置像素格式。
-fs 以全屏模式启动。
-an 禁用音频(不播放声音)
-vn 禁用视频(不播放视频)
-sn 禁用字幕(不显示字幕)
-ss pos 根据设置的秒进行定位拖动,注意时间单位:比如'55' 55
seconds, '12:03:45' ,12 hours, 03 minutes and 45 seconds, '23.189' 23.189
second
-t duration 设置播放视频/音频长度,时间单位如 -ss选项
-bytes 按字节进行定位拖动(0=off 1=on -1=auto)
-seek_interval interval 自定义左/右键定位拖动间隔(以秒为单
位),默认值为10秒
-nodisp 关闭图形化显示窗口,视频将不显示
-noborder 无边框窗口
-volume vol 设置起始音量。音量范围0 \~100
-f fmt 强制使用设置的格式进行解析。
-window_title title 设置窗口标题(默认为输入文件名)
-loop number 设置播放循环次数
-showmode mode 设置显示模式,可用的模式值:0 显示视频,1 显示音频波形,2 显示音频频谱。缺省为0,如果视频不存在则自动选择2
-vf filtergraph 设置视频滤镜
-af 设置音频滤镜
-stats 打印多个回放统计信息,包括显示流持续时间,编解码器参数,流中的当前位置,以及音频/视频同步差值。默认情况下处于启用状态,要显式禁用它则需要指定-nostats。
-fast 非标准化规范的多媒体兼容优化。
-genpts 生成pts。
-sync type 同步类型 将主时钟设置为audio(type=audio),video(type=video)或external(type=ext),默认是audio为主时钟。
-ast 指定音频流索引,比如-ast 3,播放流索引为3的音频流
-vst 指定视频流索引,比如-vst 4,播放流索引
为4的视频流
-sst 指定字幕流索引,比如-sst 5,播放流索
引为5的字幕流
-autoexit 视频播放完毕后退出。
-exitonkeydown 键盘按下任何键退出播放
-exitonmousedown 鼠标按下任何键退出播放
-codec:media_specifier codec_name 强制使用设置的多媒体解码器,media_specifier可用值为a(音频), v(视频)和s字幕。比如-codec:v h264_qsv 强制视频采用h264_qsv解码
-acodec codec_name 强制使用设置的音频解码器进行音频解码
-vcodec codec_name 强制使用设置的视频解码器进行视频解码
-scodec codec_name 强制使用设置的字幕解码器进行字幕解码
-autorotate 根据文件元数据自动旋转视频。值为0或1 ,默认为1。
-framedrop 如果视频不同步则丢弃视频帧。当主时钟非视频时钟时
默认开启。若需禁用则使用 -noframedrop
-infbuf 不限制输入缓冲区大小。尽可能快地从输入中读取尽可能多的数据。播放实时流时默认启用,如果未及时读取数据,则可能会丢弃数据。此选项将不限制缓冲区的大小。若需禁用则使用-noinfbuf

ffplay播放视频的一些范例

◼ 播放本地文件

◼ ffplay -window_title "test time" -ss 2 -t 10 -autoexit test.mp4

◼ ffplay buweishui.mp3

◼ 播放网络流

◼ ffplay -window_title "rtmp stream"

rtmp://202.69.69.180:443/webcast/bshdlive-pc

◼ 强制解码器

◼ mpeg4解码器:ffplay -vcodec mpeg4 test.mp4

◼ h264解码器:ffplay -vcodec h264 test.mp4

◼ 禁用音频或视频

◼ 禁用音频:ffplay test.mp4 -an

◼ 禁用视频:ffplay test.mp4 -vn

◼ 播放YUV数据

◼ ffplay -pixel_format yuv420p -video_size 320x240 -framerate 5

yuv420p_320x240.yuv

◼ 播放RGB数据

◼ ffplay -pixel_format rgb24 -video_size 320x240 -i rgb24_320x240.rgb

◼ ffplay -pixel_format rgb24 -video_size 320x240 -framerate 5 -i

rgb24_320x240.rgb

◼ 播放PCM数据

◼ ffplay -ar 48000 -ac 2 -f f32le 48000_2_f32le.pcm

-ar set audio sampling rate (in Hz) (from 0 to INT_MAX) (default 0)

-ac set number of audio channels (from 0 to INT_MAX) (default 0)

ffplay的简单过滤器

◼ 视频旋转

ffplay -i test.mp4 -vf transpose=1

◼ 视频反转

ffplay test.mp4 -vf hflip

ffplay test.mp4 -vf vflip

◼ 视频旋转和反转

ffplay test.mp4 -vf hflip,transpose=1

◼ 音频变速播放

ffplay -i test.mp4 -af atempo=2

◼ 视频变速播放

ffplay -i test.mp4 -vf setpts=PTS/2

◼ 音视频同时变速

ffplay -i test.mp4 -vf setpts=PTS/2 -af atempo=2

◼ 更多参考

http://www.ffmpeg.org/ffmpeg-filters.html

额外知识点补充

关于PCM相关知识的介绍

链接直达

相关推荐
OH_TPC39 分钟前
【鸿蒙优选三方库】@ohos/ffmpeg-kit:把 FFmpeg 的全部能量带进鸿蒙
华为·ffmpeg·harmonyos·鸿蒙
是jin奥39 分钟前
最新 FFmpeg 安装脚本:Linux x86_64
linux·运维·ffmpeg
骑着蜗牛撵大象3272 小时前
用 Codex 批量做数字人商品口播视频:从分镜 JSON 到成片校验的流水线
java·ffmpeg·json·音视频·数字人·视频·codex
企业数字化笔记4 小时前
视频加放大特写后音画不同步怎么办?OpenCV转场与FFmpeg音轨续接实战
opencv·ffmpeg·音视频
开开心心就好2 天前
课堂随机点名工具,绿色版免安装双击即用
java·服务器·前端·ffmpeg·音视频·perl·symfony
小鹿软件办公2 天前
不依赖 FFmpeg 也能录屏?ShareX 22 新增录屏等十余款新工具
ffmpeg·sharex·免费录屏工具
lll23526917792 天前
Android APP短视频音频提取,主流工具怎么选
ffmpeg·音视频
成都旺小宝科技3 天前
首访决策人没来,AI一客一策两天成交!
大数据·人工智能·机器学习·ffmpeg·语音识别
余槐i3 天前
加了Cookie yt-dlp仍报HTTP 403:3个容易漏的请求头差异
python·http·ffmpeg·开发工具·yt-dlp
余槐i3 天前
yt-dlp 线程开到 16 反而更慢:1000 个视频的实测与限速原因
性能优化·ffmpeg·自动化·开发工具·yt-dlp