流媒体开发7ffmpeg基础命令

Posted 努力努力再努力~~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了流媒体开发7ffmpeg基础命令相关的知识,希望对你有一定的参考价值。

一、ffmpeg命令参数说明

1.1主要参数:

  • -i 设定输入流
  • -f 设定输出格式(format)
    • 如果指定了输出格式,后面文件名即便是mp4,输出的也是-f指定的flv,如果不指定则以后缀为准
ffmpeg -i Forrest_Gump_IMAX.mp4 -codec copy -ss 10 -t 10 -f flv out.mp4
  • -ss 开始时间
  • -t 时间长度

1.2音频参数:

  • -aframes 设置要输出的音频帧数
  • -b:a 音频码率
  • -ar 设定采样率
  • -ac 设定声音的Channel数
  • -acodec 设定声音编解码器,如果用copy表示原始编解码数据必须被拷贝。
  • -an 不处理音频
  • -af 音频过滤器
ffmpeg -i test.mp4 -b:a 192k -ar 48000 -ac 2 -acodec libmp3lame -aframes 200 out2.mp3
提取出音频,修改编码方式为mp3,并且修改输出的码率、帧率、采样率、通道数

1.3视频参数:

  • -vframes 设置要输出的视频帧数
  • -b 设定视频码率
  • -b:v 视频码率
  • -r 设定帧速率
  • -s 设定画面的宽与高
  • -vn 不处理视频
  • -aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777(分辨率没变,只是修改了显示的横纵比)
  • -vcodec 设定视频编解码器,如果用copy表示原始编解码数据必须被拷贝。
  • -vf 视频过滤器
ffmpeg -i test.mp4 -vframes 300 -b:v 300k -r 30 -s 640x480 -aspect 16:9 -vcodec libx265 out.265

更多参考:
  http://www.ffmpeg.org/ffmpeg.html

二、ffmpeg命令提取音视频数据

  • 保留封装格式
#只提取音频
ffmpeg -i test.mp4 -acodec copy -vn audio.mp4
#只提取视频
ffmpeg -i test.mp4 -vcodec copy -an video.mp4
  • 提取视频
保留编码格式:ffmpeg -i test.mp4 -vcodec copy -an test_copy.h264
强制格式:ffmpeg -i test.mp4 -vcodec libx264 -an test.h264
  • 提取音频
保留编码格式:ffmpeg -i test.mp4 -acodec copy -vn test.aac
强制格式:ffmpeg -i test.mp4 -acodec libmp3lame -vn test.mp3

三、提取像素格式和PCM数据

  • 提取YUV
    • 提取3秒数据,分辨率和源视频一致
ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p yuv420p_orig.yuv
  • 提取3秒数据,分辨率转为320x240
ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p -s 320x240  yuv420p_320x240.yuv
  • 提取RGB
    • 提取3秒数据,分辨率转为320x240
ffmpeg -i test.mp4 -t 3 -pix_fmt rgb24 -s 320x240 rgb24_320x240.rgb
  • RGB和YUV之间的转换
ffmpeg -s 320x240 -pix_fmt yuv420p -i yuv420p_320x240.yuv -pix_fmt rgb24 rgb24_320x240_2.rgb
  • 提取PCM
ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm
####-f s16le,pcm纯裸数据,ffmpeg -muxers | findstr PCM   #查找对应的PCM封装格式
ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -sample_fmt s16 out_s16.wav
####-sample_fmt,ffmpeg -sample_fmts  #查看当前支持的所有格式,wav有个头部,后面的pcm数据是一样的  
ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -codec:a pcm_s16le out2_s16le.wav
codec:a和acodec是一样的,ffmpeg -encoders | findstr PCM
ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f f32le 48000_2_f32le.pcm
ffmpeg -i test.mp4 -t 10 -vn -ar 48000 -ac 2 -f f32le 48000_2_f32le_2.pcm
  • 不同命令sle生成的wav是一模一样的
  • wav的可以直接使用ffplay播放,因为有头,pcm则需要指定采样率、通道、封装格式

四、命令转封装

  • 保持编码格式:
ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.ts
ffmpeg -i test.mp4 -codec copy test_copy2.ts
两条命令效果一样
  • 改变编码格式:
ffmpeg -i test.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv
需要注意有些封装格式不支持h265
  • 修改帧率:
ffmpeg -i test.mp4 -r 15 -codec copy output.mp4 (错误命令,包含-codec copy帧率就不会被修改了)
ffmpeg -i test.mp4 -r 15 output2.mp4
  • 修改视频码率:
ffmpeg -i test.mp4 -b 400k output_b.mkv
ffmpeg -i test.mp4 -b:v 400k output_bv.mkv

两条命令实现一样,并且音频也被重新编码了,编码成mkv默认支持的编码格式,不想改变音频需要加-acodec copy

  • 修改音频码率:
ffmpeg -i test.mp4 -b:a 192k output_ba.mp4

如果不想重新编码video,需要加上-vcodec copy

  • 修改音视频码率:
ffmpeg -i test.mp4 -b:v 400k -b:a 192k output_bva.mp4
  • 修改视频分辨率:
ffmpeg -i test.mp4 -s 480x270 output_480x270.mp4
  • 修改音频采样率:
ffmpeg -i test.mp4 -ar 44100 output_44100hz.mp4

以上是关于流媒体开发7ffmpeg基础命令的主要内容,如果未能解决你的问题,请参考以下文章

流媒体开发5ffmpeg命令帮助分类查询基础数据流

流媒体开发6ffplay命令

流媒体开发10ffmpeg命令直播

流媒体开发10ffmpeg命令直播

c/c++程序员的黄金发展方向:音视频开发

流媒体开发11ffmpeg命令过滤器(裁剪水印画中画多宫格)