ffmpeg基本使用

nohup ffmpeg -re -stream_loop -1 -i 源流地址 -c copy -f flv 推流地址 >> /dev/null 2>&1 </dev/null &

ffmpeg -re -stream_loop -1 -i in.mp4 -rtsp_transport tcp -vcodec copy -f rtsp rtsp://192.168.0.91:8554/mystream

主要参数

-re 是以流(帧率)的方式读取(文件转流时)
-stream_loop -1 表示无限循环读取(文件转流时)
-i 设定输入流
-c copy 编码器不变
-f 设定输出格式
-r fps每秒传输帧数,默认为25 不与 -re 同用
-s 分辨率
-ss 开始时间

#视频参数:

-b 设定视频流量,默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高 -s 1920x1080
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器

#音频参数:

-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频

参考:FFplay简单过滤器、FFmpeg命令参数

--------------------------------------- 分割线 -------------------------------------------------

常用场景和命令

# 查看视频信息
ffmpeg -i 666051400.mp4
#分离视频音频流
ffmpeg -i input_file -vcodec copy -an output_file_video  //分离视频流
ffmpeg -i input_file -acodec copy -vn output_file_audio  //分离音频流
#视频封装:视频+音频
ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file
#视频转码
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 分辨率控制

#视频剪切:截图,截视频,gif图片
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 持续时间
ffmpeg -i capx.mp4 -t 10 -s 320x240 -pix_fmt rgb24 jidu1.gif    //生成gif图片

#视频录制:媒体流录制保存
ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec copy out.avi
#将文件当做直播送至live
ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName
ffmpeg -re -i cw.ts -vcodec copy -acodec copy  -f rtp_mpegts  rtp://238.123.46.66:8001  推rtp
#直播流转推(视频改用h264压缩)
ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream
#高清流转推为几个不同清晰度的流
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
#通过DSSHOW采集摄像头发布
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

#图片转换为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
 .\ffmpeg.exe -i E:\test\VTK\airplane1\testVideo\image.%4d.png  -c:v libx264 -r 10 -pix_fmt yuv420p  test.mp4

#电脑录屏保存本地
ffmpeg -f gdigrab -i desktop out.mpg 
#从电脑屏幕的(10,20)点处开始录屏   
ffmpeg -f gdigrab -framerate 5 -offset_x 10 -offset_y 20 -video_size 640x480 -i desktop out.mpg 

ffmpeg抽帧:

#### 抽取视频关键帧(IPB帧) ####

使用ffprobe提取出IPB帧的时间:
ffprobe -i 666051400.mp4 -v quiet -select_streams v -show_entries frame=pkt_pts_time,pict_type

# 抽取I帧
ffmpeg -i 666051400.mp4 -vf "select=eq(pict_type\,I)"  -vsync vfr -qscale:v 2 -f image2 ./%08d.jpg
# 抽取P帧
ffmpeg -i 666051400.mp4 -vf "select=eq(pict_type\,P)"  -vsync vfr -qscale:v 2 -f image2 ./%08d.jpg
# 抽取B帧
ffmpeg -i 666051400.mp4 -vf "select=eq(pict_type\,B)"  -vsync vfr -qscale:v 2 -f image2 ./%08d.jpg

!!! 由于ffmpeg抽取帧并无法按照时间戳来命名,需要手动将ffprobe提取出来的帧时间与抽取帧的图片进行对应重命名 !!!

#### 抽取视频场景转换帧 ####

按照视频的镜头切换可以将视频分为不同的场景(scene boundaries)。 见视频: http://www.scikit-video.org/stable/_static/scene_cuts.mp4

# 其中0.1表示帧为新场景的概率
ffmpeg -i 666051400.mp4 -filter:v "select='gt(scene,0.1)',showinfo" -f null - 2>&1

#### 按照时间进行均匀抽帧 ####

# -r 指定抽取的帧率,即从视频中每秒钟抽取图片的数量。1代表每秒抽取一帧。
ffmpeg -i 666051400.mp4 -r 1 -q:v 2 -f image2 ./%08d.000000.jpg

#### 抽取指定时间的视频帧 ####

ffmpeg -ss 00:00:30 -i 666051400.mp4 -vframes 1 0.jpg       # 耗时0.07s
ffmpeg -i 666051400.mp4 -ss 00:00:30 -vframes 1 0.jpg      # 耗时0.68s

两个命令时间差距为什么这么大呢?原因是-i与-ss的位置换了一下。如果-ss在前面,则会使用关键帧信息来进行索引,则会非常快。

ffmpeg博文:

记Linux编译ffmpeg,支持264,265视频编码,lame音频编码_lr94V587的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值