多媒体工具ffmpeg常见用法总结

ffmpeg是一个非常好用的多媒体工具,不少音视频编辑软件其实都是内置ffmpeg然后调用它的。一些简单的日常需求,对我来说,它无需付费,足够好用,并且轻量。

下载安装

http://ffmpeg.org/download.html页面可以下载ffmpeg的源码与可执行文件,这里我们选择Get packages & executable files。选择对应的平台,以windows为例,需要点击windows徽标,下载对应的windows builds。解压完成后,将bin目录添加到环境变量,安装就完成了。

常用命令

媒体格式转换

视频格式转换,准确地说是视频包装格式转换,比如你打算把一个flv的视频转换成mp4,则可以使用以下命令。

ffmpeg -i source.flv -acodec copy -vcodec copy out.mp4

-i表示输入文件,-acodec表示音频编解码器,-vcodec表示视频编解码器,copy表示直接拷贝输入流到输出流。其中-acodec copy -vcodec copy可以简写为-c copy

假如说你打算提取出一个视频中的音频文件,并将其保存为mp3格式,那就更简单了,几乎不需要什么额外的参数。

ffmpeg -i mv.mp4  music.mp3

音频格式转换,比如将aac格式转换成wav格式。

ffmpeg -i source.aac  out.wav

去除一个视频中的音频。

ffmpeg -i source.mp4  -an out.mp4

其中-an表示不要音频。

媒体剪辑与合并

比如说现在有一个需求,需要剪辑视频的1:01到1:31这段时间输出为一个新的视频。

ffmpeg -i source.mp4 -ss 00:01:01 -t 30 -c copy out.mp4

上述这段命令表示从1:01开始剪30秒的视频,当然,你也可以使用下面的命令:

ffmpeg -i source.mp4 -ss 00:01:01 -to 00:01:31 -c copy out.mp4

注意到,t表示剪辑的时长,而to表示剪辑的终点。你也可以将-ss放置在-i输入文件的前面,不过,当这样使用时,只可使用t选项,而不可使用to。

ffmpeg -ss 00:01:01 -i source.mp4 -t 30 -c copy out.mp4

下载网络视频的一段

上文中提到的命令还有一个重要的用处,即下载网络视频的一段。比如说你在网上看到一个不错的视频,打算将其中的一个精彩片段存下来。能够想到的一个方法是,将整个视频下载下来,再使用剪辑工具剪辑。可是这样做会有几个问题,一个是下载视频文件耗时且费流量,另一个问题则是占用硬盘空间。亦或者录屏,然而画质会遭受损失。不过,有了ffmpeg,一切问题都迎刃而解。

首先,你需要解析出在线视频的源地址,你可以使用一些在线解析工具,也可以按F12打开控制台切换到network选项卡手动查找。这里有一些技巧(将在另一篇文章中介绍),不过这不是本文的重点。

现在,假设你已经获得了视频源地址,它可能是一个较大的mp4文件,或者是一个m3u8文件,不过这些并不影响。下面这个例子将一个网络视频中的01:01:01(一小时零一分一秒)到01:11:01下载到本地,并保存为download.mp4。

ffmpeg -ss 01:01:01 -i "https://example.com/hls/token/he-xu-yuan/player.m3u8?t=10086&key=10086&expiredtime=YIWANNIAN" -t 600 -c copy download.mp4

注意到,修改-i选项。是的,就是如此简单。请注意,必须-ss选项放到-i前面。

自定义HTTP Header

当输入为网络地址时,有时可能需要自定义请求头。此时,使用-headers选项。

ffmpeg -ss 01:02:03 -headers "Referer: https://example.com/" -i "https://example.com/hls/token/he-xu-yuan/index.m3u8" 1.mp4

特别地,user-agent可以由-user_agent选项指定,即-user_agent "chrome"-headers "user-agent: chrome"是等价的。

媒体合并

细心的朋友可能注意到,某些app缓存下来的视频是三个文件,一个没有声音的视频文件、一个原生音频文件、还有一个媒体编码信息info文件。此时,一种可能的需求是将视频文件和音频文件合并。这并不麻烦。

ffmpeg -i movie.flv -i audio.flac -c copy out.mkv

注意到,只需多次使用-i选项。是的,这并不复杂。

然而,多数情况下,手机缓存下来的视频可能是由一堆ts文件组成,如何将多个视频文件片段合成一个完整的视频呢?故技重施?好像并不可以。

此时需要新建一个 list.txt 文件,告诉ffmpeg有哪些文件需要合并。格式如下:

file "1.ts"
file "2.ts"
file "3.ts"

然后,使用以下命令[1]

ffmpeg -f concat -i list.txt -c copy out.mp4

问题在于,通常ts文件可能有100多个,如果手打的话,十分费劲。熟悉C语言的同学,可以使用printf格式化输出,并将输出流重定向到文件。此时,只需一个for语句即可。

上面的这个命令对于不是ts格式文件也可以使用,比如说都是flv格式的文件,此时输出文件也需为out.flv。

然而,有时可能会遭遇一些问题,比如说需要合并的文件都是自己手工剪辑的,而非视频网站切分好的文件。这时,在合并完成后,你可能会看到一些错误提示[2]。有时它并不会影响合并后的视频正常播放,有时它会引起视频时间轴错误。此时,可以尝试将视频先包装进ts文件中[1],再合并ts文件。

ffmpeg -i source.flv -c copy -bsf:v h264_mp4toannexb -f mpegts 1.ts

上述命令将一个flv文件转为了ts文件,也可以尝试将其转为mts文件。

ffmpeg -i 1.mp4 -q 0 1.mts

其中,-q 0为指定输出文件采用尽可能最好的质量以实现输入文件的画面与声音。

格式转换完成后,再重新合并即可。

另一种情况,如果你能找到m3u8文件,此时只需要将其作为输入即可。

ffmpeg -i index.m3u8 -c copy out.mp4

请注意,当输入文件为本地m3u8文件,而其中引用了网络地址,会引发错误(例如:Protocol 'https' not on whitelist 'file,crypto,data'!)。此时,需要启用协议白名单[3]

其他

比如说现在有一个手机录制的视频,但声音太小了,想将视频文件中的声音调大怎么办?

ffmpeg -i source.mp4 -vcodec copy -filter:a "volume=3" out.mp4

上述命令对输入流的视频流直接拷贝,对音频流使用过滤器,volume=3表示输出文件的音频流的基础音量为源文件的3倍。如果需要调小视频的音量,使用小数即可。

ffmpeg -i music.mp3 -filter:a "volume=0.5" out.mp3

上面的命令将一个mp3音乐文件中的基础音量调小。

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341