百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

FFmpeg多媒体处理命令行工具详解

myzbx 2025-01-21 20:00 36 浏览

FFmpeg是一款非常快速的视频和音频转换器, 是开源项目 FFmpeg (Fast Forward moving pictures expert group) 的命令行程序。 它可以在任意采样率之间转换,并通过高质量的多相滤波器实时调整视频大小。

FFppeg 载地址:http://ffmpeg.org/download.html

FFmpeg程序的转码流程,如下所示

其中, demuxer 为解复用器, muxer 为复用器; decoder 为解码器, encoder 为编码器




ffmpeg 语法:ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

ffmpeg参数

1)通用选项:

-L license

-h 帮助

-fromats 显示可用的格式,编解码的,协议的。

-f fmt 强迫采用格式fmt

-I filename 输入文件

-y 覆盖输出文件

-t duration 设置记录时间 hh:mm:ss[.xxx]格式的记录时间也支持

-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持

-title string 设置标题

-author string 设置作者

-copyright string 设置版权

-comment string 设置评论

-target type 设置目标文件类型(vcd,svcd,dvd) 所有的格式选项(比特率,编解码以及缓冲区大小)自动设置 ,只需要输入如下的就可以了: ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg

-hq 激活高质量设置

-itsoffset offset 设置以秒为基准的时间偏移,该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳,定义一个正偏移意味着相应的流被延迟了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持

2)视频选项:

-b bitrate 设置比特率,缺省200kb/s

-r fps 设置帧频 缺省25

-s size 设置帧大小 格式为WXH 缺省160X128.下面的简写也可以直接使用:Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576

-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777

-croptop size 设置顶部切除带大小 像素单位

-cropbottom size –cropleft size –cropright size

-padtop size 设置顶部补齐的大小 像素单位

-padbottom size –padleft size –padright size –padcolor color 设置补齐条颜色(hex,6个16进制的数,红:绿:兰排列,比如 000000代表黑色)

-vn 不做视频记录

-bt tolerance 设置视频码率容忍度kbit/s

-maxrate bitrate设置最大视频码率容忍度

-minrate bitreate 设置最小视频码率容忍度

-bufsize size 设置码率控制缓冲区大小

-vcodec codec 强制使用codec编解码方式。 如果用copy表示原始编解码数据必须被拷贝。

-sameq 使用同样视频质量作为源(VBR)

-pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率

-passlogfile file 选择两遍的纪录文件名为file

3)音频选项:

-ab bitrate 设置音频码率

-ar freq 设置音频采样率

-ac channels 设置通道 缺省为1

-an 不使能音频纪录

-acodec codec 使用codec编解码

4)音频/视频捕获选项

-vd device 设置视频捕获设备。比如/dev/video0

-vc channel 设置视频捕获通道 DV1394专用

-tvstd standard 设置电视标准 NTSC PAL(SECAM)

-dv1394 设置DV1394捕获

-av device 设置音频设备 比如/dev/dsp

5)高级选项

-map file:stream 设置输入流映射

-debug 打印特定调试信息

-benchmark 为基准测试加入时间

-hex 倾倒每一个输入包

-bitexact 仅使用位精确算法 用于编解码测试

-ps size 设置包大小,以bits为单位

-re 以本地帧频读数据,主要用于模拟捕获设备

-loop 循环输入流。只工作于图像流,用于ffserver测试


1、获取音频/视频文件信息

查看视频文件的元信息,比如编码格式和比特率,可以只使用-i参数。

ffmpeg -i input.mp4

上面命令会输出很多冗余信息,加上-hide_banner参数,可以只显示元信息。

ffmpeg -i input.mp4 -hide_banner



2、转换视频文件到不同的格式

ffmpeg -formats #检查FFmpeg支持格式的列表

ffmpeg -i video.mp4 video.avi #转换mp4文件为avi文件

