ffmpeg命令行工具介绍

对于多媒体行业的同学们,ffmpeg已经再熟悉不过了,属于行业入门级的工具,软编解码的神器~如果你是行业的老鸟,请跳过这篇文章,强烈建议新手们花几分钟看看!

首先FFMPEG是一款开源的跨平台的音视频编解码的工具,源码可前往 官网下载,命令行工具以Windows平台和Linux平台使用得较多,然后ffmpeg库主要支持ffserver(主要用于推/拉音视频流),ffmpeg(主要进行格式转换,如将mp4格式的视频文件转换为flv,mkv等格式的),ffprobe(主要是查看视频文件里的概要信息,如视/音频的编码格式,码率,帧率等信息),ffplay(可以直接看做是一个播放器,能播放视音频的媒体文件);

以命令 ffprobe -i test.mp4为例,概要说明一下

ffmpeg命令行工具介绍_第1张图片

从截图中你应该很容易就能获取到ffmpeg编译的相关参数设置,包含的几大模块;视频的时长,码率,视频的编码格式,像素格式,分辨率,帧率,音频的编码格式,采样率,声道数,如果是媒体文件是电影,可能还包括字幕的相关信息;其它三种命令行方式也是类似使用,只不过是命令行的文本不同。

最后附带上一些常用的命令(亲测有效),可以辅助调试~

视频文件剪切 每片 10 秒
ffmpeg -i source.mp4 -codec:v libx264 -codec:a mp3 -map 0 -f ssegment -segment_format mpegts -segment_list playlist.m3u8 -segment_time 10 out%03d.ts

音频文件剪切(切片) 每片 60 秒
ffmpeg -i Polonaise.mp3 -f segment -segment_time 60 -c copy audio%02d.mp3

将原视频中的音频替换成为指定的音频(有个问题是若两个文件的时间长度不一致的话可能会有问题)
ffmpeg -i gordan_0612.mp4 -i Polonaise.mp3 -c:v copy -c:a mp3 -strict experimental -map 0:v:0 -map 1:a:0 20190613.mp4

抽取单独的视频(裸流)
ffmpeg -i test.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuv

测试播放(注意要指定相应的分辨率 要不然ffplay的SDL不知道)
ffplay -video_size 720*1280 -i gordan.yuv

将视频的前10帧转换为gif的动态图片
ffmpeg -i 20190518.mp4 -vframes 10 -y -f gif -s 720*1280 video_10.gif

抽取单独的音频(裸流)
ffmpeg -i 20190518.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm

如何从mp4文件中获取音频的编码格式式 s16le 还是 s16be????????

s16le 低地址小端 低地址存低位

s16be 低地址大端 低地址存高位 

抽取的时候 存放格式式什么播放的时候格式就是什么

ffplay -ar 44100 -ac 2 -f s16le -i out.pcm

音视频合并的前提是 视频中先没有音频(可将视频中的音频抽取出来)  而且要知道视频的时长(单位是秒)
ffmpeg -i %s -i %s -t %d %s
ffmpeg -i /sdcard/gordan.mp4 -i /sdcard/extractAudio.aac -t 15 /sdcard/extractVideo.mp4

抽取音频
ffmpeg -i %s -acodec copy -vn %s
ffmpeg -i /sdcard/gordan.mp4 -acodec copy -vn /sdcard/extractAudio.aac

抽取视频
ffmpeg -i %s -vcodec copy -an %s
ffmpeg -i /sdcard/gordan.mp4 -vcodec copy -an /sdcard/extractVideo.mp4

替换拍摄的视频中的背景音乐 注意要指定音频编码库libmp3lame    -t替换的音频时长 单位是秒
./ffmpeg -i /home/xpzhi/test/gordan.mp4 -i /home/xpzhi/test/trip.mp3 -c:v copy -c:a mp3 -acodec libmp3lame -t 15 -strict experimental -map 0:v:0 -map 1:a:0 /home/xpzhi/test/output.mp4


给视频添加文字水印(第一个参数是字体 注意字体最好存在 第二个参数是要显示的文本,第三个参数X,Y表示要显示在视频上的位置)
ffmpeg -i 20190518.mp4 -vf "drawtext=fontfile=simhei.ttf: text='print by gordan xu':x=100:y=100:fontsize=24:fontcolor=red:shadowy=2" drawtext.mp4

给视频添加图片水印(注意图片的存放位置,图片的尺寸 和 需要显示在视频上的位置)
ffmpeg -i 20190518.mp4  -vf "movie=ad_2.jpg,scale=600:439[watermask];[in][watermask] overlay=10:10 [out]" water.mp4

图片水印在Android平台上执行命令请参考(第一种方式总是执行失败!感觉像是引号里面的内容无法正常切割) overlay参数指图片在视频上的位置
ffmpeg -i /sdcard/gordan.mp4 -i /sdcard/video_water.png -filter_complex overlay=0:0 /sdcard/0726.mp4

添加gif动画水印    ignore_loop

倍速播放
ffmpeg -i test.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" speed2.0.mp4

拼接音频文件
ffmpeg -i "concat:123.mp3|124.mp3" -acodec copy output.mp3

拼接视频文件(先将各自转换为TS流,再逐步将TS流拼接起来)
ffmpeg -i gordan.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts gordan.ts
ffmpeg -i 20190518.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 20190518.ts
ffmpeg -i "concat:gordan.ts|20190518.ts" -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4

补充  如果遇到ffmpeg命令有疑问 终极的解决办法是 ffmpeg -h 帮助信息会告诉你如何使用!!!

其它命令可以参考:https://www.kancloud.cn/zhenhuamcu/ffmpeg/760426

 

你可能感兴趣的:(多媒体音视频)