前言
大家好,周末继续努力学习,冲冲,奥利给!
今天主要还是分享ffmpeg命令的一些操作:提前像素格式和PCM数据、如何利用ffmpeg进行命令转封装。
一、利用ffmpeg提取像素格式和PCM数据
1、提取YUV:
- 提取流媒体文件3秒数据,分变率和源视频一样:
ffmepg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p yuv420P_orig.yuv
效果如下:
播放花屏,主要是分辨率不对
修改一下:
现在就播放正常了
- 现在我们来转换成指定大小的像素格式大小的yuv格式
ffmpeg -i test_1280x720.mp4 -t 6 -pix_fmt yuv420p -s 320x240 yuv420p_320x240.yuv
效果如下:
分辨率小了,所以播放变模糊了
参数说明:
- -i: 表示要输入的流媒体文件
- -t: 表示截取流媒体文件内容长度
- -pix_fmt:指定要流媒体要转换的格式
- -s:指定分辨率大小
2、提取rgb:
- 提取流媒体指定大小的分辨率:
ffmpeg -i test.mp4 -t 3 -pix_fmt rgb24 -s 320x240 rgb24_320x240.rgb
我们把转换结果播放试试:
代码语言:javascript复制ffplay -i rgb24_320x240.rgb -pixel_format rgb24 -video_size 320x240
注:这里的 -video_size表示视频大小。
3、rgb和yuv之间的转换:
代码语言:javascript复制ffmpeg -s 1280x720 -pix_fmt yuv420p -i yuv420p_1280x720.yuv -pix_fmt rgb24 rgb24_1280x720.rgb
效果如下,我们来播放一下:
代码语言:javascript复制ffplay -pixel_format rbg24 -video_size 1280x720 -i rgb24_1280x720.rgb
4、提取PCM数据:
我们直接来看案例:
代码语言:javascript复制ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm
代码语言:javascript复制ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -sample_fmt s16 48000_2_s16.wav
代码语言:javascript复制ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -codec:a pcm_s16le out2_s16le.wav
参数说明:
- -ar 48000:表示采样率为48000
- -ac 2 :表示两通道
- -f :表示输出格式
通过上面你会发现这里指定了三种输出格式:s16le和s16和pcm_s16le;那这三种格式我们可以从哪里可以查看说明:
s16le和pcm_s16le:
代码语言:javascript复制ffmpeg -encoders | findstr pcm
代码语言:javascript复制ffmpeg -muxers | findstr PCM
s16:
我们来看一下这些转换后的视频播放效果:
- 输出格式为s16le的效果:
ffplay -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm
我们可以发现只有声音没有图像出来:
- 输出格式为s16(效果差不多和s16le):
- 输出格式为pcm_s16le:
二、如何利用ffmpeg进行命令转封装
1、保持编码格式:
代码语言:javascript复制ffmpeg -i test.mp4 -t 60 -codec copy out.mp4
2、改变编码格式:
代码语言:javascript复制ffmpeg -i test.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv
3、修改帧率:
代码语言:javascript复制ffmpeg -i test.mp4 -r 15 output2.mp4
4、修改视频码率
代码语言:javascript复制ffmpeg -i test.mp4 -b:v 400k output_b.mkv
5、修改音频码率:
代码语言:javascript复制ffmpeg -i test.mp4 -b:a 192k output_ba.mp4
6、修改音视频码率:
代码语言:javascript复制ffmpeg -i test.mp4 -b:v 400k -b:a 192k output_bva.mp4
第五和第六和上面其他操作方法一样,我就不演示具体效果了,不熟悉的朋友可以自己动手练习一下。
三、总结:
以上操作都是一些简单的动手操作,明白里面参数的意思就行;更多框架分析,我们后期见;