ffmpeg -i video.flv video.mpeg #转换flv格式视频为mpeg 格式

ffmpeg -i input.webm -qscale 0 output.mp4 #使用-qscale 0参数维持源视频文件的质量,


ffmpeg -i [input.file] -c:v libx264 output.mp4 #转成H.264编码

ffmpeg -i [input.file] -c:v libx265 output.mp4 #转成H.265编码

ffmpeg -i test.mp4 -ab 56 -ar 22050 -qmin 2 -qmax 16 -b 320k -r 15 -s 320x240 outputfile.flv #mp4转flv

ffmpeg -i outputfile.flv -copyts -strict -2 test.mp4 #flv转mp4


3、转换视频文件到音频文件

转换一个视频文件到音频文件,只需具体指明输出格式,像 .mp3或 .ogg,或其它任意音频格式。

ffmpeg -i input.mp4 -vn output.mp3 #转换 input.mp4 视频文件到 output.mp3 音频文件

ffmpeg -i input.mp4 -vn -c:a copy output.aac #-c:a copy表示不改变音频编码,直接拷贝

也可以对输出文件使用各种各样的音频转换编码选项:

ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -ab 320 -f mp3 output.mp3

相关选项:

-vn – 表明我们已经在输出文件中禁用视频录制。

-ar – 设置输出文件的音频频率。通常使用的值是22050 Hz、44100 Hz、48000 Hz。

-ac – 设置音频通道的数目。

-ab – 表明音频比特率。

-f – 输出文件格式。在我们的实例中,它是 mp3 格式。


4、更改视频文件的分辨率

设置视频文件的分辨率到 1280×720

ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy output.mp4或

ffmpeg -i input.mp4 -s 1280x720 -c:a copy output.mp4

转换视频文件到 640×480 大小

ffmpeg -i input.mp4 -filter:v scale=640:480 -c:a copy output.mp4或

ffmpeg -i input.mp4 -s 640x480 -c:a copy output.mp4

该技巧帮助缩放视频文件到较小的显示设备上,如平板电脑和手机。

ffmpeg -i input.mp4 -vf scale=480:-1 output.mp4 #转换文件为480p


5、压缩视频文件

ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4

减小视频文件的大小,将损失视频质量。如果24值过大,可以降低 -crf 值到或更低值。

也可以通过下面的选项来转换编码音频降低比特率,使其有立体声感,从而减小大小。

-ac 2 -c:a aac -strict -2 -b:a 128k


6、压缩音频文件

假设input.mp3是比特率320kbps的音频文件,可通过更改比特率到任意较低的值来压缩

$ ffmpeg -i input.mp3 -ab 128 output.mp3 #-ab标志压缩音频文件

各种各样可用的音频比特率列表是: 96kbps、112kbps、128kbps、160kbps、192kbps、256kbps、320kbps


7、调整码率

调整码率(transrating)指的是,改变编码的比特率,一般用来将视频文件的体积变小。下面的例子指定码率最小为964K,最大为3856K,缓冲区大小为 2000K。

ffmpeg -i input.mp4 -minrate 964K -maxrate 3856K -bufsize 2000K output.mp4



8、从一个视频文件移除音频流

ffmpeg -i input.mp4 -an output.mp4 #-an表示没有音频录制。

上面的命令会撤销所有音频相关的标志。


9、从一个媒体文件移除视频流

ffmpeg -i input.mp4 -vn output.mp3 #-vn表示没有视频录制

ffmpeg -i input.mp4 -vn -ab 320 output.mp3 #加-ab标志来指出输出文件的比特率


10、从视频中提取图像(截图)

ffmpeg -i input.mp4 -r 1 -f image2 image-%2d.png

其中:

-r – 设置帧速度。即每秒提取帧到图像的数字。默认值是 25。

-f – 表示输出格式,在上例中是图像。

