• FFmpeg学习(二)FFmpeg命令学习


    一:FFmpeg音视频处理流程

    案例:

    二:FFmpeg命令基本分类

    官方网站:https://ffmpeg.org/documentation.html

    官方文档:https://ffmpeg.org/ffmpeg.html

    (一)基本信息查询命令

    详细见:https://www.jianshu.com/p/a6e711cd3f8d

    (二) 录制命令

    1.mac下面的命令

    ffmpeg -f avfoundation -i 1 -r 30 out.yuv       #注释:使用avfoundation以30帧的频率进行录屏输出为out.yuv文件
    -f : 指定使用avfoundation采集数据,设定输出设备
    -i :指定从哪采集数据,它是一个文件索引号,在MAC上,1代表桌面
    -r : 指定帧率

    录制音频:https://www.jianshu.com/p/e63c063987b6

    2.其他设备下:https://blog.csdn.net/shaosunrise/article/details/81068080

    3.基于2中测试linux使用命令

    (1)查看设备

    ffmpeg -devices -hide_banner  

    注:-hide_banner 所有FFmpeg工具通常都会显示版权声明、构建选项和库版本(如下图所示)。此选项可用于禁止打印此信息。

    (2)录制视频(使用设备中x11grab

    ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 v-out.mp4

    上面的参数,指的是从屏幕的左上角(x=100, y=200)的位置,录制分辨率为1024×768的视频。

    -i :0.0+100,200 其中:0.0是X11服务的显示屏幕号,与DISPLAY环境变量相同:

    DISPLAY=:0.0
    在Linux/Unix类操作系统上, DISPLAY用来设置将图形显示到何处.
    直接登陆图形界面或者登陆命令行界面后使用startx启动图形, DISPLAY环境变量将自动设置为:0.0, 此时可以打开终端, 输出图形程序的名称(比如xclock)来启动程序, 图形将显示在本地窗口上, 在终端上输入printenv查看当前环境变量, 输出结果中有如下内容:
    DISPLAY 环境变量格式如下host:NumA.NumB,
    host:指Xserver所在的主机主机名或者ip地址, 图形将显示在这一机器上, 可以是启动了图形界面的Linux/Unix机器, 也可以是安装了Exceed, X-Deep/32等Windows平台运行的Xserver的Windows机器.
       如果Host为空, 则表示Xserver运行于本机, 并且图形程序(Xclient)使用unix socket方式连接到Xserver,而不是TCP方式.
    使用TCP方式连接时, NumA为连接的端口减去6000的值, 如果NumA为0, 则表示连接到6000端口; 使用unix socket方式连接时则表示连接的unix socket的路径, 如果为0, 则表示连接到/tmp/.X11-unix/X0 .
    NumB则几乎总是0.

    100是抓取时的x偏移量,200是y偏移量。

     

    ffplay v-out.mp4   #读取视频

    (3)基于(2)使用ALSA同时录制声音:https://blog.csdn.net/rong11417/article/details/102880549

    ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 -f alsa -ac 2 -i hw:0 av-out.mkv

    ALSA (Advanced Linux Sound Architecture)设备(这里作为输入设备)。

    要在配置过程中启用这个输入设备,您需要在系统上安装libasound。该设备允许从ALSA设备(设备存在)捕获。要捕获的设备名称必须是ALSA(card identifier)卡标识符。ALSA标识符具有语法:

    hw:CARD[,DEV[,SUBDEV]]     #其中DEV和SUBDEV组件是可选的。这三个参数(顺序:CARD、DEV、SUBDEV)指定卡号或标识符、设备号和子设备号(-1表示任意)。

    要查看系统当前识别的cards列表,请检查文件/proc/asound/cards和/proc/asound/devices.

    或者使用以下命令显示详细信息:

    aplay -l
    arecord -l

    例如,要使用ffmpeg从卡id为0的ALSA设备捕获,可以运行命令:

    ffmpeg -f alsa -i hw:0 alsaout.wav

    -ac[:stream_specifier] channels (input/output,per-stream)

    设置音频通道数。对于输出流,默认设置为输入音频通道的数量。对于输入流,此选项仅对音频抓取设备和原始demuxers有意义,并映射到相应的demuxer选项。

    (三)分解与复用 

    1.文件格式转换

    ffmpeg -i gfxm.mp4 -vcodec copy -acodec copy out.flv   #音视频编码处理方式都是copy,不改变

    ffmpeg version N-101559-ga1cd419 Copyright (c) 2000-2021 the FFmpeg developers
      built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
      configuration: --enable-shared --prefix=/usr/local/ffmpeg --enable-gpl --enable-libx264 --enable-libx265 --enable-debug --disable-optimizations --enable-pthreads --enable-shared
      libavutil      56. 68.100 / 56. 68.100
      libavcodec     58.132.100 / 58.132.100
      libavformat    58. 74.100 / 58. 74.100
      libavdevice    58. 12.100 / 58. 12.100
      libavfilter     7.109.100 /  7.109.100
      libswscale      5.  8.100 /  5.  8.100
      libswresample   3.  8.100 /  3.  8.100
      libpostproc    55.  8.100 / 55.  8.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'gfxm.mp4':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Multimedia Cloud Transcode (cloud.baidu.com)
      Duration: 00:02:01.11, start: 0.000000, bitrate: 746 kb/s
      Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 864x486 [SAR 1:1 DAR 16:9], 679 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
        Metadata:
          handler_name    : VideoHandler
          vendor_id       : [0][0][0][0]
      Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 64 kb/s (default)
        Metadata:
          handler_name    : SoundHandler
          vendor_id       : [0][0][0][0]
    Output #0, flv, to 'out.flv':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf58.74.100
      Stream #0:0(und): Video: h264 (High) ([7][0][0][0] / 0x0007), yuv420p, 864x486 [SAR 1:1 DAR 16:9], q=2-31, 679 kb/s, 25 fps, 25 tbr, 1k tbn, 12800 tbc (default)
        Metadata:
          handler_name    : VideoHandler
          vendor_id       : [0][0][0][0]
      Stream #0:1(und): Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz, stereo, fltp, 64 kb/s (default)
        Metadata:
          handler_name    : SoundHandler
          vendor_id       : [0][0][0][0]
    Stream mapping:
      Stream #0:0 -> #0:0 (copy)
      Stream #0:1 -> #0:1 (copy)
    Press [q] to stop, [?] for help
    frame=    0 fps=0.0 q=-1.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=  frame= 3024 fps=0.0 q=-1.0 Lsize=   11128kB time=00:02:01.06 bitrate= 753.0kbits/s speed=3.03e+03x    
    video:10028kB audio:954kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.330767%
    转换时产生的参数

    ffplay out.flv
    ffplay version N-101559-ga1cd419 Copyright (c) 2003-2021 the FFmpeg developers
      built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
      configuration: --enable-shared --prefix=/usr/local/ffmpeg --enable-gpl --enable-libx264 --enable-libx265 --enable-debug --disable-optimizations --enable-pthreads --enable-shared
      libavutil      56. 68.100 / 56. 68.100
      libavcodec     58.132.100 / 58.132.100
      libavformat    58. 74.100 / 58. 74.100
      libavdevice    58. 12.100 / 58. 12.100
      libavfilter     7.109.100 /  7.109.100
      libswscale      5.  8.100 /  5.  8.100
      libswresample   3.  8.100 /  3.  8.100
      libpostproc    55.  8.100 / 55.  8.100
    Input #0, flv, from 'out.flv':=    0KB vq=    0KB sq=    0B f=0/0   
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf58.74.100
      Duration: 00:02:01.17, start: 0.057000, bitrate: 752 kb/s
      Stream #0:0: Video: h264 (High), yuv420p(progressive), 864x486 [SAR 1:1 DAR 16:9], 679 kb/s, 25 fps, 25 tbr, 1k tbn, 50 tbc
      Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp, 64 kb/s
      11.07 A-V:  0.036 fd=   0 aq=   10KB vq=   18KB sq=    0B f=0/0 
    播放时产生参数

    2.抽取视频

    ffmpeg -i input_file -vcodec copy -an output_file_video     #-an表示不需要音频数据

    ffmpeg -i gfxm.mp4 -vcodec copy -an out.h264  #注意:后缀需要对应视频/音频编码
    ffplay version N-101559-ga1cd419 Copyright (c) 2003-2021 the FFmpeg developers
      built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
      configuration: --enable-shared --prefix=/usr/local/ffmpeg --enable-gpl --enable-libx264 --enable-libx265 --enable-debug --disable-optimizations --enable-pthreads --enable-shared
      libavutil      56. 68.100 / 56. 68.100
      libavcodec     58.132.100 / 58.132.100
      libavformat    58. 74.100 / 58. 74.100
      libavdevice    58. 12.100 / 58. 12.100
      libavfilter     7.109.100 /  7.109.100
      libswscale      5.  8.100 /  5.  8.100
      libswresample   3.  8.100 /  3.  8.100
      libpostproc    55.  8.100 / 55.  8.100
    Input #0, h264, from 'out.h264':   0KB vq=    0KB sq=    0B f=0/0   
      Duration: N/A, bitrate: N/A
      Stream #0:0: Video: h264 (High), yuv420p(progressive), 864x486 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1200k tbn, 50 tbc
        nan M-V:    nan fd=   1 aq=    0KB vq=   64KB sq=    0B f=0/0
    ffplay out.h264

    3.抽取音频

    ffmpeg -i input_file -vcodec copy -vn output_file_audio     #-vn表示不需要视频数据

    ffmpeg -i gfxm.mp4 -acodec copy -vn out.aac   #注意:后缀需要对应视频/音频编码
    ffplay version N-101559-ga1cd419 Copyright (c) 2003-2021 the FFmpeg developers
      built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
      configuration: --enable-shared --prefix=/usr/local/ffmpeg --enable-gpl --enable-libx264 --enable-libx265 --enable-debug --disable-optimizations --enable-pthreads --enable-shared
      libavutil      56. 68.100 / 56. 68.100
      libavcodec     58.132.100 / 58.132.100
      libavformat    58. 74.100 / 58. 74.100
      libavdevice    58. 12.100 / 58. 12.100
      libavfilter     7.109.100 /  7.109.100
      libswscale      5.  8.100 /  5.  8.100
      libswresample   3.  8.100 /  3.  8.100
      libpostproc    55.  8.100 / 55.  8.100
    [aac @ 0x7fbf5c0009c0] Estimating duration from bitrate, this may be inaccurate
    Input #0, aac, from 'out.aac':
      Duration: 00:03:02.33, bitrate: 44 kb/s
      Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 44 kb/s
       5.99 M-A:  0.000 fd=   0 aq=    8KB vq=    0KB sq=    0B f=0/0 
    ffplay out.aac

    (四)处理原始数据命令

    补充:音视频开发基础概述 - PCM、YUV、H264、常用软件介绍

    1.提取YUV数据(对于视频的裸数据而言,用得更多的是 YUV 数据格式,其中 “Y” 表示明亮度(Luminance 或 Luma),即灰度值;而 “U” 和 “V” 表示的则是色度(Chrominance 或 Chroma),作用是描述影像色彩及饱和度,指定像素的颜色。)

    -c:v 表示对v(视频)进行c(编码)

    -pix_fmt 指定了视频的像素格式

    ffmpeg -i gfxm.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv   #注意:-pix_fmt是指定输出的数据编码(可以与原来的视频编码不一致,但是会出现视频乱码等系列问题)
    ffmpeg version N-101559-ga1cd419 Copyright (c) 2000-2021 the FFmpeg developers
      built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
      configuration: --enable-shared --prefix=/usr/local/ffmpeg --enable-gpl --enable-libx264 --enable-libx265 --enable-debug --disable-optimizations --enable-pthreads --enable-shared
      libavutil      56. 68.100 / 56. 68.100
      libavcodec     58.132.100 / 58.132.100
      libavformat    58. 74.100 / 58. 74.100
      libavdevice    58. 12.100 / 58. 12.100
      libavfilter     7.109.100 /  7.109.100
      libswscale      5.  8.100 /  5.  8.100
      libswresample   3.  8.100 /  3.  8.100
      libpostproc    55.  8.100 / 55.  8.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'gfxm.mp4':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Multimedia Cloud Transcode (cloud.baidu.com)
      Duration: 00:02:01.11, start: 0.000000, bitrate: 746 kb/s
      Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 864x486 [SAR 1:1 DAR 16:9], 679 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
        Metadata:
          handler_name    : VideoHandler
          vendor_id       : [0][0][0][0]
      Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 64 kb/s (default)
        Metadata:
          handler_name    : SoundHandler
          vendor_id       : [0][0][0][0]
    Stream mapping:
      Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native))
    Press [q] to stop, [?] for help
    Output #0, rawvideo, to 'out.yuv':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf58.74.100
      Stream #0:0(und): Video: rawvideo (I420 / 0x30323449), yuv420p(progressive), 864x486 [SAR 1:1 DAR 16:9], q=2-31, 125971 kb/s, 25 fps, 25 tbn (default)
        Metadata:
          handler_name    : VideoHandler
          vendor_id       : [0][0][0][0]
          encoder         : Lavc58.132.100 rawvideo
    frame=    1 fps=0.0 q=-0.0 size=     512kB time=00:00:00.04 bitrate=104857.6kbitframe=  763 fps=0.0 q=-0.0 size=  469248kB time=00:00:30.52 bitrate=125952.8kbitframe= 1213 fps=1194 q=-0.0 size=  745984kB time=00:00:48.52 bitrate=125950.1kbiframe= 1484 fps=974 q=-0.0 size=  912640kB time=00:00:59.36 bitrate=125949.2kbitframe= 1643 fps=812 q=-0.0 size= 1010432kB time=00:01:05.72 bitrate=125950.4kbitframe= 1761 fps=503 q=-0.0 size= 1083136kB time=00:01:10.44 bitrate=125966.1kbitframe= 2018 fps=504 q=-0.0 size= 1241088kB time=00:01:20.72 bitrate=125953.8kbitframe= 2183 fps=483 q=-0.0 size= 1342720kB time=00:01:27.32 bitrate=125968.4kbitframe= 2313 fps=461 q=-0.0 size= 1422592kB time=00:01:32.52 bitrate=125960.6kbitframe= 2435 fps=441 q=-0.0 size= 1497600kB time=00:01:37.40 bitrate=125958.3kbitframe= 2554 fps=424 q=-0.0 size= 1570816kB time=00:01:42.16 bitrate=125960.5kbitframe= 2680 fps=411 q=-0.0 size= 1648384kB time=00:01:47.20 bitrate=125966.1kbitframe= 2807 fps=399 q=-0.0 size= 1726464kB time=00:01:52.28 bitrate=125963.6kbitframe= 2935 fps=390 q=-0.0 size= 1805056kB time=00:01:57.40 bitrate=125954.2kbitframe= 3024 fps=384 q=-0.0 Lsize= 1860044kB time=00:02:00.96 bitrate=125971.2kbits/s speed=15.4x    
    video:1860044kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
    提取产生参数

    由于数据被变为原始数据,所以播放时要指定像素大小,否则出现以下问题:

    ffplay out.yuv -s 864x486    #大小通过提取原始数据时产生的参数获取(在input中)

    2.提取PCM数据(通常音频的裸数据格式为脉冲编码调制(Pulse-code modulation,PCM)数据)

    ffmpeg -i gfxm.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm   #-ar 采样率  -ac 双声道  -f PCM数据存储格式 s有符号 16位 le小端存储
    ffmpeg version N-101559-ga1cd419 Copyright (c) 2000-2021 the FFmpeg developers
      built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
      configuration: --enable-shared --prefix=/usr/local/ffmpeg --enable-gpl --enable-libx264 --enable-libx265 --enable-debug --disable-optimizations --enable-pthreads --enable-shared
      libavutil      56. 68.100 / 56. 68.100
      libavcodec     58.132.100 / 58.132.100
      libavformat    58. 74.100 / 58. 74.100
      libavdevice    58. 12.100 / 58. 12.100
      libavfilter     7.109.100 /  7.109.100
      libswscale      5.  8.100 /  5.  8.100
      libswresample   3.  8.100 /  3.  8.100
      libpostproc    55.  8.100 / 55.  8.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'gfxm.mp4':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Multimedia Cloud Transcode (cloud.baidu.com)
      Duration: 00:02:01.11, start: 0.000000, bitrate: 746 kb/s
      Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 864x486 [SAR 1:1 DAR 16:9], 679 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
        Metadata:
          handler_name    : VideoHandler
          vendor_id       : [0][0][0][0]
      Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 64 kb/s (default)
        Metadata:
          handler_name    : SoundHandler
          vendor_id       : [0][0][0][0]
    Stream mapping:
      Stream #0:1 -> #0:0 (aac (native) -> pcm_s16le (native))
    Press [q] to stop, [?] for help
    Output #0, s16le, to 'out.pcm':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf58.74.100
      Stream #0:0(und): Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s (default)
        Metadata:
          handler_name    : SoundHandler
          vendor_id       : [0][0][0][0]
          encoder         : Lavc58.132.100 pcm_s16le
    size=   20860kB time=00:02:01.06 bitrate=1411.5kbits/s speed= 623x    
    video:0kB audio:20860kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
    提取PCM产生的数据

    注意:对于PCM播放时,我们要制定ar,ac,f参数

    ffplay out.pcm -ac 44100 -ac 2 -f s16le

    (五)滤镜命令

    主要的滤镜操作:画中画 视频的裁剪 音频倍速 水印的添加和删除

    1.获取音视频文件--->进行解封装(获取音频和视频数据)--->获得编码过的数据包--->对数据进行解压缩--->获取解码后的数据
    2.获取解码后的数据--->对数据进行过滤--->对数据进行重新编码
    3.获取编码后的数据---->进行音视频混合封装--->输出

    ffmpeg -i gfxm.mp4 -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4
    -i  指定多媒体文件
    -vf  使用视频滤镜
    crop 对视频进行裁剪操作
    in_w 输入的视频宽度 in_h 输入的视频高度
    -c:v 对视频进行编码 格式为libx264(视频编码器)
    -c:a 对音频进行编码 格式为copy,直接拷贝,不做多处理

    注意:crop的参数格式为w:h:x:y, w、h为输出视频的宽和高, x、y标记输入视频中的某点,将该点作为基准点,向右下进行裁剪得到输出视频。 如果x y不写的话,默认居中剪切

    (六)音视频裁剪

    ffmpeg -i gfxm.mp4 -ss 00:01:00 -t 10 out.ts
    -ss 视频的开始时间 00:00:00 时:分:秒
    -t 时间长度 单位s
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'gfxm.mp4':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Multimedia Cloud Transcode (cloud.baidu.com)
      Duration: 00:02:01.11, start: 0.000000, bitrate: 746 kb/s
      Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 864x486 [SAR 1:1 DAR 16:9], 679 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
        Metadata:
          handler_name    : VideoHandler
          vendor_id       : [0][0][0][0]
      Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 64 kb/s (default)
        Metadata:
          handler_name    : SoundHandler
          vendor_id       : [0][0][0][0]
    Stream mapping:
      Stream #0:0 -> #0:0 (h264 (native) -> mpeg2video (native))
      Stream #0:1 -> #0:1 (aac (native) -> mp2 (native))
    Press [q] to stop, [?] for help
    Output #0, mpegts, to 'out.ts':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf58.74.100
      Stream #0:0(und): Video: mpeg2video (Main), yuv420p(progressive), 864x486 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 fps, 90k tbn (default)
        Metadata:
          handler_name    : VideoHandler
          vendor_id       : [0][0][0][0]
          encoder         : Lavc58.132.100 mpeg2video
        Side data:
          cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
      Stream #0:1(und): Audio: mp2, 44100 Hz, stereo, s16, 384 kb/s (default)
        Metadata:
          handler_name    : SoundHandler
          vendor_id       : [0][0][0][0]
          encoder         : Lavc58.132.100 mp2
    frame=    1 fps=0.0 q=0.0 size=       0kB time=00:00:00.35 bitrate=   0.0kbits/sframe=  250 fps=172 q=31.0 Lsize=    1255kB time=00:00:09.96 bitrate=1031.3kbits/s speed=6.85x    
    video:684kB audio:469kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 8.798692%
    裁剪命令产生的数据

    -f contat 告诉ffmpeg对后面的文件拼接
    -i inputs.txt 参数是文件(文件内部是要合并的音视频文件)

    注意:需要文件片段为.ts文件,否则不被允许合并(认为不安全)

    ffmpeg -f concat -i input.txt out2.flv

    (七)图片/视频互转命令

    ffmpeg -i out.ts -r 1 -f image2 image-%3d.jpeg
    -i 指定要输入的多媒体文件
    -r 指定转换图片的频率 1 每秒转出1张图片
    -f 指定要转出的图片格式 image2
    image-%3d.jpeg 指定每次输出的图片名称
    Input #0, mpegts, from 'out.ts':
      Duration: 00:00:10.01, start: 1.429089, bitrate: 1026 kb/s
      Program 1 
        Metadata:
          service_name    : Service01
          service_provider: FFmpeg
      Stream #0:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, progressive), 864x486 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
        Side data:
          cpb: bitrate max/min/avg: 0/0/0 buffer size: 49152 vbv_delay: N/A
      Stream #0:1[0x101](und): Audio: mp2 ([3][0][0][0] / 0x0003), 44100 Hz, stereo, fltp, 384 kb/s
    Stream mapping:
      Stream #0:0 -> #0:0 (mpeg2video (native) -> mjpeg (native))
    Press [q] to stop, [?] for help
    [swscaler @ 0x2233d00] deprecated pixel format used, make sure you did set range correctly
    Output #0, image2, to 'image-%3d.jpeg':
      Metadata:
        encoder         : Lavf58.74.100
      Stream #0:0: Video: mjpeg, yuvj420p(pc, progressive), 864x486 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 1 fps, 1 tbn
        Metadata:
          encoder         : Lavc58.132.100 mjpeg
        Side data:
          cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
    frame=    9 fps=0.0 q=1.6 size=N/A time=00:00:09.00 bitrate=N/A dup=0 drop=180 sframe=   12 fps=0.0 q=1.6 Lsize=N/A time=00:00:12.00 bitrate=N/A dup=0 drop=238 speed=18.2x    
    video:374kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
    转换时产生的参数

    ffmpeg -i image-%3d.jpeg out5.mp4   #可以通过-r指定每秒放的帧数
    Input #0, image2, from 'image-%3d.jpeg':
      Duration: 00:00:00.48, start: 0.000000, bitrate: N/A
      Stream #0:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 864x486 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 25 tbn, 25 tbc
    Stream mapping:
      Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
    Press [q] to stop, [?] for help
    [libx264 @ 0x150ab40] using SAR=1/1
    [libx264 @ 0x150ab40] using cpu capabilities: none!
    [libx264 @ 0x150ab40] profile High, level 3.1, 4:2:0, 8-bit
    [libx264 @ 0x150ab40] 264 - core 161 - H.264/MPEG-4 AVC codec - Copyleft 2003-2021 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
    Output #0, mp4, to 'out5.mp4':
      Metadata:
        encoder         : Lavf58.74.100
      Stream #0:0: Video: h264 (avc1 / 0x31637661), yuvj420p(pc, bt470bg/unknown/unknown, progressive), 864x486 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 12800 tbn
        Metadata:
          encoder         : Lavc58.132.100 libx264
        Side data:
          cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
    frame=    1 fps=0.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=N/Aframe=   12 fps=0.0 q=-1.0 Lsize=     136kB time=00:00:00.36 bitrate=3088.8kbits/s speed=0.488x    
    video:135kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.725236%
    [libx264 @ 0x150ab40] frame I:1     Avg QP:22.28  size: 15313
    [libx264 @ 0x150ab40] frame P:8     Avg QP:24.22  size: 12224
    [libx264 @ 0x150ab40] frame B:3     Avg QP:25.58  size:  8081
    [libx264 @ 0x150ab40] consecutive B-frames: 50.0% 50.0%  0.0%  0.0%
    [libx264 @ 0x150ab40] mb I  I16..4: 42.0% 53.4%  4.6%
    [libx264 @ 0x150ab40] mb P  I16..4: 27.2% 43.4%  3.9%  P16..4:  3.6%  0.8%  0.3%  0.0%  0.0%    skip:20.9%
    [libx264 @ 0x150ab40] mb B  I16..4:  6.0% 15.0%  2.1%  B16..8: 17.2%  5.9%  1.5%  direct: 5.7%  skip:46.5%  L0:44.3% L1:52.4% BI: 3.3%
    [libx264 @ 0x150ab40] 8x8 transform intra:58.2% inter:84.8%
    [libx264 @ 0x150ab40] coded y,uvDC,uvAC intra: 49.6% 74.3% 16.7% inter: 12.2% 17.9% 2.3%
    [libx264 @ 0x150ab40] i16 v,h,dc,p: 36% 44% 17%  3%
    [libx264 @ 0x150ab40] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 22% 37%  4%  3%  3%  4%  4%  6%
    [libx264 @ 0x150ab40] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 21% 29% 17%  5%  6%  6%  7%  5%  4%
    [libx264 @ 0x150ab40] i8c dc,h,v,p: 35% 35% 25%  5%
    [libx264 @ 0x150ab40] Weighted P-Frames: Y:0.0% UV:0.0%
    [libx264 @ 0x150ab40] ref P L0: 52.1% 14.7% 22.6% 10.6%
    [libx264 @ 0x150ab40] ref B L0: 89.2% 10.8%
    [libx264 @ 0x150ab40] kb/s:2289.13
    转换时产生的参数

    (八)直播相关命令

    直播推流:
    -re 这个选项会将输入的读取速度降低到输入的本地帧速率(即原本是音视频同步)。它对于实时输出(例如直播流)很有用。
    -i 指定要推流出去的数据
    -c 指定编码方式(注意:是同时对音视频处理)
    -f 要推出的文件格式
    rtmp://.... 是服务器地址 其他客户端从服务器中拉流
    
    直播拉流:
    -i 指定rtmp服务器地址
    -c 音视频编码方式
    保存为dump.flv

    最全最常用的RTMP、RTSP、HTTP协议流常用直播流地址

    测试拉流:

    CCTV1高清:http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8

    ffplay http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8

    ffmpeg -i http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8 -c copy dump.flv   #拉流一段时间使用ctrl+C停止   ---  最好文件格式一致dump.m3u8
    ffplay dump.flv

    (一)常见问题---推流失败

      

    主要原因是时间戳问题!!!

    在ffmpeg内部是按照最快的优先级,将音频与视频分开,用最快的方式获取!导致原本同步的音视频随着FFmpeg内部机制的改变,导致音视频不同步。导致出现上面的问题(比如本来应该播放音频时,无法找到对应的音频)

    解决方法:

    -re 这个选项会将输入的读取速度降低到输入的本地帧速率(即是按照音视频同步的速率播放)。它对于实时输出(例如直播流)很有用。

    (二)常见问题---清晰度不高(推流)

    -f flv会将MP4音频和视频重新进行编码,进行重新编码时可能造成损失!!!造成视频质量降低

    解决方法:要么避免不同格式的转换,要么使用下面方案!!

    -c copy 告诉我们从一个多媒体文件中读取音频和视频时,不要进行视频重新编码,此时流媒体服务器还是获取原来的数据,所以播放的时候还是原来的音频和视频!!

    清晰度会高,但是丢包不会避免!!

  • 相关阅读:
    网页弹窗代码大全收集整理
    再来二十一段救命的PHP代码
    PHP文件包含漏洞原理分析和利用方法
    Apache重写规则的常见应用及实例说明
    PHPCMS 整站代码分析讲解(一)
    网络登录过程
    lamp安装的所有注意事项
    使用lockbits方法处理图像 from http://blog.sina.com.cn/s/blog_4e3e2ce4010009on.html
    CImage类 from http://www.cnblogs.com/afarmer/archive/2012/03/31/2427273.html
    VC/MFC怎样将位图CBitmap对象保存成为bmp格式文件? from http://coding1688.iteye.com/blog/1547035
  • 原文地址:https://www.cnblogs.com/ssyfj/p/14576359.html
Copyright © 2020-2023  润新知