• ffmpeg笔记


    1. h264_mp4toannexb使用

    h264有两种封装,
    一种是annexb模式,传统模式,有startcode,SPS和PPS是在ES中,vlc里打开编码器信息中显示h264;
    一种是mp4模式,一般mp4 ,mkv会有,没有startcode,SPS和PPS以及其它信息被封装在container中,每一个frame前面是这个frame的长度,vlc里打开编码器信息中显示avc1。
    很多解码器只支持annexb这种模式,因此需要将mp4做转换
    2. mp4转h264裸流

    ffmpeg -i input.mp4 -vcodec h264 output.h264

    3. h264转mp4

    ffmpeg -i input.h264 -vcodec mpeg4 output.mp4

    4.视频文件本身其实是一个容器(container),里面包括了视频和音频,也可能有字幕等其他内容

    $ ffmpeg -formats 查看 FFmpeg 支持的容器

    $ ffmpeg -codecs 查看 FFmpeg 支持的编码格式,视频编码和音频编码都在内 v[h264,h265,vp8,vp9,av1] a[mp3,aac]

    $ ffmpeg -encoders v[libx264,nvenc,libx265,libvpx, libaom] a[libfdk-aac, aac]

    5.FFmpeg 的命令行参数非常多,可以分成五个部分

    $ ffmpeg {1} {2} -i {3} {4} {5

    ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_optionsoutput_url} ...

    全局参数

    输入文件参数

    输入文件

    输出文件参数

    输出文件

    6.常用命令

    -c:指定编码器-c copy:直接复制,不经过重新编码(这样比较快)

    -c:v:指定视频编码器

    -c:a:指定音频编码器

    -i:指定输入文件

    -an:去除音频流

    -vn: 去除视频流

    -preset:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。-y:不经过确认,输出时直接覆盖同名文件。

    $ ffmpeg -i input.mp4 #查看视频文件的元信息,比如编码格式和比特率

    $ ffmpeg -i input.mp4 -hide_banner #-hide_banner参数,可以只显示元信息。

    7.转换编码格式transcoding

    $ ffmpeg -i [input.file] -c:v libx264 output.mp4 #一般使用编码器libx264,所以只需指定输出文件的视频编码器即可

    $ ffmpeg -i [input.file] -c:v libx265 output.mp4 #转成 H.265 编码

    8.转换容器格式transmuxing

    $ ffmpeg -i input.mp4 -c copy output.webm #将视频文件从一种容器转到另一种容器

    9.调整码率transrating$ ffmpeg -i input.mp4 -minrate 964K -maxrate 3856K -bufsize 2000K output.mp4

    10.改变分辨率(transsizing)$ ffmpeg -i input.mp4 -vf scale=480:-1 output.mp4

    11.提取音频(demuxing)$ ffmpeg -i input.mp4 -vn -c:a copy output.aac

    12.添加音轨(muxing)$ ffmpeg -i input.aac -i input.mp4 output.mp4

    13.截图$ ffmpeg -y -i input.mp4 -ss 00:01:24 -t 00:00:01 output_%3d.jpg

    $ ffmpeg -ss 01:23:45 -i input -vframes 1 -q:v 2 output.jpg #可以指定只截取一帧,-vframes 1指定只截取一帧,-q:v 2表示输出的图片质量,一般是1到5之间(1 为质量最

    14.裁剪(cutting)

    $ ffmpeg -ss [start] -i [input] -t [duration] -c copy [output]

    $ ffmpeg -ss [start] -i [input] -to [end] -c copy [output]

    15.为音频添加封面

    $ ffmpeg -loop 1 -i cover.jpg -i input.mp3 -c:v libx264 -c:a aac -b:a 192k -shortest output.mp4

    一个是封面图片cover.jpg,另一个是音频文件input.mp3-loop 1参数表示图片无限循环,-shortest参数表示音频文件结束,输出视频就结束。

    16 推流udp 

    ffmpeg -re -i chunwan.h264 -vcodec copy -f h264 udp://127.0.0.1:6666 //推流

    注1:-re一定要加,代表按照帧率发送,否则ffmpeg会一股脑地按最高的效率发送数据。

    注2:-vcodec copy要加,否则ffmpeg会重新编码输入的H.264裸流。

    ffplay -f h264 udp://127.0.0.1:6666 //拉流

    遗留问题:组播测试不行, 推送其他封装格式

    17 ffplay播放摄像头视频

    1.ffmpeg -list_devices true -f dshow -i  dummy #查看设备的名称 video="Chicony USB2.0 Camera" audio="麦克风 (Realtek High Definition Audio)"

    2.ffplay -f dshow -i video="Chicony USB2.0 Camera" //摄像头视频

    或者ffplay -f vfwcap -i 0//摄像头视频

    3.ffplay -f dshow -i audio="麦克风 (Realtek High Definition Audio)" //麦克风音频

    4.ffmpeg -list_options true -f dshow -i video="Chicony USB2.0 Camera" //查询摄像头信息

    5.ffmpeg -list_options true -f dshow -i audio="麦克风 (Realtek High Definition Audio)" //查询麦克风信息

    18.官网命令例子

    1. ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi //修改视频码率  视频质量明显下降

    2. ffmpeg -i input.avi -r 24 output.avi //修改帧率    为啥码率反而增大了???

    _______              ______________
    |       |            |              |
    | input |  demuxer   | encoded data |   decoder
    | file  | ---------> | packets      | -----+
    |_______|            |______________|      |
                                               v
                                           _________
                                          |         |
                                          | decoded |
                                          | frames  |
                                          |_________|
     ________             ______________       |
    |        |           |              |      |
    | output | <-------- | encoded data | <----+
    | file   |   muxer   | packets      |   encoder
    |________|           |______________|

    19.修改分辨率 ffmpeg -i hama.mp4 -acodec copy -vcodec libx264 -s 200x150 hama_small.flv
    视频要重新编码不能用copy要不会失败
    20 查找相关的内容ffmpeg -formats | findstr flv
    21 ffmpeg -codecs | findstr 264
  • 相关阅读:
    05-java学习-循环结构
    04-java学习-选择结构
    03-java学习-基本数据类型-运算符-键盘接收用户输入
    A02-java学习-classpath配置-标识符-java变量类型
    A01-java学习环境准备
    20190215面试-C#操作外设-多线程-shocket
    装饰者模式
    状态模式
    DllImport学习
    网络编程(一)----基础知识、数据流套接字
  • 原文地址:https://www.cnblogs.com/xpylovely/p/16049497.html
Copyright © 2020-2023  润新知