image-%2d.png – 表示如何命名提取的图像。上例命名文件像image-01.png、image-02.png、image-03.png开始递加。如果使用 %3d,那么图像的命名像 image-001.png、image-002.png递加。

ffmpeg -y -i input.mp4 -ss 00:01:24 -t 00:00:01 #从指定时间开始,连续对1秒钟的视频进行截图

ffmpeg -ss 01:23:45 -i input -vframes 1 -q:v 2 output.jpg #-vframes 1指定只截取一帧,-q:v 2表示输出的图片质量,一般是1到5之间(1 为质量最高)


ffeg -i test.mp4 -y -f mjpeg -ss 3 -t 1 test1.jpg #在第三秒的时候截图

ffmpeg -i test.mp4 -y -f image2 -ss 3 -vframes 1 test1.jpg #在第三秒的时候截图


11、视频内裁剪

ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" output.mp4

其中:

input.mp4 – 源视频文件。

-filter:v – 表示视频过滤器。

crop – 表示裁剪过滤器。

w – 我们想自源视频中裁剪的矩形的宽度。

h – 矩形的高度。

x – 我们想自源视频中裁剪的矩形的 x 坐标 。

y – 矩形的 y 坐标。

比如需要一个来自视频的位置 (200,150),且具有 640 像素宽度和 480 像素高度的视频

ffmpeg -i input.mp4 -filter:v "crop=640:480:200:150" output.mp4

注意,剪切视频将影响质量。除非必要,请勿剪切。


12、转换一个视频的具体的部分

ffmpeg -i input.mp4 -t 10 output.avi #转换文件开头10秒到视频avi格式

上例以秒具体说明时间。也可用hh.mm.ss 格式具体说明时间。



13、设置视频的屏幕高宽比

$ ffmpeg -i input.mp4 -aspect 16:9 output.mp4 #使用-aspect标志设置一个视频文件的屏幕高宽比

常用高宽比有:16:9、4:3、16:10、5:4、2:21:1、2:35:1、2:39:1


14、添加海报图像到音频文件

添加海报图像到文件,以便图像将在播放音频文件时显示,相当于将音频文件转为带封面的视频文件。

ffmpeg -loop 1 -i inputimage.jpg -i inputaudio.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4

ffmpeg -loop 1 -i cover.jpg -i input.mp3 -c:v libx264 -c:a aac -b:a 192k -shortest output.mp4

-loop 1参数表示图片无限循环,-shortest参数表示音频文件结束,输出视频就结束。


15、使用开始和停止时间剪下一段媒体文件

ffmpeg -i input.mp4 -ss 00:00:50 -codec copy -t 50 output.mp4

ffmpeg -ss 00:00:00 -t 00:00:03 -y -i test.mp4 -vcodec copy -acodec copy test1.mp4 #将test.mp4视频的前3秒,重新生成一个新视频

-ss 开始时间,如: 00:00:00,表示从0秒开始,格式也可以00:00:0

-t 时长,如: 00:00:03,表示截取3秒长的视频,格式也可以00:00:3

-y 如果文件已存在强制替换;

-i 输入,后面是空格,紧跟着就是输入视频文件;

-vcodec copy 和 -acodec copy表示所要使用的视频和音频的编码格式,这里指定为copy表示原样拷贝;

也可剪辑音频

ffmpeg -i audio.mp3 -ss 00:01:54 -to 00:06:53 -c copy output.mp3


16、切分视频文件为多个部分

ffmpeg -i input.mp4 -t 00:00:30 -c copy part1.mp4 -ss 00:00:30 -codec copy part2.mp4

其中:

-t 00:00:30 表示从视频的开始到视频的第 30 秒创建一部分视频。

-ss 00:00:30 为视频的下一部分显示开始时间戳。它意味着第2部分将从第30秒开始,并将持续到原始视频文件的结尾。


17、接合或合并多个视频部分到一个单个视频文件

方法一:

创建包含你想接合文件的准确的路径的 join.txt。

