日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/2/28 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FFMPEG学习(一)---【命令行】采集视频和音频 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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学习(一)---【命令行】采集视频和音频的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。