FFMPEG 命令行常用方法示例

引言

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/s
At
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播放器播放,就容易理解了。

时间: 2024-10-08 14:13:29

FFMPEG 命令行常用方法示例的相关文章

FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑

FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没有一个人对FFmpeg这个名称感到陌生.FFmpeg是一套非常知名的音视频处理的开源工具,它包含了开发完成的工具软件.封装好的函数库以及源代码供我们按需使用.FFmpeg提供了非常强大的功能,可以完成音视频的编码.解码.转码.视频采集.后处理(抓图.水印.封装/解封装.格式转换等),还有流媒体服务等

Apache Commons CLI 开发命令行工具示例

概念说明Apache Commons CLI 简介 虽然各种人机交互技术飞速发展,但最传统的命令行模式依然被广泛应用于各个领域:从编译代码到系统管理,命令行因其简洁高效而备受宠爱.各种工具和系统都 提供了详尽的使用手册,有些还提供示例说明如何二次开发.然而关于如何开发一个易用.强壮的命令行工具的文章却很少.本文将结合 Apache Commons CLI,通过一个完整的例子展示如何准备.开发.测试一个命令行工具.希望本文对有相关需求的读者能有所帮助.      Apache Commons CL

使用 Apache Commons CLI 开发命令行工具示例

概念说明 Apache Commons CLI 简介 Apache Commons CLI 是 Apache 下面的一个解析命令行输入的工具包,该工具包还提供了自动生成输出帮助文档的功能. Apache Commons CLI 支持多种输入参数格式,主要支持的格式有以下几种: POSIX(Portable Operating System Interface of Unix)中的参数形式,例如 tar -zxvf foo.tar.gz GNU 中的长参数形式,例如 du --human-read

ffmpeg命令行

ubuntu下简单安装ffmpeg sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-nextsudo apt-get update sudo apt-get install ffmpeg 1.................................ffmpeg从视频中生成gif图片: ffmpeg -i capx.mp4 -t 10 -s 320x240 -pix_fmt rgb24 jidu1.gif 2.............

ffmpeg命令行循环推流

用ffmpeg循环推一个文件到rtmp服务器.一般都是建议用-stream_loop选项.如: ffmpeg -threads 2 -re -fflags +genpts -stream_loop -1 -i "H:\video.mp4" -c copy -f flv rtmp://10.100.1.4:1935/live/12345 前提是ffmpeg版本高于2.8.4.而且是推流到Nginx-rtmp.此方法推流到srs失效.第二次推流的时候会提示: WriteN, RTMP se

ffmpeg 命令行改变视频分辨率

视频:ffmpeg -i input.avi -vf scale=320:240 output.avi 图片: ffmpeg -i input.jpg -vf scale=320:240 output_320x240.png 原文地址:https://www.cnblogs.com/nanqiang/p/12103307.html

Perl 命令行常用方法

A. 原文替换 perl -p -i.bak -e "s/源串/目标串/g" <文件名> 原文会备份为.bak后缀的文件 B. 正则分组提取 echo "tom and dic" | perl -n -e ' @w = /(tom).*(dic)/; print "$w[0] & $w[1]"' 打印 "tom & dic" 注:-p 打印满足正则的字串到输出 -n 不打印串到输出,只打印程序pri

ylbtech-LanguageSamples-CommandLine(命令行参数)

ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-CommandLine(命令行参数) 1.A,示例(Sample) 返回顶部 “命令行参数”示例 本示例演示如何访问命令行,并演示访问命令行参数数组的两种方法. 安全说明 提供此代码示例是为了阐释一个概念,它并不代表最安全的编码实践,因此不应在应用程序或网站中使用此代码示例.对于因将此代码示例用于其他用途而出现的偶然或必然的损害,Microsoft 不承担任何责任. 在 Visual

【C语言天天练(十二)】命令行参数

C程序的main函数具有两个形参.第1个通常称为argc,它表示命令行参数的数目.第2个通常称为argv,它指向一组参数值. 指针数组:这个数组的每个元素都是一个字符指针,数组的末尾是一个NULL指针.argc的值和这个NULL值都用于确定实际传递了多少个参数.argv指向数组的第1个元素,这就是它为什么被声明为一个指向字符的指针的指针的原因.注意:通常第1个参数就是程序的名称. 示例: #include <stdio.h> int main(int argc, char **argv) {