查看: 3854|回復: 0
打印 上一主題 下一主題

基于全志A40i的FFmpeg命令行工作方式

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2022-12-17 09:29:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
關(guān)鍵詞: 全志

1. FFmpeg的安裝

FFmpeg是用來(lái)記錄、轉換數字音頻、視頻的開(kāi)源軟件,它支持文件和網(wǎng)絡(luò )流操作。它支持以函數庫的方式使用,所以有很多軟件都依賴(lài)它,比如VLC、暴風(fēng)影音、騰訊會(huì )議等。它的命令行程序也非常強大,各種命令行選項學(xué)起來(lái)雖然困難,但是幾乎能夠滿(mǎn)足日常對音視頻的各種處理需求。今天我們就通過(guò)飛凌嵌入式OKA40i-C開(kāi)發(fā)板保定飛凌嵌入式技術(shù)有限公司來(lái)介紹它的命令行工作方式。


FFmpeg提供了全部源代碼,所以在網(wǎng)上可以找到很多教程是關(guān)于交叉編譯ARM版本的。我們測試的版本使用的是FFmpeg-release-armel-static.tar.xz。解壓縮以后拷貝到飛凌嵌入式OKA40i-C開(kāi)發(fā)板上并設置好權限就可以使用了。


2. USB攝像頭測試

OKA40i-C開(kāi)發(fā)板接口豐富,它支持USB攝像頭、CMOS-OV5640攝像頭、模擬攝像頭。把USB攝像頭插入開(kāi)發(fā)板,然后使用


v4l2-ctl --list-devices

可以看到/dev/video0就是我們的USB攝像頭,如下圖。

使用下面的命令可以看到該攝像頭的全部參數:


v4l2-ctl -d  /dev/video0 --all







  • Driver Info (not using libv4l2):



  •       Driver name   : uvcvideo



  •       Card type     : USB2.0 PC CAMERA



  •       Bus info      : usb-sunxi-ehci-1



  •       Driver version      : 3.10.65



  •       Capabilities      : 0x04000001



  •               Video Capture



  •               Streaming



  • Video input : 0 (Camera 1: ok)



  • Format Video Capture:



  •       Width/Height    : 640/480



  •       Pixel Format    : 'YUYV'



  •       Field      : None



  •       Bytes per Line      : 1280



  •       Size Image      : 614400



  •       Colorspace      : Default



  •       Transfer Function     : Default



  •       YCbCr Encoding      : Default



  •       Quantization      : Default



  • Crop Capability Video Capture:



  •       Bounds     : Left 0, Top 0, Width 640, Height 480



  •       Default    : Left 0, Top 0, Width 640, Height 480



  •       Pixel Aspect: 1/1



  • Streaming Parameters VideoCapture:



  •       Capabilities    : timeperframe



  •       Frames per second: 30.000 (30/1)



  •       Read buffers     : 0               



  • brightness (int)    : min=0 max=255 step=1 default=128value=128               



  •    contrast (int)    : min=0 max=255 step=1 default=135value=135                 



  • saturation (int)    : min=0 max=255 step=1 default=75 value=75                 



  •         hue (int)    : min=-127 max=127 step=1 default=0 value=0               



  •       gamma (int)    : min=1 max=8 step=1 default=4 value=4        



  • power_line_frequency (menu)   : min=0 max=2 default=1 value=1                 



  • sharpness (int)    : min=0 max=15 step=1 default=5 value=5



  • backlight_compensation (int)    : min=1 max=5 step=1 default=1 value=1



我們使用了兩種型號的USB攝像頭,按照手冊說(shuō)明使用內置的uvccamera程序進(jìn)行測試,不過(guò)都沒(méi)有成功,得到的錯誤信息如下圖所示。

我們使用FFmpeg可以抓取視頻,命令行如下:


ffmpeg -f video4linux2 -s 640x480 -pix_fmt yuyv422 -i /dev/video0 out.yuv

