FFMPEG常识

参数

参考:ffmpeg-比特率,帧率和文件大小

下载资源

下载ffmpeg安装包

加入环境变量:

e:\ProgramFiles_D\ffmpeg\bin\

输入设备 dshow 的使用——视音频录制

打印 DirectShow 支持的设备列表(true 可用1替换)

ffmpeg -list_devices true -f dshow -i dummy
  • 1

[dshow @ 00000000025d1ca0] DirectShow video devices (some may be both video and audio devices)
[dshow @ 00000000025d1ca0]  "Logitech HD Webcam C310"
[dshow @ 00000000025d1ca0]     Alternative name "@device_pnp_\\?\usb#vid_046d&pid_081b&mi_00#6&98e0120&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\{bbefb6c7-2fc4-4139-bb8b-a58bba724083}"
[dshow @ 00000000025d1ca0] DirectShow audio devices
[dshow @ 00000000025d1ca0]  "楹﹀厠椋?(HD Webcam C310)"

上述命令有问题:audio那里有乱码,把乱码ANSI转UTF-8之后,开始测试不行,后来发现是自己疏忽大意,乱码部分转码后为“内装麦克风 ”,然后接可以正常使用了.

中文乱码查看

如果不熟悉ANSI转码UTF-8的话,还有一种更简单的方式查看设备的名称。即不使用FFmpeg查看系统DirectShow输入设备的名称,而使用Windows kit自带的工具graphedt.exe(或者网上下一个GraphStudioNext)查看输入名称。

选择【图像】->【插入过滤】,可以看到中文名称为“麦克风 (HD Webcam C310)”,注意中间括号前有空格。 

视频录制

//方式一
ffmpeg -f dshow -i video="Logitech HD Webcam C310" -vcodec libx264 e:\\001.mkv//方式二:“-r 5”的意思是把帧率设置成5
ffmpeg -f dshow -i video="Logitech HD Webcam C310" -r 5 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency e:\\MyDesktop.mkv  

上面组合命令设置了x264参数和aac添加adst filter, 
如果想提高x264编码速度可使用 -preset:v ultrafast -tune:v zerolatency 两个参数, 
举个例子: 
ffmpeg -f dshow -i video=”Logitech HD Webcam C310” -vcodec libx264 -preset:v ultrafast -tune:v zerolatency e:\004.mp4

录一段视频,按 q 键停止.

播放:

ffplay e:\\001.mkv

音频录制

//test1
ffmpeg -f dshow -i audio="麦克风 (HD Webcam C310)" -acodec aac e:\\temp.aac
//test2
ffmpeg -f dshow -i audio="麦克风 (HD Webcam C310)"  -ar 16000 -ac 1 lib.wav

视频生成图片

::1秒输出一张图片,从26秒开始,持续7秒
::ffmpeg -i toolba.mkv -r 1 -ss 00:00:26 -t 00:00:07 %03d.png
@echo off
set input_dir=
echo %~d0
echo %cd%
echo %input_path%/png/
for /r %input_path% %%i in (*.avi) do (
ffmpeg -i %%i -r 1 png/%%~ni_%%03d.png )
::ffmpeg -i bianyuehui.avi -r 10  %input_path%/png/%%03d.png
pause

批处理for循环逐一处理目录中的文件

图片生成录制

//1.截取视频某一秒图片
ffmpeg -ss 00:02:06 -i 3.flv -f image2 -y test1.jpg
//2.实时抓取图片
ffmpeg -f dshow -rtbufsize 200M -i video="Logitech HD Webcam C310" -r 1 -f image2 image%03d.jpeg

音视频联合录制

//test1
ffmpeg -f dshow -i video="Logitech HD Webcam C310":audio="麦克风 (HD Webcam C310)" -s 640x360 -b:v 1000k -b:a 128k e:\\output.mkv//test2
ffmpeg -f dshow -i video="Logitech HD Webcam C310":audio="麦克风 (HD Webcam C310)" -r 5 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec libmp3lame e:\\002.mkv //test3
ffmpeg -f dshow -i video="Logitech HD Webcam C310":audio="麦克风 (HD Webcam C310)" -pix_fmt yuv420p -ar 48000 -vcodec libx264 -crf 23 -preset veryslow -x264opts b-adapt=2:bframes=0:aq-strength=1:psy-rd=0.8,0 -vsync vfr -acodec aac -bsf:a aac_adtstoasc -f flv e:\\002.flv

实战

音视频实时采集输出

ffmpeg -f dshow -rtbufsize 200M -i video="Logitech HD Webcam C310":audio="麦克风 (HD Webcam C310)" -pix_fmt yuv420p -ar 48000 -vcodec libx264 -crf 23 -preset veryslow -x264opts b-adapt=2:bframes=0:aq-strength=1:psy-rd=0.8,0 -vsync vfr -acodec aac -bsf:a aac_adtstoasc -f flv e:\\002.flv
  • 1

音视频和图片实时采集输出

