Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9412127
  • 博文数量: 1748
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20070
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1748)

文章存档

2024年(24)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: Android平台

2018-01-29 16:53:39

ffmpeg 学习:
1. 首先命令行的学习
2. 库的使用
3. 源代码学习

https://blog.csdn.net/candcplusplus/article/details/53955012

  1. 录制麦克风
  2. 双声道,MP3 编码,MP3 文件格式
  3. $ ffmpeg -f alsa -ac 2 -i hw:0,0 -acodec libmp3lame -f mp3 test1.mp3

  4. AC3 编码,ACC 文件格式
  5. $ ffmpeg -f alsa -ac 2 -i hw:0,0 -acodec ac3 -f ac3 test1.aac

  6. 录制桌面
  7. $ ffmpeg -f x11grab -s 1920x1080 -i :0.0 -vcodec libx264 -f mp4 test1.mp4
  8. 分辨率设为 1080P,并采用 H.264 编码,最后保存为 MP4 格式。

  9. 录制摄像头
  10. $ ffmpeg -f video4linux2 -s 1920x1080 -t 30 -i /dev/video0 -vcodec libx264 -f mp4 test2.mp4
  11. -t 30 表示录制 30 秒视频。

  12. 录制桌面+麦克风
  13. $ ffmpeg -f alsa -ac 2 -i pulse -f x11grab -video_size 1920x1080 -i :0.0 -vcodec libx264 -acodec ac3 test3.mp4

  14. 录制摄像头+麦克风
  15. $ ffmpeg -f alsa -ac 2 -ar 44100 -i pulse -f video4linux2 -framerate 30 -i /dev/video0 -framerate 30 -vcodec libx264 -acodec ac3 test4.mp4

  16. 录制桌面+摄像头
  17. 将摄像头拍摄到的画面叠加在录制到的桌面画面的右下角

  18. $ ffmpeg -thread_queue_size 96 -f x11grab -video_size 1920x1080 -i :0.0 -f video4linux2 -video_size 400x300 -i /dev/video0 -filter_complex '[0:v][1:v]overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10[out]' -map '[out]' test5.mp4

  19. 这个任务消耗有点大,-thread_queue_size 必须设置一个比较大的值,要不然会看到 FFmpeg输出的日志信息中不停的提醒:[video4linux2,v4l2 @ 0x25fbc40] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8),拍摄到的视频也会出现莫名其妙的错误,比如帧率很高,无法正常播放,视频不流畅等等。把 -thread_queue_size 设置为一个比较大的值,直到看不到该提示即可。

  20. 录制桌面+摄像头+麦克风
  21. $ ffmpeg -thread_queue_size 128 -f x11grab -video_size 1920x1080 -framerate 30 -i :0.0 -f video4linux2 -video_size 400x300 -framerate 30 -i /dev/video0 -f alsa -ac 2 -i pulse -filter_complex '[0:v][1:v]overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10[out]' -map '[out]' -map 2:a -vcodec libx264 -acodec ac3 test6.mp4
  22. 和上面一样,注意给 -thread_queue_size 设置一个足够大的值。

  23. 推流命令:
  24. $ ffmpeg -thread_queue_size 128 -f x11grab -video_size 1920x1080 -framerate 30 -i :0.0 -f video4linux2 -video_size 400x300 -framerate 30 -i /dev/video0 -f alsa -ac 2 -i pulse -filter_complex '[0:v][1:v]overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10[out]' -map '[out]' -map 2:a -vcodec libx264 -vprofile baseline -acodec aac -strict -2 -maxrate 3000k -b:a 128k -f flv rtmp://192.168.1.12:1935/myapp/stream2

https://www.cnblogs.com/wainiwann/p/4128154.html

常用参数说明:主要参数: 
-i 设定输入流
-f 设定输出格式
-ss 开始时间 

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

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


分离视频音频流
  1. ffmpeg -i input_file -vcodec copy -an output_file_video  //分离视频流, copy时最好后缀一致
                            -vcodec等同-codec:v  -an 去掉音频的意思 
  1. ffmpeg -i input_file -acodec copy -vn output_file_audio  //分离音频流

