FFmpeg学习笔记(一)

前段时间做了个关于视频播放器的需求,播放器的要求比较简答,实现一些基本的播放器功能,任务急,任务重!选择了很多项目,比如ijk,金山云等,这些项目都是基于ffmpeg,早些年就听说这个音视频领域的扛把子;通过这次需求,学习了一下ffmpeg的一些基本应用和基本文件操作;目的是通过ffmpeg进行基础二次开发,抛弃一些视频处理App,通过命令行可以对音视频进行简单的操作,比如视频,采集,裁剪,格式转换等.
下载ffmpeg
brew install ffmpge
卸载ffmpeg
brew uninstall ffmpeg
更新ffmpeg
brew upgrade ffmpeg

音视频的录制:

1 在录制之前先查询下支持哪些设备

ffmpeg -f avfoundation -list_devices true -i ""
在mac下通过``AVFoundation```采集,支持的设备有:

image.png

2 录屏/录音

ffmpeg -f avfoundation -i 1 -r 30 out.yuv
ffmpeg -f avfoundation -i :0 out.wav
ffmpeg -f avfoundation -i :0 -ar 44100 -f s16le out.pcm
1: Captrue screen 电脑屏幕
0: 麦克风
-r:指定帧率
yuv:视频原始格式
pcm:音频原始格式

Duration: N/A, start: 20204.190667, bitrate: N/A
   Stream #0:0: Video: rawvideo (UYVY / 0x59565955), uyvy422, 1440x900, 1000k tbr, 1000k tbn, 1000k tbc
Stream mapping:
 Stream #0:0 -> #0:0 (rawvideo (native) -> rawvideo (native))
Press [q] to stop, [?] for help
Output #0, rawvideo, to 'out.yuv':
 Metadata:
   encoder         : Lavf58.45.100
   Stream #0:0: Video: rawvideo (UYVY / 0x59565955), uyvy422, 1440x900, q=2-31, 622080 kb/s, 30 fps, 30 tbn, 30 tbc
   Metadata:
     encoder         : Lavc58.91.100 rawvideo

3 录视频

录制摄像头视频

 ffmpeg -f avfoundation -video_size 640x480 -framerate 30 -i 0: -r 30 out.yuv

video_size:1280x720 640x480 320x240
framerate:限制视频的采集帧率。这个必须要根据提示要求进行设置,如果不设置就会报错。

4 抽取视频音频流

ffmpeg -i v0201f7e0000bm2tfoe8qblabkkeis30.mp4 -acodec copy -vn out.aac

5 抽取视频视频流

ffmpeg -i out.mp4 -vcodec copy -an out.h264

6 封装格式转换

比如 mp4格式转换成flv格式
ffmpeg -i water.mp4 -vcodec copy -acodec copy out.flv

7 视频合并

将音频流文件和视频流文件合并

cj-yh-mac-n:video mac$ ffmpeg -i out.h264 -i out.aac -vcodec copy -acodec copy out.flv

8 提取原始数据

8.1 提取YUV(节省带宽,压缩比好)

ffmpeg -i out.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuv

图片来源于西瓜视频截图,若侵权,请联系删除

YUV采样有如下三方式:
YUV 4:4:4采样,每一个Y对应一组UV分量,不常用,耗内存严重,耗带宽,和RGB差不多,压缩比不够
YUV 4:2:2采样,每两个Y共用一组UV分量,采样一个像素点都会采样其Y分量,而UV是左右间隔采样

YUV 4:2:0采样(历史遗留实质是4:1:1),每四个Y共用一组UV分量。每个像素都会采样Y分量,而U,V分量会间隔采样, 这种方式目前主流方式.如下图:

图片来源于西瓜视频截图,若侵权,请联系删除.png

YO Y1 Y5 Y6 U0 V5
Y2 Y3 Y7 Y8 U7 V2

获取视频一帧的yuv码流:

void yuv420 (const char *path, int width,int height){
   //读
   FILE *fp =   fopen(path,"rb+");
   //写
   FILE *y_fp = fopen("/Users/usermae/Desktop/ffmpeg/基础一/yuv/yuv420_y.y","wb+");
   FILE *u_fp = fopen("/Users/usermae/Desktop/ffmpeg/基础一/yuv/yuv420_u.y","wb+");
   FILE *v_fp = fopen("/Users/usermae/Desktop/ffmpeg/基础一/yuv/yuv420_v.y","wb+");
   int i = 0;
   // 按照最大容量申请内存。
   unsigned char *p = (unsigned char*) malloc(width * height * 3/2);
//    写一帧大小 !!!
   while(i < 1) {
       fread(p,1,width * height * 3/2,fp);
       // y亮度
       fwrite(p,1,width * height,y_fp);
       //u 1/4
       fwrite(p + width * height ,1,width * height/4,u_fp);
       // v 1/4
       fwrite(p +  width * height * 5/4 ,1,width * height/4,v_fp);
       i++;
   }
   free(p); p = NULL;
   fclose(fp);
   fclose(y_fp);
   fclose(u_fp);
   fclose(v_fp);
   
}

rawvideo:指定将视频转成原始数据

8.2 提取pcm

ffmpeg -i out.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm

-ac:2 双声道
-ar 44100 音频采样率 48k 32k 16k 44.1k
S16e:数据存储方式:有符号的16位数字表示

9 滤镜

9.1 添加水印

ffmeg -i water.mp4 -vf "movie=logo.gif,scale=100:50[watermask];[in][watermask] overlay=40:50 [out]" out.mp4

movie 指定logo位置。scale 指定 logo h w大小。Overlay x和y 指定 logo 摆放的位置。
上面命令 水印图为gif格式时无法循环播放;实现循环播放,如何做呢???

9.2 删除水印

ffplay -i water.mp4 -vf delogo=x=30:y=10:w=64:h=48:show=1

Logo area is outside of the frame 需要先找到水印的具体位置,才可以删除,生成新的视频。

ffmpeg -i water.mp4 -vf delogo=x=806:y=20:w=70:h=80 output.mp4

9.3 视频压缩一半

ffmpeg -i out.mp4 -vf scale=iw/2:-1 scale.mp4

-1代表高度随宽度改变。

9.4 视频剪切

从中心点剪切

ffmpeg -i out.mp4 -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy -video_size 320x180 scale.mp4

in_w-200/in_h-200: 宽度/高度减去200
-c:v 视频编码器。

从某个位置剪切

ffmpeg -i out.mp4 -vf crop=100:100:20:20 -c:v libx264 -c:a copy -video_size 320x180 scale.mp4

out_w: 输出的宽度 100。
out_h: 输出的高度 100。
x:20
y:20

9.5 倍速播放

ffmpeg -i out.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" scale.mp4

2倍播放 丢帧一半。

10 视频的裁剪

ffmpeg -i out.mp4 -ss 00:00:01 -t 15 scale.mp4
从视频的1秒开始,裁剪15s。

11 视频hls切片

ffmpeg -i water.mp4 -c:v libx264 -strict -2 -f hls out.m3u8

如果指定aac编码器
ffmpeg -i water.mp4 -c:v libx264 -c:a libfdk_aac -strict -2 -f hls out.m3u8

运行结果:Unknown encoder 'libfdk_aac'
需要重新下载ffmpeg并 添加一些库 麻烦啊!!! 参考 https://www.jianshu.com/p/d1ed7b860f1b

12 把裁剪的片段合并成一个视频

首先创建一个test.txt文件,文件内容格式:file '片段视频文件'

image.png

然后执行命令:ffmpeg -f concat -i test.txt -c copy water.mp4

13 视频转化成图片

13.1 转化成一张普通的图片

ffmpeg -i ModernTalking.mp4 -r 1 -f image2 MT-%3d.png

-r:帧率 1秒一张图

13.2 转化成gif

fmpeg -i ModernTalking.mp4 -ss 00:00:00 -t 10 MT_GIF.gif

-t:n 截取时长为ns的片段进行转化成gif n越大 gif大小越大 效果越好,下面是n=4截取的gif效果,视频资源来源于西瓜视频。


MT_GIF.gif

14 将一组图片合转成视频

ffmpeg -f image2 -i MT-%3d.png newshiping.mp4

命令行背下来 ...


23763e82c7ecfce25b3217999399e775.jpeg

未完待续!!!

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