利用ffmpeg进行提取PCM数据和封装格式转换

2022-03-21 17:22:09 浏览数 (1)

前言

大家好,周末继续努力学习,冲冲,奥利给!

今天主要还是分享ffmpeg命令的一些操作:提前像素格式和PCM数据、如何利用ffmpeg进行命令转封装。

一、利用ffmpeg提取像素格式和PCM数据

1、提取YUV:

  • 提取流媒体文件3秒数据,分变率和源视频一样:
代码语言:javascript复制
ffmepg -i test_1280x720.mp4 -t 3  -pix_fmt yuv420p yuv420P_orig.yuv

效果如下:

播放花屏,主要是分辨率不对

修改一下:

现在就播放正常了

  • 现在我们来转换成指定大小的像素格式大小的yuv格式
代码语言:javascript复制
ffmpeg -i test_1280x720.mp4 -t 6 -pix_fmt yuv420p -s 320x240 yuv420p_320x240.yuv

效果如下:

分辨率小了,所以播放变模糊了

参数说明:

  • -i: 表示要输入的流媒体文件
  • -t: 表示截取流媒体文件内容长度
  • -pix_fmt:指定要流媒体要转换的格式
  • -s:指定分辨率大小

2、提取rgb:

  • 提取流媒体指定大小的分辨率:
代码语言:javascript复制
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的效果:
代码语言:javascript复制
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

第五和第六和上面其他操作方法一样,我就不演示具体效果了,不熟悉的朋友可以自己动手练习一下。

三、总结:

以上操作都是一些简单的动手操作,明白里面参数的意思就行;更多框架分析,我们后期见;

0 人点赞