ubuntu自帶錄屏軟件介紹:ffmpeg錄屏原理

FFmpeg是領先的多媒體框架,是一個強大的處理音視頻的開源庫,能夠解碼、編碼、轉碼、混流、流媒體分離、濾鏡和播放幾乎所有格式的音視頻內容。它既可以使用API對音視頻進行處理,也可以使用FFmpeg命令編輯音視頻文件。

包含用於音頻、視頻和字幕流的多個解碼器和編碼器,以及多個位流過濾器。

技術分享|如何使用FFmpeg命令處理音視頻

FFmpeg目錄及其作用

libavutil: 是一個包含用於簡化編程的函數工具庫,包括隨機數生成器、數據結構、數學例程、核心多媒體實用程序等等。

libavcodec: 是一個包含用於音頻/視頻編解碼器的庫。

libavformat:是一個包含多媒體容器格式的合成器和分離器的庫。

libavdevice:是一個包含輸入和輸出設備的庫,用於抓取和渲染許多常見的多媒體輸入/輸出軟件框架,包括 Video4Linux、Video4Linux2、VfW 和 ALSA。

libavfilter:是一個包含媒體過濾器的庫。

libswscale:是一個執行高度優化的圖像縮放和色彩空間/像素格式轉換操作的庫。

libswresample: 是一個執行高度優化的音頻重採樣、rematrixing和樣本格式轉換操作的庫。

FFmpeg工具及其作用

ffmpeg:ffmpeg是一個命令行工具,用於在命令行實現FFmpeg具有的功能。

ffplay: ffplay是一個使用 FFmpeg 庫和 SDL 庫的非常簡單和便攜的媒體播放器。它主要用作各種 FFmpeg API 的測試平台。

ffprobe: ffprobe 是一個多媒體流分析工具。它從多媒體流中收集信息,並且以人類和機器可讀的形式打印出來。它可以用來檢測多媒體流的容器類型,以及每一個多媒體流的格式和類型。它可以作為一個獨立的應用來使用,也可以結合文本過濾器執行更複雜的處理。

經過了解了FFmpeg的目錄及其工具,下面文章着重介紹下在日常生活中,我們怎麼使用FFmpeg命令行處理音視頻文件。

FFmpeg處理音視頻功能說明

FFmpeg命令根據功能的區分,大致可以分為:錄製命令,音視頻的合成和分離,音視頻的切割與合併,圖片、視頻互相轉換等幾個大的模塊。下面我們介紹下如何使用FFmpeg命令行處理音視頻實現以上的幾個功能。

本文以Ubuntu操作系統為例,通過簡單的命令sudo apt-get install ffmpeg來安裝

也可以在Windows,MacOS,其他Linux操作系統安裝FFmpeg後執行一下命令

1) 錄製

ffmpeg -f avfoundation -list_devices true -i “”

2) 錄屏

ffmpeg -f avfoundation -i 1 -r 30 out.yuv

· -f 指定使用 avfoundation 採集數據。

· -i 指定從哪兒採集數據,它是一個文件索引號。在我的電腦上,1 代表桌面(可以通過上面的命令查詢設備索引號)。

· -r 指定幀率。按 ffmpeg 官方文檔說-r 與-framerate 作用相同,但實際測試時發現不同。-framerate 用於限制輸入,而-r 用於限制輸出。

3) 錄屏+聲音

ffmpeg -f avfoundation -i 1:0 -r 29.97 -c:v libx264 -crf 0 -c:a libfdk_aac -profile:a aac_he_v2 -b:a 48k out.flv

· -i 1:0 冒號前面的 “1” 代表的屏幕索引號。冒號後面的”0″代表的聲音索相號。

· -c:v 與參數 -vcodec 一樣,表示視頻編碼器。c 是 codec 的縮寫,v 是 video 的縮寫。

· -crf 是 x264 的參數。 0 表式無損壓縮。

· -c:a 與參數 -acodec 一樣,表示音頻編碼器。

· -profile 是 fdk_aac 的參數。 aac_he_v2 表式使用 AAC_HE v2 壓縮數據。

· -b:a 指定音頻碼率。 b 是 bitrate 的縮寫, a 是 audio 的縮與。

4) 錄視頻

ffmpeg -framerate 30 -f avfoundation -i 0 out.mp4

· -framerate 限制視頻的採集幀率。這個必須要根據提示要求進行設置,如果不設置就會報錯。

· -f 指定使用 avfoundation 採集數據。

· -i 指定視頻設備的索引號。

5) 視頻+音頻

ffmpeg -framerate 30 -f avfoundation -i 0:0 out.mp4

6) 錄音

ffmpeg -f avfoundation -i :0 out.wav

7) 錄製音頻裸數據

ffmpeg -f avfoundation -i :0 -ar 44100 -f s16le out.pcm

8) 抽取音頻流

ffmpeg -i input.mp4 -acodec copy -vn out.aac

· acodec: 指定音頻編碼器,copy 指明只拷貝,不做編解碼。

· vn: v 代表視頻,n 代表 no 也就是無視頻的意思。

9) 轉換為MP3格式

ffmpeg -i input.mp4 -acodec libmp3lame out.mp3

10) 抽取視頻流

ffmpeg -i input.mp4 -vcodec copy -an out.h264

· vcodec: 指定視頻編碼器,copy 指明只拷貝,不做編解碼。

· an: a 代表視頻,n 代表 no 也就是無音頻的意思。

11) 視頻轉格式

ffmpeg -i video_test.mp4 -vcodec copy -acodec copy out_convert.flv

上面的命令表式的音頻、視頻都直接 copy,只是將 mp4 的封裝格式轉成了 flv。