ffmpeg -f dshow -rtbufsize 200M -i video="Logitech HD Webcam C310":audio="麦克风 (HD Webcam C310)" -pix_fmt yuv420p -ar 48000 -vcodec libx264 -crf 23 -preset veryslow -x264opts b-adapt=2:bframes=0:aq-strength=1:psy-rd=0.8,0 -vsync vfr -acodec aac -bsf:a aac_adtstoasc -f flv 3.flv -r 1 -f image2 image%03d.jpeg

音视频编辑

合成

音视频合成

ffmpeg -i a.wav  -i a.avi out.avi 
  • 1

音视频合成-延迟

ffmpeg.exe -i user_review.wav -i user_review.avi -filter_complex "adelay=3000|3000"  out.avi
//-filter_complex "adelay=3000|3000":对前面的ogg音频的两个声道都延迟3000毫秒
//参考:http://ffmpeg.org/ffmpeg-all.html#adelay 

参考:ffmpeg音视频合成

多个视屏合成

/* 对于 avi 格式 */
@echo off
ffmpeg -i "concat:input1.avi|input2.avi" -c copy output.avi
paus
/*对于MP4等其他格式*/
//方法二:FFmpeg concat 分离器
//这种方法成功率很高,也是最好的,但是需要 FFmpeg 1.1 以上版本。先创建一个文本文件filelist.txt:
file 'input1.mkv'
file 'input2.mkv'
file 'input3.mkv'
//然后:ffmpeg -f concat -i filelist.txt -c copy output.mkv
//注意:使用 FFmpeg concat 分离器时,如果文件名有奇怪的字符,要在 filelist.txt 中转义。

FFMpeg无损合并视频的多种方法 
FFMPEG使用参数详解

剪切

视频剪切

ffmpeg -i test.mp4 -ss 10 -t 15 -codec copy cut.mp4//参数说明:
-i : source
-ss: start time
-t : duration 

ffmpeg视频精准剪切

视频裁剪

/* crop:裁剪矩形尺寸,scale:缩放尺寸*/
ffmpeg -i input.mp4 -vf crop=w:h:x:y,scale=640:480 out.mp4

ffmpeg调整缩放裁剪视频的基础知识

获取音视频信息

自动获取音视频设备名称

