前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用ffmpeg进行提取PCM数据和封装格式转换

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

作者头像
用户6280468
发布2022-03-21 17:22:09
3K0
发布2022-03-21 17:22:09
举报
文章被收录于专栏:txp玩Linuxtxp玩Linux

前言

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

今天主要还是分享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

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

三、总结:

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 txp玩Linux 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、利用ffmpeg提取像素格式和PCM数据
    • 1、提取YUV:
      • 2、提取rgb:
        • 3、rgb和yuv之间的转换:
          • 4、提取PCM数据:
          • 二、如何利用ffmpeg进行命令转封装
            • 1、保持编码格式:
              • 2、改变编码格式:
                • 3、修改帧率:
                  • 4、修改视频码率
                    • 5、修改音频码率:
                      • 6、修改音视频码率:
                      • 三、总结:
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档