12) 去除視頻聲音

ffmpeg -i video_auido.mp4 -vcodec copy -an video.mp4

13) 視頻壓縮

1)ffmpeg -i test_ffmpeg.mp4 (壓縮的文件更大更清晰,一般情況下不用)

2)ffmpeg -i out.MP4 -b:v 500k 512k_out.mp4(減小視頻碼率,壓縮的更模糊)

14) 音視頻合併

ffmpeg -i out.h264 -i out.aac -vcodec copy -acodec copy out.mp4

15) 提取YUV數據

ffmpeg -i input.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuv

# 播放

ffplay -s wxh out.yuv

· -c:v rawvideo 指定將視頻轉成原始數據

· -pixel_format yuv420p 指定轉換格式為 yuv420p

16) 視頻YUV轉H264

ffmpeg -f rawvideo -pix_fmt yuv420p -s 640×480 -r 30 -i out.yuv -c:v libx264 -f rawvideo out.h264

17) 提取音頻PCM數據

ffmpeg -i out.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm

# 播放

ffplay -ar 44100 -ac 2 -f s16le -i out.pcm

18) PCM轉WAV

ffmpeg -f s16be -ar 8000 -ac 2 -acodec pcm_s16be -i input.raw output.wav

19) 添加水印

圖片水印:

ffmpeg -i out.mp4 -vf “movie=logo.png,scale=128:72[watermask];[in][watermask] overlay=96:54 [out]” water_img.mp4

· -vf 中的 movie 指定 logo 位置。scale 指定 logo 大小。overlay 指定 logo 擺放的位置。

文字水印:

ffmpeg -i out.mp4 -vf “drawtext=fontfile=FZBaoHTJW_Xi.TTF: text=’anyRTC’:x=128:y=72:fontsize=24:fontcolor=red:shadowy=2” water_text.mp4

20) 視頻縮放

fmpeg -i out.mp4 -vf scale=iw/2:-1 scale.mp4

· -vf scale 指定使用簡單過濾器 scale,iw/2:-1 中的 iw 指定按整型取視頻的寬度。-1表示高度隨寬度一起變化。

降低視頻的分辨率且轉換視頻格式

ffmpeg -i input.avi -vf scale=640:360 out.mp4

21) 視頻裁剪

ffmpeg -i VR.mov -vf crop=in_w-300:in_h-200 -c:v libx264 -c:a copy -video_size 1280×720 vr_new.mp4

crop 格式:crop=out_w:out_h:x:y

· out_w: 輸出的寬度。可以使用 in_w 表式輸入視頻的寬度。

· out_h: 輸出的高度。可以使用 in_h 表式輸入視頻的高度。

· x : X 坐標

· y : Y 坐標

如果 x 和 y 設置為 0,說明從左上角開始裁剪。如果不寫是從中心點裁剪。

22) 視頻左右(上下)翻轉

ffmpeg -i out.mp4 -filter_complex “[0:v]pad=w=2*iw[a];[0:v]hflip[b];[a][b]overlay=x=w” duicheng.mp4

· hflip 水平翻轉

· 如果要修改為垂直翻轉可以用 vflip。

23) 裁剪片段

ffmpeg -i out.mp4 -ss 00:00:00 -t 10 out_cut.mp4

· -ss 指定裁剪的開始時間,精確到秒

· -t 被裁剪後的時長。

24) 音視頻合併

首先創建一個 videolist.txt 文件,文件內容如下:

file ‘test1.mp4’

file ‘test2.mp4’

然後執行下面的命令:

ffmpeg -f concat -i videolist.txt -c copy output.mp4

25) HLS切片

ffmpeg -i out.mp4 -c:v libx264 -c:a libfdk_aac -strict -2 -f hls out.m3u8

· -strict -2 指明音頻使有 AAC。

· -f hls 轉成 m3u8 格式。

26) 視頻轉JPEG

ffmpeg -i video_test.mp4 -r 1 -f image2 image-%3d.jpeg

27) 圖片格式轉換

ffmpeg -i input.bmp out.jpg

ffmpeg -i input.bmp out.png

28) 視頻按幀截圖

主要用於用戶手動截圖或上傳視頻生成縮略圖

此處:-ss position 搜索到指定的時間 [-]hh:mm:ss[.xxx]的格式也支持,-vframes 設置轉換多少楨(frame)的視頻,示例命令是獲取第一秒第一幀的截圖。

註:生成的截圖最好使用jpg格式,佔用空間較小,如果需要使用其他格式,根據業務需求自行設置即可。

ffmpeg -ss 00:00:01 -y -i video_test.mp4 -vframes 1 snap.jpg

29) 視頻轉GIF

ffmpeg -i video_test.mp4 -r 1 -f image2 image-%3d.jpeg

30) 圖片轉視頻

ffmpeg -f image2 -i image-%3d.jpeg out_img_video.mp4

31) 視頻添加字幕srt

ffmpeg -i video_test.mp4 -vf subtitles=subtitle.srt out_subtitle.mp4

32) 視頻添加音樂+字幕

ffmpeg -i video_test.mp4 -i audio_bg.mp3 -vf subtitles=all_mp3_srt.srt out_mp3_subtitle.mp4

FFmpeg是一個強大的專門音視頻處理的庫,很多播放器都是基於FFmpeg進行的開發。文章所提的功能只是小編羅列的FFmpeg可使用功能的一部分,更多FFmpeg命令行可實現處理音視頻的功能,大家可以去FFmpeg官網查閱相關文檔。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/224614.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 14:39
下一篇 2024-12-09 14:39

相關推薦

發表回復

登錄後才能評論