利用ffmpeg实现rtmp推流

https://www.jianshu.com/p/c141fc7881e7

 

ffmpeg 常见命令功能:

查看电脑设备:
    ffmpeg -list_devices true -f dshow -i dummy        

测试摄像头是否可用:
    ffplay -f dshow -i video="USB2.0 PC CAMERA"              USB2.0 PC CAMERA为摄像头名称
          或者
    ffplay -f vfwcap -i 0

查看摄像头和麦克风信息:
    ffmpeg -list_options true -f dshow -i video="USB2.0 PC CAMERA"      USB2.0 PC CAMERA为摄像头名称
    ffmpeg -list_options true -f dshow -i audio="麦克风 (2- USB2.0 MIC)" 

本地视频的推流:
    ffmpeg.exe -re -i demo.wmv -f flv rtmp://127.0.0.1:1935/live/123    此时ffmpeg源源不断的把视频推流至服务器,如果地址没错,
    视频文件 demo.wmv                        可以利用vlc或其他手段实现拉流,这里就先不解释如何拉流

摄像头推流:
    ffmpeg -f dshow -i video="USB2.0 PC CAMERA" 
    -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123    
    USB2.0 PC CAMERA为摄像头名称                播放地址: rtmp://127.0.0.1:1935/live/123

麦克风推流:
    ffmpeg  -f dshow -i audio="麦克风 (2- USB2.0 MIC)" 
    -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123


    麦克风 (2- USB2.0 MIC)                     播放地址: rtmp://127.0.0.1:1935/live/123

    
    声音被推流出去了,通过vlc拉流可以听到录制的声音,但很明显不会有画面

摄像头&麦克风推流:
    ffmpeg  -f dshow -i video="USB2.0 PC CAMERA" 
                 -f dshow -i audio="麦克风 (2- USB2.0 MIC)" 
                 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency 
                 -f flv rtmp://127.0.0.1:1935/live/123


    或者   (  USB2.0 PC CAMERA为摄像头名称     麦克风 (2- USB2.0 MIC)     播放地址: rtmp://127.0.0.1:1935/live/123

   )
    
    ffmpeg  -f dshow -i video="USB2.0 PC CAMERA":audio="麦克风 (2- USB2.0 MIC)" 
                 -vcodec libx264  -r 25  -preset:v ultrafast -tune:v zerolatency 
                 -f flv rtmp://127.0.0.1:1935/live/123

            
    
    画面与声音源源不断的被推流到服务器,接下来我们就应该正式的开发拉流了
            

分离视频和音频: 

    ffmpeg -i input_file.mp4 -vcodec copy -an output_file.avi     //只保留了视频      视频文件: input_file.mp4   输出文件: output_file.avi
    
ffmpeg -i input_file.mp4 -acodec copy -vn output_file.mp3     //只保留了音频     视频文件: input_file.mp4   输出文件: output_file.mp3

合并视频和音频:
    ffmpeg -i input_file1.avi 
                -i input_file2.mp3 
                -vcodec copy 
                -acodec copy output_file.mp4

    视频文件: input_file1.avi + input_file2.mp3     输出文件: output_file.mp4

选项说明: 
-vcodec copy:指定复制视频数据,不对输如视频进行编解码 
-acodec copy:指定复制音频数据,不对输如音频进行编解码 
-an:指数去除音频数据 
-vn:指定去除视频数据
-vcodec mpeg4:指定输出视频数据按照mp4格式编码 
-acodec mp3:指定输出音频数据按照mp3格式编码

转换音频格式 :
    ffmpeg -i input_file.mp3 -acodec g722 -ar 16k -ac 1 output_file.wav              //转换MP3格式音频为用g722编码的wav格式
    视频文件: input_file.mp3     输出文件: output_file.avi

列举几个生成其他音频格式的命令:
    ffmpeg -i input_file.mp3     // 视频文件: input_file.mp3 
                -acodec g723_1     // g723标准
                -ar 8k         // 采样频率8kHz
                -ab 6.3k         // 码率为5.3kbs/6.3kbs 
                -ac 1 
                output_file.wav     //g723标准要求采样频率8kHz,码率为5.3kbs/6.3kbs 

    ffmpeg -i input_file.mp3     // 视频文件: input_file.mp3 
                -acodec g726     // g726标准
                -ar 8k         // 采样频率8kHz
                -ab 32k         // 码率为40kbs/32kbs/24kbs/16kbs
                -ac 1 
                output_file.wav    //g726标准要求采样率为8k,码率为40kbs/32kbs/24kbs/16kbs 


视频格式转换 :
    ffmpeg -i input_file.avi -f mp4 -vcodec output_file.mp4     //转换avi格式视频为MP4格式 

    -f mp4:指定输出视频封装格式为MP4 
    -vcodec h264:指定输出视频编码格式为h264


截取图片 :(截取视频开始的图片 )

    ffmpeg     -i input_file.h264 
                    -y             //  -y:输出文件可以覆盖已存文件 
        -f image2             //  -f image2:输出图像文件编码为image2 
        -t 0.001             //  -t 0.001:持续时间为0.001s
        -s 420x272         //  -s 420x272:输出图片分辨率420x272
        output_file.jpg  

合成视频 : (把连续编号的图片文件生成视频 )

    ffmpeg -i input_file%d.jpg 
        -y             // -y:输出文件可以覆盖已存文件 
        -f mp4             // -f mp4:输出视频文件编码为MP4
        output_file.mp4    

其他例子:
    ffmpeg -i input_file.h264 
        -y 
        -f image2             //  -f image2:输出图像文件编码为image2 
        -t 1             //  1s内
        -s 420x272         //  -s 420x272:输出图片分辨率420x272
        output_file_%d.jpg 
               // 截取1s内所有的图像,输出文件按照顺序编号 

    ffmpeg -i input_file.h264 
        -y 
        -f image2 
        -ss 60             // 60s
        -vframes 1         // 一帧
        output_file.jpg 
    //截取60s的一帧视频图片 
        

    ffmpeg -i input_file.h264 
        -y 
        -f gif             // gif
        -ss 20             // 20s后
        -vframes 30         // 30帧
        output_file.jpg         // 截取20s后的30帧图片保存为gif

你可能感兴趣的:(ffmpeg)