视频转码

  1. ffmpeg –i test.mp4 –vcodec h264 –s 352*278 –an test.264 //转码为码流原始文件
  2. ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352*278 –an test.264 //转码为码流原始文件
  3. ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi //转码为封装文件
  4. //-bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制
  5. 在H.264压缩标准中I帧、P帧、B帧用于表示传输的视频画面。
  6. I帧

  7. I帧又称帧内编码帧,是一种自带全部信息的独立帧,无需参考其他图像便可独立进行解码,可以简单理解为一张静态画面。视频序列中的第一个帧始终都是I帧,因为它是关键帧。

  8. 2、P帧

  9.  P帧又称帧间预测编码帧,需要参考前面的I帧才能进行编码。表示的是当前帧画面与前一帧(前一帧可能是I帧也可能是P帧)的差别。解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。与I帧相比,P帧通常占用更少的数据位,但不足是,由于P帧对前面的P和I参考帧有着复杂的依耐性,因此对传输错误非常敏感。


  10. 3、B帧

  11. B帧又称双向预测编码帧,也就是B帧记录的是本帧与前后帧的差别。也就是说要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是对解码性能要求较高
视频封装
  1. ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file 
  2. 把音频和视频回合在一起。
视频剪切
  1. ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg //提取图片,每秒一帧
  2. ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi //剪切视频
  3. //-r 提取图像的频率,-ss 开始时间,-t 持续时间
视频录制
  1. ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec copy out.avi
  2. ffmpeg -f v4l2 -s 640*480 -i /dev/video0 camera.avi
  3. 把网络流或者摄像头的内容录制成视频

  1. YUV序列播放
  2. ffplay -f rawvideo -video_size 1920x1080 input.yuv
  3. YUV序列转AVI
  4. ffmpeg –s 640*480 –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi




直播

  1. 将文件当做直播送至live
  2. ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName
  3. -re:读输入按照原始帧率,否则默认会尽快的读入,re会降低读入帧率,一般用于实时流。
  4. -c: -codec的简写 -c:v 代表 -vcodec 或者 -codec:v
  1. 将直播媒体保存至本地文件
  2. ffmpeg -i rtmp://server/live/streamName -c copy dump.flv

  1. 将其中一个直播流,视频改用h264压缩,音频不变,送至另外一个直播服务流
  2. ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream
  3. -vpre 1080p  -vpre slow: vpre代表让目标文件和原文采用相同的codec参数

  1. 将其中一个直播流,视频改用h264压缩,音频改用faac压缩,送至另外一个直播服务流
  2. 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

点击(此处)折叠或打开

  1. 将一个高清流,复制为几个不同视频清晰度的流重新发布,其中音频不变
  2. ffmpeg -re -i rtmp://server/live/high_FMLE_stream 
  3.     -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k 
  4.     -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k 
  5.     -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k 
  6.     -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k

  1. 将当前摄像头及音频通过DSSHOW采集,视频h264、音频faac压缩后发布
    ffmpeg -r 25 -f v4l2 -s 640×480 -i /dev/video0\   
    -f alsa -ac 2 -i hw:0,0 \
        -vcodec libx264 -b 600k -vpre slow \
        -acodec libfaac -ab 128k \
        -f flv rtmp://server/application/stream_name


USB camera 捕获
  1. ffmpeg -t 10 -f v4l2 -i /dev/video0 -r 8 -f mp4 cap.mp4

    具体说明如下:我们采集10秒,采集设备为v4l2类型,每秒8帧,输出方式为文件,格式为mp4。

    最简单的抓屏:

    ffmpeg -t 10 -f x11grab -video_size cif -framerate 25 -i :0.0 cap.mp4 

    从屏幕的(10,20)点处开始:

    ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg

  2. ffmpeg从视频中生成gif图片
  3. ffmpeg -i capx.mp4 -t 10 -s 320x240 -pix_fmt rgb24 jidu1.gif
阅读(5722) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~