@echo off&setlocal enabledelayedexpansion::method 1: 固定设备名称
REM ::延时2秒
REM ::ping -n 1 127.0.0.1>nul
REM ffmpeg -f dshow -i audio="麦克风 (HD Webcam C310)"  -ar 16000 -ac 1 %1REM ::del /f /s /q %1
REM ::del /f /s /q plot\\data\\img\\*.*REM ::录制音视频图片
REM ::ffmpeg -f dshow -rtbufsize 200M -i video="Logitech HD Webcam C310":audio="麦克风 (HD Webcam C310)" -pix_fmt yuv420p -ar 48000 -vcodec libx264 -crf 23 -preset veryslow -x264opts b-adapt=2:bframes=0:aq-strength=1:psy-rd=0.8,0 -vsync vfr -acodec aac -bsf:a aac_adtstoasc -f flv %1  -r 1000 -f image2 plot\\data\\img\\image%%3d.jpg::method 2: 自动获取设备名称
::ffmpeg默认输出utf-8
ffmpeg -list_devices true -f dshow -i dummy 2>temp_utf.txt::utf-8 转 gbk,批处理不支持utf-8文件
iconv.exe -f utf-8 -t gbk temp_utf.txt >temp_gbk.txt
REM findstr /c:"dshow @ " temp_gbk.txt>e1.txtset find_audio_name=0
for /f "delims=" %%i in (temp_gbk.txt) do (::找到"DirectShow audio devices" 的下一行即为设备名echo %%i | findstr /c:"DirectShow audio devices" >nul 2>nulif !find_audio_name! equ 1 (echo %%ifor /f tokens^=2^ delims^=^" %%a in ("%%i") do (echo "%%a" >out.txtgoto end))::设置标志if !errorlevel! equ 0 (set find_audio_name=1echo find) else (echo not find)
):end
for /f "delims=" %%a in (out.txt) do (echo %%affmpeg -f dshow -i audio=%%a  -ar 16000 -ac 1 %1
)::删除临时文件
del /f /s /q temp_utf.txt
del /f /s /q temp_gbk.txt
del /f /s /q out.txtpause

参考:使用windows命令和iconv.exe批量转换文件编码

获取视频时长

ffprobe -loglevel quiet -print_format json -show_format -show_streams -i user_review.avi
  • 1

python代码

#获取视频时长
def getLenTime(filename):command = ["ffprobe.exe","-loglevel","quiet","-print_format","json","-show_format","-show_streams","-i",filename]result = subprocess.Popen(command,shell=True,stdout = subprocess.PIPE, stderr = subprocess.STDOUT)out = result.stdout.read()#print(str(out))temp = str(out.decode('utf-8'))data = json.loads(temp)['format']['duration']return data

参考

1.FFmpeg获取DirectShow设备数据(摄像头,录屏) 
2. ffmpeg 捕获屏幕和采集声卡、摄像头、麦克风声音 
3.代码:最简单的基于FFmpeg的AVDevice例子(读取摄像头) 
4.代码:ffmpeg实现录屏+录音 
5.windows环境下搭建ffmpeg开发环境

FFMPEG学习(一)---【命令行】采集视频和音频相关推荐

  1. ffmpeg学习日记612-指令-转换视频格式

    ffmpeg学习日记612-指令-转换视频格式 mkv转mp4 ffmpeg -i LostInTranslation.mkv -codec copy LostInTranslation.mp4 Li ...

  2. ffmpeg学习日记604-指令-将视频格式转为H264格式

    ffmpeg学习日记604-指令-将视频格式转为H264格式 在第四篇中,想要解码视频,缺没有弄清楚怎样的一个数据流,现在又明晰了一点,所谓的h264编解码,并不是直接将视频格式,通过h264编解码为 ...

  3. FFmpeg学习之二 (yuv视频渲染)

    FFmpeg学习之二 (yuv视频渲染) yuv简介 1.yuv是什么 2.yuv采集方式 3.yuv存储方式 4.yuv格式 yuv视频渲染 1. iOS YUV视频渲染 1.1 IOS利用open ...

  4. ffmpeg学习(11)音视频文件muxer(2)多输入混流

    在 ffmpeg学习(3)编码.解码的流程介绍 和 ffmpeg学习(9)音视频文件demuxer中介绍了媒体文件的解封装.本文记录Ffmpeg封装格式另一种处理与与demuxer相反方式–视音频复用 ...

  5. ffmpeg学习(13)音视频转码(2)使用filter

    ffmpeg学习(10)音视频文件muxer(1)封装格式转换 中介绍了媒体文件的封装格式转换,ffmpeg学习(11)音视频文件muxer(2)多输入混流 中介绍了音视频的混流,本文介绍基于ffmp ...

  6. ffmpeg学习日记603-指令-获取视频分辨率

    ffmpeg学习日记603-指令-获取视频分辨率 ffmpeg:ffprobe获取视频分辨率,视频宽高,时长等元数据信息 ffprobe -select_streams v -show_entries ...

  7. ffmpeg学习日记605-指令-获取视频的总帧数

    ffmpeg学习日记605-指令-获取视频的总帧数 获取视频的总帧数 ffprobe.exe -v error -count_frames -select_streams v:0 -show_entr ...

  8. ffmpeg学习日记602-指令-转换视频的分辨率

    ffmpeg学习日记602-指令-转换视频的分辨率 指令如下 ffmpeg -i video_1920.mp4 -vf scale=640:360 video_640.mp4 -hide_banner

  9. VIEWGOOD(远古)分享:关于RTSP采集视频无音频的解决方法

    在以往的维护过程中,有客户反映RTSP采集视频无音频的现象,而通过VLC直接播放相关RTSP地址视频流时音视频又正常.后来通过公司技术人员的分析,问题原因应该是与视频编码有关,即有可能是编码设置出现错 ...

最新文章

  1. linux内核PID管理--命名空间
  2. 华人“军火专家”——黄仁勋 1
  3. 数据分析系列剧第四集:行业研究报告与生产计划
  4. Javascript网站繁简转换解决方案
  5. 10 个实战及面试常用 Shell 脚本编写
  6. shiro会话监听_SpringBoot集成Shiro会话管理
  7. 02.Teams组成概述及使用分享
  8. windows+hugo+github搭建个人博客
  9. 搭建开发环境之串口线的选择
  10. python面向对象设计角色攻击_Python技能:面向对象基础实战之英雄联盟
  11. 一种定位激光在摄像头画面中位置的方法(附安卓源码)
  12. Pulling without specifying how to reconcile divergent branches is hint: discouraged. You can squelch
  13. cat5e跑万兆_cat5e网线支持千兆吗?
  14. mysql逻辑模型的概念_概念模型、逻辑模型、物理模型区别?
  15. k8s-身份认证与权限
  16. 张家界四日自助游攻略及心得
  17. java中switch的类型_java中switch()括号中不能放什么类型?
  18. 1 进 2 出 HDMI 1.4 分配器,带 HDCP 引擎、抖动清除和信号中继
  19. 如何通俗的理解beam search?
  20. namenode和datanode工作机制_NameNode与DataNode的工作原理剖析

热门文章

  1. 华为OJ: 公共字符串计算
  2. [Windows] Windows 8.1 取消在任务栏显示应用商店的应用
  3. 保持用户处于登录状态,加速应用程序启动
  4. CodeForces - 123B Squares(简单几何+旋转坐标系)
  5. CodeForces - 1030C Vasya and Golden Ticket(思维)
  6. 2020已去,2021未来
  7. 机器学习-降维之主成分分析PCA算法原理及实战
  8. php中如何固定表格宽度,实例讲解DataTables固定表格宽度(设置横向滚动条)
  9. 一个感染型的病毒逆向分析
  10. 【网络编程】之十、重叠IO Overlapped IO