zoukankan      html  css  js  c++  java
  • 1.ffmpeg、ffplay、ffprobe命令使用

    1.学前知识 

    1.1视频码率值

    码率公式: 码率(kbps)=文件大度小(KB)*8/时间(秒)

    所以码率和视频文件大小成正比的,不过码率超过一定值后,人眼是看不出效果的.

     

    接下来,我们便先来学习ffmpeg命令使用

    2.ffmpeg常用命令使用

    ffmpeg命令- 用于转码的应用程序, 也可以从url/现场音频/视频源抓取输入源

    参考:http://ffmpeg.org/ffmpeg.html

    常用参数使用

    主要参数

    • -i 设定输入流
    • -f 设定输出格式
    • -ss 00:00:15 从制定时间开始转换(如果不加:则表示为秒,比如-ss 70,表示从第70秒开始)
    • -t 00:01:15 设置输出的视频时长时间(如果不加:则表示为秒,比如-t 110,表示110秒)
    • -y 覆盖已有文件
    • -fs limit_size  设置文件大小上限

    视频参数

    • -b:v 640k设定视频码率为640k,默认为200Kbit/s
    • -minratee 600k 设定视频码率最小阈值为700k
    • -maxrate 700k 设定视频码率最大阈值为700k
    • -r 60 设定帧速率fps为60,默认为25
    • -s 720x352 设定画面的宽与高为720X352
    • -aspect 16:9 设定画面的比例为16:9 (也可以使用1.3333, 1.7777)
    • -vn 不处理视频(比如只提取音频的时候)
    • -vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器(比如-vcodec codec,表示使用输入流的格式, -vcodec xvid表示使用XVID编码压缩视频)
    • -vf scale=960:540 将输入的视频压缩至960X540输出,如果写为960:-1,则输出时保持原始的宽高比

    音频参数

    • -ar 22500 设定采样率(audio rate)为22.5khz (单位:Hz),PSP只认24000
    • -b:a 640k 设定音频码率为640k,默认为200Kbit/s
    • -ac 2 设定声音的Channel数为2(1就是单声道,2就是立体声)
    • -acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器(比如-acodec codec,表示使用输入流的格式, -acodec aac表示使用aac编解码)
    • -an 不处理音频(比如只提取视频的时候)

    示例命令如下所示:

    ffmpeg –h //打开帮助
    
    ffmpeg -i input.avi -b:v 640k output.ts          //转换为ts视频文件
    
    ffmpeg -i test.mp4 -vn music.aac                   //提取出音频文件
    
    ffmpeg -i test.mp4 -vn music.aac                   //提取出音频文件
    
    ffmpeg -i input.mp4 -vcodec copy -an output.mp4  //输出的视频取消掉音频流
    //-i input.avi:表示输入文件为input.avi
    //-b:v 640k:设置输出的视频文件码率值
    // output.ts:生成的文件名称
    
    ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv
    //-an:取消output.ts视频文件的音频流
    
    ./ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4 
    //将logo贴在左上角
    
     ./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4
    //贴在右下角
    
     ./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay0:H-h output.mp4
    //贴在左下角, overlay W-w:0 贴在右上角
    
     
    
    ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4 
    //添加过滤器,位置位于[0,0],w=220,h=90,厚度为100(厚度越大,越模糊).1:表示有一个绿色的矩形,设置为0就表示没有
     
    
    ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
    // -r :设置帧数为1, -q:v:设置jpeg图片质量为高质量(2),所以每隔一秒,存一张图片下来
    
    ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg 
    // - ss :设置开始时间,-t:设置time时间长度, -f 设定输出格式 , 所以会从input.mp4的第20s时间开始,往下10s,每隔1s就抓一帧,总共会抓10帧。
    
    ffmpeg -i  input.mkv -y -f image2 -ss 10 -r 1 -t 1 –s 350x220 a.jpg
    //截取一张第10秒的352x220尺寸大小的,格式为jpg的a.jpg图片

     

    3.ffplay常用命令使用

    ffplay命令- FFplay是一个非常简单和可移植的媒体播放器,使用FFmpeg库和SDL库。它主要用作各种FFmpeg API的测试平台

    参考: http://ffmpeg.org/ffplay.html

    最简单的播放命令: ffplay input.avi

    播放的时候,支持的快捷键有:

    • q,ESC : 退出。
    • f : 切换全屏。
    • P,空格键 : 停下来。
    • m : 切换静音。
    • 9, 0 : 分别减少和增加体积。
    • /, * : 分别减少和增加体积。
    • a : 在当前程序中循环音频通道。
    • v : 循环视频频道。
    • t : 当前程序中的循环字幕通道。
    • c : 循环程序。
    • w:循环视频过滤器或显示模式。
    • s : 进入下一帧
    • left/right : 寻找向后/向前10秒。
    • down/up : 向后/前进1分钟。
    • page down/page up : 寻找上一视频/下一视频。或者,如果没有,请向后/向前寻求10分钟。
    • 鼠标右键单击 : 在文件中寻求与宽度分数相对应的百分比。
    • 鼠标左键双击 : 切换全屏。

     

    4.ffprobe常用命令使用

    ffprobe命令- ffprobe用来查看多媒体文件的信息

    常用命令如下所示:

    ffprobe -show_packets input.mp4
    //获取文件信息并显示文件中每个帧的包信息(包含audio和video包),如下图所示:

     

    • codec_type : 帧类型,如视频包、音频包等
    • stream_index : 多媒体的stream索引(上图的stream0表示video数据,steam1表示audio数据)
    • pts(Presentation Time Stamp) : 显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。
    • pts_time : 将pts换算为时间后的值
    • dts(Decoding Time Stamp) : 解码时间戳,表示在什么时候解码的这一帧数据。
    • dts_time : 将dts换算为时间后的值
    • duration :  该帧占用的时间值(需要持续多久切换下一帧)
    • duration_time :  根据不同格式计算后的多媒体包占用的时间值
    • size : 该帧的大小
    • pos : 该帧所在的文件偏移位置
    • flags : 该帧标记,如关键包与非关键包的标记

     

    ffprobe -show_packets  -show_data input.mp4
    //获取文件信息并显示文件中每个帧的包信息以及包里的具体data信息
    
     
    
    ffprobe -show_format input.mkv
    //获取文件信息以及格式信息,如下图所示:

     

    • nb_streams : 打开的视频文件中流的数量,一般为2,表示音频流和视频流
    • nb_programs : 节目数
    • format_name : 文件封装格式名称,  该文件的格式是Matroska,webm(MKV的全称)格式
    • format_long_name : 文件封装格式具体的名称
    • start_time : 起始时间
    • duration : 视频总时长
    • size : 文件大小
    • bit_rate : 码率, 码率公式为 码率(kbps)=文件大度小(KB)*8/时间(秒)
    • probe_score : 探测出的视频评分,100是最大的分数,这意味着FFmpeg确信格式是真实的

     

    ffprobe -show_streams input.mkv
    //获取视频文件中流的具体信息,比如音频采样率、视频尺寸、帧率等

    5.视频解码步骤

    首先将读取视频封装,然后通过不同的封装格式读取出视频码流(比如:h.264、mpeg4等),然后再通过视频码流解码出yuv

    比如mkv视频: mkv->h.264->yuv 

    下章学习: 移植到QT使用

  • 相关阅读:
    v-cloak 的用法
    vuejs开发流程
    java核心技术卷一
    删除数组重复项
    看懂oracle执行计划
    sheet制作返回按钮
    sql-server安装
    openpyxl 实现excel字母列号与数字列号之间的转换
    实战:第七章:微信H5支付时用户有微信分身停留5秒后未选择哪个微信分身,也未支付就被动回调到商户支付是否完成的页面...
    微信H5支付时用户有微信分身停留5秒后未选择哪个微信分身,也未支付就被动回调到商户支付是否完成的页面
  • 原文地址:https://www.cnblogs.com/lifexy/p/12871270.html
Copyright © 2011-2022 走看看