所有的文件要求相同的编码格式。所有文件的路径应该逐个列出如下。

file /home/sk/myvideos/part1.mp4

file /home/sk/myvideos/part2.mp4

file /home/sk/myvideos/part3.mp4

file /home/sk/myvideos/part4.mp4

使用命令接合join.txt中列的所有文件:

ffmpeg -f concat -i join.txt -c copy output.mp4

如果出现下面的错误;

[concat @ 0x555fed174cc0] Unsafe file name '/path/to/mp4'

join.txt: Operation not permitted

添加 -safe 0 :

ffmpeg -f concat -safe 0 -i join.txt -c copy output.mp4

上面的命令接合 part1.mp4、part2.mp4、part3.mp4 和 part4.mp4 文件到一个称为output.mp4的单个文件中。

方法二:

ffmpeg -i "concat:1.flv|2.flv|3.flv" -c copy 4.flv

方法三:

ffmpeg -f concat -i <(for i in {1..4}; do printf "file '%s'" input.mp4; done) -c copy output.mp4


18、添加字幕到一个视频文件

为视频下载正确的字幕,并如下所示添加它到视频文件中。

fmpeg -i input.mp4 -i subtitle.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast output.mp4


19、 添加音频到一个视频文件(音轨)

添加音轨(muxing):将外部音频加入视频,比如添加背景音乐或旁白。

ffmpeg -i input.aac -i input.mp4 output.mp4

上例中,有音频和视频两个输入文件,ffmpeg 会将它们合成为一个文件。


20、音频合成

ffmpeg -i test.mp3 -i test1.mp3 -filter_complex amix=inputs=2 -f mp3 c.mp3 #合并二个音频

ffmpeg -i test.mp3 -i test1.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f mp3 a.mp3 #合并二个音频,以第一个音频的时长为新音频时长


21、预览或测试视频或音频文件

ffplay video.mp4 #预览视频

ffplay audio.mp3 #测试音频


22、增加/减少视频播放速度

增加视频播放速度,运行:

ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4 #该命令将双倍视频的速度。

为降低你的视频速度,需要使用一个大于 1 的倍数。

减少播放速度,运行:

fmpeg -i input.mp4 -vf "setpts=4.0*PTS" output.mp4


23、转换容器格式

转换容器格式(transmuxing)指的是,将视频文件从一种容器转到另一种容器。

下面是 mp4 转 webm 的写法

ffmpeg -i input.mp4 -c copy output.webm


24、获取视频时长

ffmpeg -i test.mp4 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//


25、视频加水印

ffmpeg -y -i test.mp4 -acodec copy -vf "movie=input.jpg [logo]; [in][logo] overlay=10:10:1 [out]" test2.mp4

overlay=10:10:1,后三个数据表示是距离左边的距离,距离上边的距离,是否透明,1表示透明。上例我用的是jpg,当然不可能透明。

ffmpeg -y -i test.mp4 -acodec copy -vf "movie=input.jpg [logo]; [in][logo] overlay=enable='lte(t,1)' [out]" test2.mp4

overlay=enable='lte(t,1)' ,这个参数表示,水印在前一秒显示。


26、生成GIF图片

ffmpeg -i test.asf -vframes 30 -y -f gif output.gif #把视频的前30帧转换成一个Gif

ffmpeg -i test2.mp4 -y -f image2 -ss 08 -t 0.001 -s 352x240 output.jpg #在秒处接取一个352X240的图片


27、下载RTMP流

ffmpeg -i "rtmp://192.168.10.103:1935/live/111 live=1" -acodec copy -vcodec copy -f flv -y test.flv #将rtmp流,以文件的形势保存到本地

相关推荐

如何设计一个优秀的电子商务产品详情页

加入人人都是产品经理【起点学院】产品经理实战训练营,BAT产品总监手把手带你学产品电子商务网站的产品详情页面无疑是设计师和开发人员关注的最重要的网页之一。产品详情页面是客户作出“加入购物车”决定的页面...

