引言
FFMPEG以其强大的功能而在音视频领域著称,更重要的是它还是开源的!音视频格式转换、裁剪、拼接、提取字幕或某音轨等等,它都能胜任,可谓一把瑞士军刀,小巧但功能强大,是音视频研究的必备利器之一。
示例
1. 转换成H264编解码
ffmpeg -i input_file -vcodec h264 output_file
其中 -i 表示输入文件, -vcodec h264 表示视频编解码方式为 H264。
2. 转换成H265编解码
ffmpeg -i input_file -vcode hevc output_file
其中 -i 表示输入文件, -vcodec hevc 表示视频编解码方式为 H265,注意ffmpeg 中名称为 hevc,不是H265!
3. 设置输出视频的分辨率
ffmpeg -i input_file -vcodec h264 -s 1280x720 output_file
其中 -s 表示分辨率。
4. 设置输出文件的音视频比特率
ffmpeg -i input_file -vcodec h264 -b:v 10M -b:a 128K output_file
其中 -b:v 10M 表示视频码率为10Mbps, -b:a 128K 表示音频码率为 128Kbps,注意FFMPEG对于码率控制,有时候不太准确,跟输入源有一定关系。
5. 剪切某段视频
ffmpeg -ss 0:05:00 -t 0:1:30 -i input_file -vcodec copy -acodec copy output_file ffmpeg -ss 300 -t 90 -i input_file -vcodec copy -acodec copy output_file
上面的两种方式等价,时间格式支持 HH:MM:SS或者秒数。 -ss 开始时间, -t 持续时间, -vcodec copy 保持原视频编码, -acodec copy 保持原音频编码。
6. 分离音视频流保存为不同文件
ffmpeg -i input_file -vcodec copy -an output_file_video //提取视频流 ffmpeg -i input_file -acodec copy -vn output_file_audio //提取音频流
其中 -an 表示不处理音频, -vn 表示不处理视频。
7.合并多个音视频文件为一个文件
ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file
8. 提取视频图像保存为图片文件
ffmpeg –i input_file –r 1 –f image2 image-%3d.jpeg //提取图片
其中 -r 表示提取图像的频率,-f 表示输出格式, %3d 表示文件命名方式(也即生成的图片名为 image-001.jpeg, image-002.jpeg, ...., image-999.jpeg)。
9. 转换成YUV原始文件
ffmpeg -i input_file -vcodec rawvideo -an output_file_yuv
10. YUV序列转出AVI文件
ffmpeg –s w*h –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi
11. 控制关键帧间隔和B帧
ffmpeg –i input_file –vcodec h264 –bf 0 –g 25 –s 854x480 –an –f m4v output_file
其中-bf 控制B帧数目,-g 控制关键帧间隔, -f 控制文件格式(format,注意与codec的区别)。
12. 录制rtsp网络数据流
ffmpeg –i rtsp://192.168.1.100:5555/test_stream –vcodec copy out.avi
将rtsp的网络视频流文件保存为 out.avi 本地文件
13. 在多音轨文件中提取某音轨文件
得分两步走,第一步,查看源文件,找到对应的音频序号;第二步,将对应的音频序号流提取出来。如下所示:
<strong><span style="color:#cc0000;">D:>ffmpeg -i Xmen_HEVC_4K_Multi_Audio_28Mbps.mkv</span></strong><pre name="code" class="plain">
ffmpeg version N-66931-gbbd8c85 Copyright (c) 2000-2014 the FFmpeg developers built on Oct 17 2014 01:05:12 with gcc 4.9.1 (GCC) configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig
--enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb
--enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack
--enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-zlib libavutil 54. 10.100 / 54. 10.100 libavcodec 56. 8.100 / 56. 8.100 libavformat 56. 9.100 / 56. 9.100 libavdevice 56. 1.100 / 56. 1.100 libavfilter 5. 1.106 /
5. 1.106 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 1.100 / 1. 1.100 libpostproc 53. 3.100 / 53. 3.100Input #0, matroska,webm, from ‘D:\Xmen_HEVC_4K_Multi_Audio_28Mbps.mkv‘: Metadata: title : X-MEN__DAYS_OF_FUTURE_PAST.Title800 encoder : libebml v0.7.8
+ libmatroska v0.8.1 creation_time : 2014-10-07 14:08:43 Duration: 02:11:35.18, start: 0.000000, bitrate: 28873 kb/s Chapter #0:0: start 0.000000, end 213.338000 Metadata: title : (01)00:00:00:000 Chapter #0:1: start 213.338000, end 480.688000 Metadata: title
: (02)00:03:33:338 Chapter #0:2: start 480.688000, end 628.628000 Metadata: title : (03)00:08:00:688 Chapter #0:3: start 628.628000, end 838.045000 Metadata: title : (04)00:10:28:628 Chapter #0:4: start 838.045000, end 1022.021000 Metadata: title : (05)00:13:58:045
Chapter #0:5: start 1022.021000, end 1216.089000 Metadata: title : (06)00:17:02:021 Chapter #0:6: start 1216.089000, end 1331.330000 Metadata: title : (07)00:20:16:089 Chapter #0:7: start 1331.330000, end 1597.887000 Metadata: title : (08)00:22:11:330 Chapter
#0:8: start 1597.887000, end 1832.038000 Metadata: title : (09)00:26:37:887 Chapter #0:9: start 1832.038000, end 2069.776000 Metadata: title : (10)00:30:32:038 Chapter #0:10: start 2069.776000, end 2160.992000 Metadata: title : (11)00:34:29:776 Chapter #0:11:
start 2160.992000, end 2298.087000 Metadata: title : (12)00:36:00:992 Chapter #0:12: start 2298.087000, end 2437.101000 Metadata: title : (13)00:38:18:087 Chapter #0:13: start 2437.101000, end 2753.792000 Metadata: title : (14)00:40:37:101 Chapter #0:14: start
2753.792000, end 2933.847000 Metadata: title : (15)00:45:53:792 Chapter #0:15: start 2933.847000, end 3118.156000 Metadata: title : (16)00:48:53:847 Chapter #0:16: start 3118.156000, end 3283.113000 Metadata: title : (17)00:51:58:156 Chapter #0:17: start 3283.113000,
end 3471.426000 Metadata: title : (18)00:54:43:113 Chapter #0:18: start 3471.426000, end 3648.186000 Metadata: title : (19)00:57:51:426 Chapter #0:19: start 3648.186000, end 3806.594000 Metadata: title : (20)01:00:48:186 Chapter #0:20: start 3806.594000, end
4029.567000 Metadata: title : (21)01:03:26:594 Chapter #0:21: start 4029.567000, end 4183.596000 Metadata: title : (22)01:07:09:567 Chapter #0:22: start 4183.596000, end 4391.470000 Metadata: title : (23)01:09:43:596 Chapter #0:23: start 4391.470000, end 4531.860000
Metadata: title : (24)01:13:11:470 Chapter #0:24: start 4531.860000, end 4647.726000 Metadata: title : (25)01:15:31:860 Chapter #0:25: start 4647.726000, end 4770.098000 Metadata: title : (26)01:17:27:726 Chapter #0:26: start 4770.098000, end 5090.710000 Metadata:
title : (27)01:19:30:098 Chapter #0:27: start 5090.710000, end 5218.254000 Metadata: title : (28)01:24:50:710 Chapter #0:28: start 5218.254000, end 5464.250000 Metadata: title : (29)01:26:58:254 Chapter #0:29: start 5464.250000, end 5643.679000 Metadata: title
: (30)01:31:04:250 Chapter #0:30: start 5643.679000, end 5853.180000 Metadata: title : (31)01:34:03:679 Chapter #0:31: start 5853.180000, end 6114.817000 Metadata: title : (32)01:37:33:180 Chapter #0:32: start 6114.817000, end 6292.995000 Metadata: title :
(33)01:41:54:817 Chapter #0:33: start 6292.995000, end 6439.808000 Metadata: title : (34)01:44:52:995 Chapter #0:34: start 6439.808000, end 6689.766000 Metadata: title : (35)01:47:19:808 Chapter #0:35: start 6689.766000, end 7002.745000 Metadata: title : (36)01:51:29:766
Chapter #0:36: start 7002.745000, end 7212.413000 Metadata: title : (37)01:56:42:745 Chapter #0:37: start 7212.413000, end 7354.972000 Metadata: title : (38)02:00:12:413 Chapter #0:38: start 7354.972000, end 7831.907000 Metadata: title : (39)02:02:34:972 Chapter
#0:39: start 7831.907000, end 7895.095000 Metadata: title : (40)02:10:31:907 Chapter #0:40: start 7895.095000, end 7895.178884 Metadata: title : (41)02:11:35:095
Stream #0:0: Video: hevc (Main), yuv420p(tv), 3840x2160, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 48003.07 tbn, 48003.07 tbc (default) Stream #0:1(eng): Audio: dts (DTS-HD MA), 48000 Hz, 5.1(side), fltp, 1536 kb/s (default)
Stream #0:2(eng): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s Stream #0:3(spa): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s Stream #0:4(fra): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s Stream #0:5(por): Audio:
ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s Stream #0:6(rus): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 768 kb/s Stream #0:7(tha): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s Stream #0:8(ukr): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/sAt
least one output file must be specifiedD:>
执行上面的命令,查看原始文件,发现它有8个音轨!,我们只提取第二个音轨流(上图标识为绿色的那个),命令如下所示:
ffmpeg -i Xmen_HEVC_4K_Multi_Audio_28Mbps.mkv -map 0:2 audio_2.wav
FFMPEG常用参数说明
主要参数:
-i 设定输入流
-f 设定输出格式
-ss 开始时间
-formats 查看所有支持的容器格式
-codecs 查看所有编解码器
-filters 查看所有可用的filter
-pix_fmts 查看所有支持的图片格式
-sample_fmts 查看所有支持的像素格式
-i input_file 查看媒体文件input_file的信息(注意后面不再接其它参数,例如: ffmpeg -i test.mp4,查看 test.mp4视频信息)
视频参数:
-b 设定视频流量,默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器
音频参数:
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频
小结
ffmpeg功能强大,参数配置众多,最好的方式查看它的命令行帮助文档,各个参数都有详细的说明,唯一的遗憾就是没有例子,对于初入媒体领域的人来说,门槛比较高。不明白的参数,可以多试试,再接合MediaInfo工具查看具体信息,通过VLC或者FFMPEG自带的 ffplay播放器播放,就容易理解了。