-- TOC --
ffmpeg工具包含3个主要的bin文件,ffmpeg,ffplay和ffprobe!
FFmpeg被描述为多媒体的瑞士军刀。它集成了数百个视频、音频和图像解码器和编码器、多路复用器和解复用器、过滤器和设备。FFmpeg是第一个在其细分市场上完全消除了专有软件的大规模FOSS项目。几乎所有的多媒体相关公司都依靠FFmpeg来完成他们的工作。在多媒体方面,FFmpeg几乎是所有问题的解决方案。如果它不是,你更有可能去修补FFmpeg,而不是去开发新的东西。顺便说一句,FFmpeg 的创始人 Fabrice Bellard 也是 QEMU 的创始人。(开源垄断)
$ ffmpeg -h
$ ffmpeg -codecs # show all available codecs
$ ffmpeg -hwaccels # show hardware acceleration methods
$ ffmpeg -h encoder=libx264
$ ffmpeg -h encoder=h264_nvenc
不同的codec,配置参数的写法会有不同。x264没有找到官文文档,可用x264 --fullhelp
查看配置。而x265有完善的在线文档。
x264相关资料:
https://trac.ffmpeg.org/wiki/Encode/H.264
http://www.chaneru.com/Roku/HLS/X264_Settings.htm
$ ffmpeg -i fun.mp4 -map 0:0 -ss 00:05:00.0 -t 00:00:02 v2s.mp4
-ss
,指定截取开始时间,可精确到毫秒;-t
,指定时间长度;-map 0:0
,选择第1个输入的0号stream(用ffprobe查看,0对应video,1对应audio)。
ffmpeg -i v2s.mp4 -map 0:0 -c rawvideo -pix_fmt yuv420p v2s.420p.yuv
ffmpeg -i v2s.mp4 -c:v rawvideo -pix_fmt yuv420p v2s2.420p.yuv
-c,codec
;-c:v
,对应输入中默认的video;后面跟 rawvideo
,表示转成原始YUV格式;-pix_fmt
,像素采样及存储格式;最后是输出文件。以上两个命令等价,后一个使用了ffmpeg的默认选择流机制。
ffmpeg -i bizhi01.jpg -c:v rawvideo -pix_fmt yuv420p bizhi.420p.yuv
-pix_fmt的常用值:yuv420p,yuv422p,yuv444p,
gray
(没有yuv400p)
ffmpeg -i bizhi01.jpg bizhi.265
bizhi.265的后缀指明了格式,ffmpeg会自动调用x265进行编码,jpg图片自带尺寸信息。一张图片,IDR帧!
ffmpeg -pix_fmt yuv420p -s 1280x720 -i v2s.420p.yuv -c:v libx265 out.265
要指定输入文件的yuv格式和size(-s
),输出这个地方有个坑,out.265这个后缀必须要是.265,否则ffmpeg不能判断输出文件格式。?
$ ffmpeg -i input.mp4 -ss 4.5 -vframes 1 output.png
$ ffmpeg -i input.mp4 -ss 4.5 -vframes 10 output_%d.png # 连续10张图
这里的-ss
定位到了秒,-vframes
指定截图图片数量。
$ ffmpeg -i input.mp4 -vf fps=1 out_%d.jpg # 每秒1张
$ ffmpeg -i input.mp4 -vf fps=0.1 out_%d.png # 每秒0.1张,就是每10秒一张
$ ffmpeg -i input.mp4 -vf fps=10 out_%d.bmp # 每秒10张
上面这种截图的方法,截出来的图片,与视频的分辨率相同。
$ ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4 # 保持相同宽高比,不会扭曲图像
$ ffmpeg -i input.mp4 -vf scale=3840:2160,setdar=16:9 output.mp4
setdar=16:9
设置宽高比,可能会扭曲图像。
ffmpeg -i input.mp3 -acodec pcm_s16le -ac 2 -ar 44100 output.wav
pcm_s16le
表示signed 16 bit-depth, little endian
查询所有支持的pcm格式:$ ffmpeg -codecs | grep pcm
-ac 2
表示2 channel
-ar 44100
表示采样率
转换其它音频格式的文件到wav,也是一样的。
学习:PCM和数字音频
ffmpeg -i input.wav -f s16le -ar 44100 -acodec pcm_s16le output.raw
ffmpeg -f s16le -ar 44100 -ac 2 -acodec pcm_s16le -i input.raw output.wav
播放yuv文件有点费劲,必须要指定 -video_size
,默认是0x0。默认420p
格式,其它格式需要用-pix_fmt
指定。
ffplay -f rawvideo -video_size 1280x720 v2s.420p.yuv
ffplay -f rawvideo -video_size 1280x720 -pix_fmt yuv422p bz.yuv
用-autoexit
设置播放完后自动退出。默认播放完后就停在最后一个画面。
ffplay -autoexit v2s.mp4
可以用-x
和-y
来指定播放尺寸:
ffplay -x 320 -y 240 v2s.mp4
-loop N
指定循环播放的次数,-loop 0
是无脑死循环:
ffplay -loop 5 v2s.mp4
播放界面快捷键:
暂停,重启:p,space
单帧模式:s
鼠标右键的作用:选择播放位置!根据点击位置计算进度百分比,并跳转到那个位置,此时cmd界面会显示 seek to N%.....
全屏:f,或者左键双击。
ffplay -f s16le -ar 44100 -ac 2 test.raw
-show_format
,检查媒体文件类型:
$ ffprobe -show_format <filename>
-show_streams
-show_frames
-show_packets
,配合-show_data
,可以打印每一个packet的raw data:
阅读ffmpeg文档,frame指uncompressed, packet指encoded。
$ ffprobe -show_data -show_packets <filename>
...
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=N/A
dts_time=N/A
duration=48000
duration_time=0.040000
size=574
pos=44876
flags=__
data=
00000000: 0000 0001 419a a537 843f c994 c008 5fff ....A..7.?...._.
00000010: 6e80 e5ef 8efb 29c7 fbc5 6d49 f3d1 3cb3 n.....)...mI..<.
00000020: 43e8 1bee 492a 9762 aac4 f198 a00d faa6 C...I*.b........
00000030: 28e4 aabc 32e5 2bf8 e4ba 46d8 272a 173e (...2.+...F.'*.>
00000040: b1de f51f bbb3 6fdf ed75 4f2a e79f afab ......o..uO*....
00000050: 5a5a c95c 3d2a 5f25 6852 5cd9 a3e7 0ce9 ZZ.\=*_%hR\.....
00000060: 9ad0 78af 0efb 64e1 a67f 6015 2725 4a38 ..x...d...`.'%J8
00000070: d9fd 1bd4 42b7 8e84 84b0 9d47 ec07 6a73 ....B......G..js
00000080: 513c 6795 0000 0300 cf70 5586 6ffb 3329 Q<g......pU.o.3)
000000a0: 6362 7079 2f75 8b84 a434 7389 dd52 f1fe cbpy/u...4s..R..
000000b0: 04c6 4916 6ff8 66ed b6a2 6c89 11e3 de86 ..I.o.f...l.....
000000c0: 7a09 f8d7 37ca 0a09 235a d368 dd5f da4c z...7...#Z.h._.L
000000d0: f67e 1abf aa45 f2a8 b25b de62 08f3 592a .~...E...[.b..Y*
000000e0: 652c d97c ee60 3b84 1ca4 521b 1800 de81 e,.|.`;...R.....
000000f0: 460d ffd0 ac04 0753 2b3b 1fad 32c6 da31 F......S+;..2..1
00000100: 9069 f479 9615 05ff fefe 9d99 530d 8dee .i.y........S...
00000110: 65ec 7f27 b15a 3229 6659 b89d 1c25 5d8c e..'.Z2)fY...%].
00000120: 446a 87e0 a569 aa0f 5537 bf2a d608 ae8c Dj...i..U7.*....
00000130: 26fd c25b 549b 601c 2521 8055 ad52 e8c9 &..[T.`.%!.U.R..
00000140: d83f be8b 5633 f010 9457 b459 c299 4c6d .?..V3...W.Y..Lm
00000150: 2948 82ac e727 c845 22d5 dbb1 ec91 c7fe )H...'.E".......
00000160: c99c 8a0e c7be 465a 1ac4 b124 80e3 2b49 ......FZ...$..+I
00000170: 01f2 563f 7e47 00b1 1956 c576 d117 6314 ..V?~G...V.v..c.
00000180: 0092 ea3e b8bb 4953 c4d8 aea5 e1a4 884b ...>..IS.......K
00000190: 06b7 8057 7e84 1ff5 a3bb 6a5a 08f9 1957 ...W~.....jZ...W
000001a0: 7b45 1b46 0380 c817 caff 97dd e348 1de9 {E.F.........H..
000001b0: 6b8d 6831 dc36 4df1 e20d 20e6 7ab0 caa9 k.h1.6M... .z...
000001c0: 1a68 0b6c f457 81b3 ff67 db88 12b4 3efc .h.l.W...g....>.
000001d0: c718 5a8c b73d e25f a606 a86d ca34 ebe9 ..Z..=._...m.4..
000001e0: f436 eec7 76fe 150b c998 5b96 70f1 48f6 .6..v.....[.p.H.
000001f0: da66 9697 a481 cd2c 0d50 8379 1990 79d9 .f.....,.P.y..y.
00000200: ea9d da0d 9268 8af2 577c 8ebd 79d5 591a .....h..W|..y.Y.
00000210: 6e0c 9f59 f08a 1d33 3c79 24a8 c144 a59f n..Y...3<y$..D..
00000220: bc98 663f db09 1a1e d477 ba9e d881 4779 ..f?.....w....Gy
00000230: 4ad2 8bfa 5e19 83ad 5f9c 8165 826e J...^..._..e.n
[/PACKET]
本文链接:https://cs.pynote.net/ag/202204111/
-- EOF --
-- MORE --