怎么在JS中使用Ajax进行异步请求?

大家好,今天我来分享一项JavaScript的实战技巧,即如何在JS中使用Ajax进行异步请求,让你的网页速度瞬间提升。Ajax是一种在不刷新整个网页的情况下与服务器进行数据交互的技术,可以实现异步加...

中小企业如何组建,管理团队_中小企业应当如何开展组织结构设计变革

前言写了太多关于产品的东西觉得应该换换口味.从码农到架构师,从前端到平面再到UI、UE,最后走向了产品这条不归路,其实以前一直再给你们讲.产品经理跟项目经理区别没有特别大,两个岗位之间有很...

前端监控 SDK 开发分享_前端监控系统 开源

一、前言随着前端的发展和被重视,慢慢的行业内对于前端监控系统的重视程度也在增加。这里不对为什么需要监控再做解释。那我们先直接说说需求。对于中小型公司来说,可以直接使用三方的监控,比如自己搭建一套免费的...

Ajax 会被 fetch 取代吗?Axios 怎么办?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!今天给大家带来的主题是ajax、fetch...

前端面试题《AJAX》_前端面试ajax考点汇总

1.什么是ajax?ajax作用是什么?AJAX=异步JavaScript和XML。AJAX是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实...

Ajax 详细介绍_ajax

1、ajax是什么?asynchronousjavascriptandxml:异步的javascript和xml。ajax是用来改善用户体验的一种技术,其本质是利用浏览器内置的一个特殊的...

6款可替代dreamweaver的工具_替代powerdesigner的工具

dreamweaver对一个web前端工作者来说,再熟悉不过了,像我07年接触web前端开发就是用的dreamweaver,一直用到现在,身边的朋友有跟我推荐过各种更好用的可替代dreamweaver...

我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊

接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...

福斯《死侍》发布新剧照 &quot;小贱贱&quot;韦德被改造前造型曝光

时光网讯福斯出品的科幻片《死侍》今天发布新剧照,其中一张是较为罕见的死侍在被改造之前的剧照,其余两张剧照都是死侍在执行任务中的状态。据外媒推测,片方此时发布剧照,预计是为了给不久之后影片发布首款正式预...

2021年超详细的java学习路线总结—纯干货分享

本文整理了java开发的学习路线和相关的学习资源,非常适合零基础入门java的同学,希望大家在学习的时候,能够节省时间。纯干货,良心推荐!第一阶段:Java基础重点知识点:数据类型、核心语法、面向对象...

不用海淘,真黑五来到你身边:亚马逊15件热卖爆款推荐!

Fujifilm富士instaxMini8小黄人拍立得相机(黄色/蓝色)扫二维码进入购物页面黑五是入手一个轻巧可爱的拍立得相机的好时机,此款是mini8的小黄人特别版,除了颜色涂装成小黄人...

2025 年 Python 爬虫四大前沿技术:从异步到 AI

作为互联网大厂的后端Python爬虫开发,你是否也曾遇到过这些痛点:面对海量目标URL,单线程爬虫爬取一周还没完成任务;动态渲染的SPA页面,requests库返回的全是空白代码;好不容易...

最贱超级英雄《死侍》来了!_死侍超燃

死侍Deadpool(2016)导演:蒂姆·米勒编剧:略特·里斯/保罗·沃尼克主演:瑞恩·雷诺兹/莫蕾娜·巴卡林/吉娜·卡拉诺/艾德·斯克林/T·J·米勒类型:动作/...

停止javascript的ajax请求,取消axios请求,取消reactfetch请求

一、Ajax原生里可以通过XMLHttpRequest对象上的abort方法来中断ajax。注意abort方法不能阻止向服务器发送请求,只能停止当前ajax请求。停止javascript的ajax请求...