zoukankan      html  css  js  c++  java
  • ffmpeg使用

    安装

    1、windows安装

      -下载FFMpeg----https://ffmpeg.zeranoe.com/builds/

      -解压并添加到环境变量(右击此电脑——>属性——>高级系统设置——>环境变量。在系统变量的path变量里添加解压的路径)

      -查看FFmpeg版本信息---ffmpeg.exe -version

    2、Linux下安装FFmpeg

      -下载ffmpeg:http://ffmpeg.org/releases/xxxxx

      -解压FFMPEG:tar -jxvf ffmpeg

      -cd ffmpeg

      -安装yasm:yum install yasm

      -编译:./configure --enable-shared --prefix=/usr/local/ffmpeg

      -安装:make && make install

      -修改文件:/etc/ld.so.conf 中增加/usr/local/ffmpeg/lib.

      -使其生效:ldconfig

      -加入环境变量:vi /etc/profile

          export FFMPEG_HOME=/usr/local/ffmpeg

          export PATH=$FFMPEG_HOME/bin:$PATH

           -使环境变量生效:source /etc/profile 

    3、解决ffmpeg执行报错“ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open shared object file: No such file or directory”的问题

      - 查看需要哪些依赖:ldd ffmpeg

      -找下这些文件在哪里:find /usr -name 'libavdevice.so.58'

      -export出来:export LD_LIBRARY_PATH=/usr/local/lib/(找出的路径)

    参数

    主要参数:

       -i 设定输入流

      -f 设定输出格式

      -ss 开始时间 

      -c 指定输出文件的编码。

      -metadata 更改输出文件的元数据。

      -re表示按文件中音视频流的码率推送

    视频参数:

       -b 设定视频流量,默认为200Kbit/s

      -r 设定帧速率,默认为25

      -s 设定画面的宽与高

      -aspect 设定画面的比例

      -vn 不处理视频

      -vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器

    音频参数: 

      -ar 设定采样率

      -ac 设定声音的Channel数

      -acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器

      -an 不处理音频

    通用参数:

      -y:强制覆盖输出

      -v quiet:静默工作,不输出版本、工作信息

      -threads 3:多线程工作

    常用命令

    1.分离视频音频流

      ffmpeg -i input_file -vcodec copy -an output_file_video  //分离视频流

      ffmpeg -i input_file -acodec copy -vn output_file_audio  //分离音频流

    2.视频解复用

      ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264

      ffmpeg –i test.avi –vcodec copy –an –f m4v test.264

    3.视频转码

      ffmpeg –i test.mp4 –vcodec h264 –s 352*278 –an –f m4v test.264 //转码为码流原始文件

      ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352*278 –an –f m4v test.264 //转码为码流原始文件

      ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi //转码为封装文件

      //-bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制

    4.视频封装

      ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file

    5.视频剪切

      ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg //提取图片 、

      ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi //剪切视频

      //-r 提取图像的频率,-ss 开始时间,-t 持续时间

    6.视频录制

      ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec copy out.avi

    7.YUV序列播放

      ffplay -f rawvideo -video_size 1920x1080 input.yuv

    8.YUV序列转AVI

      ffmpeg –s w*h –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi

    9、静默状态,双线程,音频拷贝,视频按照200k、500k两个码率,用x264重新编码生成间隔为20s的HLS文件,同时生成各自码率尾缀的m3u8文件

      ffmpeg  -v quiet -threads 2 -i snsd.mp4 -c:a copy -c:v libx264 -b 500k -f hls -hls_time 20 -hls_list_size 0 snsd_500K.m3u8 -c:a copy -c:v libx264 -b 200k -f hls -hls_time 20 -hls_list_size 0 snsd_200K.m3u8

    10、抓屏

      ffmpeg -f gdigrab -i desktop out.mpg 

    11、从屏幕的(10,20)点处开始,抓取640x480的屏幕,设定帧率为5 :

      ffmpeg -f gdigrab -framerate 5 -offset_x 10 -offset_y 20 -video_size 640x480 -i desktop out.mpg 

    12、ffmpeg从视频中生成gif图片:

      ffmpeg -i capx.mp4 -t 10 -s 320x240 -pix_fmt rgb24 jidu1.gif

    流媒体使用

    1、将文件当做直播送至live

      ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName

    2、将直播媒体保存至本地文件

      ffmpeg -i rtmp://server/live/streamName -c copy dump.flv

    3、将其中一个直播流,视频改用h264压缩,音频不变,送至另外一个直播服务流

       ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream

    4、将其中一个直播流,视频改用h264压缩,音频改用faac压缩,送至另外一个直播服务流

      ffmpeg -i rtmp://server/live/originalStream -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://server/live/h264Stream

    5、将其中一个直播流,视频不变,音频改用faac压缩,送至另外一个直播服务流

      ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream

    6、将一个高清流,复制为几个不同视频清晰度的流重新发布,其中音频不变

      ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k

    7、功能一样,只是采用-x264opts选项

      ffmpeg -re -i rtmp://server/live/high_FMLE_stream -c:a copy -c:v x264lib -s 640×360 -x264opts bitrate=500:profile=baseline:preset=slow rtmp://server/live/baseline_500k -c:a copy -c:v x264lib -s 480×272 -x264opts bitrate=300:profile=baseline:preset=slow rtmp://server/live/baseline_300k -c:a copy -c:v x264lib -s 320×200 -x264opts bitrate=150:profile=baseline:preset=slow rtmp://server/live/baseline_150k -c:a libfaac -vn -b:a 48k rtmp://server/live/audio_only_AAC_48k

    8、将当前摄像头及音频通过DSSHOW采集,视频h264、音频faac压缩后发布

      ffmpeg -r 25 -f dshow -s 640×480 -i video=”video source name”:audio=”audio source name” -vcodec libx264 -b 600k -vpre slow -acodec libfaac -ab 128k -f flv rtmp://server/application/stream_name

    9、将一个JPG图片经过h264压缩循环输出为mp4视频

      ffmpeg.exe -i INPUT.jpg -an -vcodec libx264 -coder 1 -flags +loop -cmp +chroma -subq 10 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -flags2 +dct8x8 -trellis 2 -partitions +parti8x8+parti4x4 -crf 24 -threads 0 -r 25 -g 25 -y OUTPUT.mp4

    10、将普通流视频改用h264压缩,音频不变,送至高清流服务(新版本FMS live=1)

      ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv “rtmp://server/live/h264Stream live=1"

    常见推拉流

    1、 rtmp推流

      这里分两种情况,一种是flv、mp4文件中的音频本身就是AAC格式,视频本身就是H264或H265格式,流媒体服务器本身就支持,那么ffmpeg不需要对音视频重新编码:

      1)ffmpeg -re -stream_loop -1 -i demo.flv -c:a copy -c:v copy -f flv rtmp://127.0.0.1:19350/live/test110

         -re 表示按文件中音视频流的码率推送,如果不加,就是不控制发送速度,一次性发送给服务端了,不符合直播的特点

          -strem_loop -1表示文件结束后,继续从文件头部循环推送的次数,-1表示无限循环

         -i 表示输入文件-c:a copy

         -c:a copy 表示音频编码格式不变

         -c:v copy 表示视频编码格式不变

         -f flv 推送rtmp流需要指定格式为flv

         最后是rtmp推流地址

      另一种情况,是文件中的音视频编码格式,流媒体服务器不支持,那么ffmpeg需要重新编码

      2)ffmpeg -re -i demo.flv -c:a aac -c:v h264 -f flv rtmp://127.0.0.1:19350/live/test110

         -c:a aac 表示音频用aac编码

          -c:v h264 表示视频用h264编码

    2、 rtsp推流

      ffmpeg -re -stream_loop -1 -i demo.flv -acodec copy -vcodec copy -f rtsp rtsp://localhost:5544/live/test110

    3、rtmp拉流

      ffmpeg -i rtmp://127.0.0.1:19350/live/test110 -c copy test110.flv

      ffplay rtmp://127.0.0.1:19350/live/test110   # ffplay是ffmpeg项目中带的一个播放器

    4、http-flv拉流

      http-flv拉流,对于vlc,ffmpeg,ffplay,mpv来说,和拉rtmp流是一样的

      ffmpeg -i  http://127.0.0.1:19350/live/test110 -c copy test110.flv

    5、HLS(m3u8+ts)拉流

      HLS(m3u8+ts)拉流,对于vlc,ffmpeg,ffplay来说,和拉rtmp流是一样的

      ffmpeg -i  http://127.0.0.1:19350/hls/test110/playlist.m3u8

    6、http-ts拉流

      http-ts拉流,对于vlc,ffmpeg,ffplay,mpv来说,和拉rtmp流是一样的

      ffmpeg -i  http://127.0.0.1:19350/live/test110 -c copy test110.flv

    参考:

      https://blog.csdn.net/gui694278452/article/details/90633114

      https://blog.csdn.net/u010857292/article/details/47011009

      https://www.pengrl.com/p/20051/

  • 相关阅读:
    prototype.js超强的javascript类库
    MySQL Server Architecture
    Know more about RBA redo block address
    MySQL无处不在
    利用Oracle Enterprise Manager Cloud Control 12c创建DataGuard Standby
    LAMP Stack
    9i中DG remote archive可能导致Primary Database挂起
    Oracle数据库升级与补丁
    Oracle为何会发生归档日志archivelog大小远小于联机重做日志online redo log size的情况?
    Oracle Ksplice如何工作?How does Ksplice work?
  • 原文地址:https://www.cnblogs.com/wu-wu/p/13644898.html
Copyright © 2011-2022 走看看