使用Windows版本的ffplay可以正常播放抓取的視頻,命令行如下:


ffplay -s 640x480 -pix_fmt yuyv422 out.yuv

上面保存的是YUV格式的原始視頻,如果要保存壓縮視頻,可以用下面的命令行:


ffmpeg -y -t 15 -r 25 -f video4linux2  -i /dev/video0 out3.mp4-timestamps bs

其中的-r 25表示每秒采樣25幀,這個(gè)參數必須有,否則FFmpeg可能會(huì )不斷地采集并壓縮同一視頻幀。-r參數超過(guò)30沒(méi)有什么意義,因為USB攝像頭的最大能力就是30fps。


飛凌嵌入式OKA40i-C開(kāi)發(fā)板可以對于1080P的視頻壓縮達到45fps,所以對USB攝像頭的視頻壓縮應該沒(méi)有什么壓力。


3. FFmpeg性能測試

FFmpeg有個(gè)benchmark參數可以方便進(jìn)行性能測試。我們對A40i開(kāi)發(fā)板自帶的一個(gè)MP4視頻就行解碼測試,命令行如下:


ffmpeg-benchmark -i translate.mp4 -f null

得到的測試數據如下:



  • video:



  • 148kB



  • audio:



  • 3428kB subtitle:0kB other streams:0kB globalheaders:0kB muxing



  • overhead:



  • unknown



  • bench:



  • utime=2.820s stime=0.110s rtime=0.956s



  • bench:



  • maxrss=14208kB



由于我手上暫時(shí)沒(méi)有其他的開(kāi)發(fā)板可以對比,于是就通過(guò)我用了5年的i7-6500筆記本測試了一下,測試結果如下:



  • video:



  • 241kB



  • audio:



  • 3428kB subtitle:0kB other streams:0kB globalheaders:0kB muxing



  • overhead:



  • unknown



  • bench:



  • utime=0.391s stime=0.000s rtime=0.228s



  • bench:



  • maxrss=20316kB



4.  FFmpeg產(chǎn)生實(shí)時(shí)視頻流

FFmpeg可以支持實(shí)時(shí)視頻流的發(fā)送和接收,從而可以把OKA40i-C開(kāi)發(fā)板上的視頻實(shí)時(shí)發(fā)送到PC上,由PC上的軟件實(shí)時(shí)接收并顯示。我們可以使用下面的命令將OKA40i-C開(kāi)發(fā)板上的一個(gè)MP4轉換為RTP碼流發(fā)送的PC上:


ffmpeg -re -i test.mp4 -an -c copy -f rtp rtp://192.168.0.105:1234

使用Wireshark可以看到在PC機的1234端口收到大量來(lái)自OKA40i-C開(kāi)發(fā)板的H.264視頻流。



如果想在PC上顯示視頻流,需要建立一個(gè)SDP文件,它描述視頻流中的端口和編碼信息。


SDP是來(lái)自SIP標準中定義,目前VLC、Apple QuickTime和ffplay等很多軟件都可以打開(kāi)SDP文件,并按照SDP中的描述顯示視頻流。SDP文件并不需要手工編寫(xiě),在ffmpeg運行時(shí)它會(huì )顯示命令行所對應的SDP定義,如下圖所示。

也可以用重定向將輸出寫(xiě)入一個(gè)SDP文件,如:


ffmpeg -re -i test.mp4 -an -c copy -f rtp rtp://192.168.0.105:1234 > rtp.sdp

下面就是使用VLC顯示的接收到的視頻流。



5.  FFmpeg轉發(fā)USB攝像頭的視頻流

前面演示了將MP4文件轉換為視頻流,我們也可以將USB攝像頭采集的內容實(shí)時(shí)轉發(fā)到PC上,使用下面的命令行即可。

ffmpeg -y -t 15 -r 25 -f video4linux2  -i /dev/video0 -f rtprtp://192.168.0.105:1234 > usb.sdp
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页