FFMPEG学习(一)---【命令行】采集视频和音频
FFMPEG常識
參數
參考:ffmpeg-比特率,幀率和文件大小
下載資源
下載ffmpeg安裝包
加入環境變量:
e:\ProgramFiles_D\ffmpeg\bin\
輸入設備 dshow 的使用——視音頻錄制
打印 DirectShow 支持的設備列表(true 可用1替換)
ffmpeg -list_devices true -f dshow -i dummy- 1
上述命令有問題: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 : durationffmpeg視頻精準剪切
視頻裁剪
/* crop:裁剪矩形尺寸,scale:縮放尺寸*/ ffmpeg -i input.mp4 -vf crop=w:h:x:y,scale=640:480 out.mp4ffmpeg調整縮放裁剪視頻的基礎知識
獲取音視頻信息
自動獲取音視頻設備名稱
@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学习(一)---【命令行】采集视频和音频的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux编程之pipe()函数
- 下一篇: shell if else 用法 syn