A. 如何在windows中編譯ffmpeg 2.6.1以及 NVENC硬編碼的嘗試
4)然後在mingw的控制台中進入ffmpeg源碼目錄,並執行命令:./configure --enable-memalign-hack 生成編譯時所需的Makefile文件。然後執行 make 命令,就可以生成相應的exe文件,如ffmpeg.exe、 ffplay_g.exe、ffmpeg_g.exe 等。
B. ffmpeg 常用命令
FFMPEG是特別強大的專門用於處理音視頻的開源庫。你既可以使用它的API對音視頻進行處理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,來編輯你的音視頻文件。
本文將簡要介紹一下 FFMPEG 庫的基本目錄結構及其功能,然後詳細介紹一下我們在日常工作中,如何使用 ffmpeg 提供的工具來處理音視頻文件。
在講解 FFMPEG 命令之前,我們先要介紹一些音視頻格式的基要概念。
我們按使用目的可以將 FFMPEG 命令分成以下幾類:
然後將編碼的數據包傳送給解碼器(除非為數據流選擇了流拷貝,請參閱進一步描述)。 解碼器產生未壓縮的幀(原始視頻/ PCM音頻/ ...),可以通過濾波進一步處理(見下一節)。 在過濾之後,幀被傳遞到編碼器,編碼器並輸出編碼的數據包。 最後,這些傳遞給復用器,將編碼的數據包寫入輸出文件。
默認情況下,ffmpeg只包含輸入文件中每種類型(視頻,音頻,字幕)的一個流,並將其添加到每個輸出文件中。 它根據以下標准挑選每一個的「最佳」:對於視頻,它是具有最高解析度的流,對於音頻,它是具有最多channel的流,對於字幕,是第一個字幕流。 在相同類型的幾個流相等的情況下,選擇具有最低索引的流。
您可以通過使用-vn / -an / -sn / -dn選項來禁用某些默認設置。 要進行全面的手動控制,請使用-map選項,該選項禁用剛描述的默認設置。
下面我們就來詳細介紹一下這些命令。
FFMPEG 可以使用下面的參數進行基本信息查詢。例如,想查詢一下現在使用的 FFMPEG 都支持哪些 filter,就可以用 ffmpeg -filters 來查詢。詳細參數說明如下:
接下來介紹的是 FFMPEG 處理音視頻時使用的命令格式與參數。
下面是 FFMPEG 的基本命令格式:
ffmpeg 通過 -i 選項讀取輸任意數量的輸入「文件」(可以是常規文件,管道,網路流,抓取設備等,並寫入任意數量的輸出「文件」。
原則上,每個輸入/輸出「文件」都可以包含任意數量的不同類型的視頻流(視頻/音頻/字幕/附件/數據)。 流的數量和/或類型是由容器格式來限制。 選擇從哪個輸入進入到哪個輸出將自動完成或使用 -map 選項。
要引用選項中的輸入文件,您必須使用它們的索引(從0開始)。 例如。 第一個輸入文件是0,第二個輸入文件是1,等等。類似地,文件內的流被它們的索引引用。 例如。 2:3是指第三個輸入文件中的第四個流。
上面就是 FFMPEG 處理音視頻的常用命令,下面是一些常用參數:
-an(輸出) 禁用錄音。
-acodec編解碼器(輸入/輸出) |設置音頻編解碼器。這是-codec的別名:a。
-sample_fmt [:stream_specifier] sample_fmt(輸出,每個流) |設置音頻采樣格式。使用-sample_fmts獲取支持的樣本格式列表。
-af filtergraph(輸出) |創建由filtergraph指定的過濾器圖,並使用它來過濾流。
了解了這些基本信息後,接下來我們看看 FFMPEG 具體都能幹些什麼吧。
首先通過下面的命令查看一下 mac 上都有哪些設備。
注意,桌面的輸入對幀率沒有要求,所以不用限制桌面的幀率。其實限制了也沒用。
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 32k out.flv
流拷貝是通過將 參數提供給-codec選項來選擇流的模式。它使得ffmpeg省略了指定流的解碼和編碼步驟,所以它只能進行多路分解和多路復用。 這對於更改容器格式或修改容器級元數據很有用。 在這種情況下,上圖將簡化為:
由於沒有解碼或編碼,速度非常快,沒有質量損失。 但是,由於許多因素,在某些情況下可能無法正常工作。 應用過濾器顯然也是不可能的,因為過濾器處理未壓縮的數據。
上面的命令表式的是音頻、視頻都直接 ,只是將 mp4 的封裝格式轉成了flv。
在編碼之前,ffmpeg可以使用libavfilter庫中的過濾器處理原始音頻和視頻幀。 幾個鏈式過濾器形成一個過濾器圖形。 ffmpeg區分兩種類型的過濾器圖形:簡單和復雜。
簡單的過濾器圖是那些只有一個輸入和輸出,都是相同的類型。 在上面的圖中,它們可以通過在解碼和編碼之間插入一個額外的步驟來表示:
簡單的filtergraphs配置了per-stream-filter選項(分別為視頻和音頻使用-vf和-af別名)。 一個簡單的視頻filtergraph可以看起來像這樣的例子:
請注意,某些濾鏡會更改幀屬性,但不會改變幀內容。 例如。 上例中的fps過濾器會改變幀數,但不會觸及幀內容。 另一個例子是setpts過濾器,它只設置時間戳,否則不改變幀。
復雜的過濾器圖是那些不能簡單描述為應用於一個流的線性處理鏈的過濾器圖。 例如,當圖形有多個輸入和/或輸出,或者當輸出流類型與輸入不同時,就是這種情況。
復雜的過濾器圖使用-filter_complex選項進行配置。 請注意,此選項是全局性的,因為復雜的過濾器圖形本質上不能與單個流或文件明確關聯。
-lavfi選項等同於-filter_complex。
一個復雜的過濾器圖的一個簡單的例子是覆蓋過濾器,它有兩個視頻輸入和一個視頻輸出,包含一個視頻疊加在另一個上面。 它的音頻對應是amix濾波器。
先通過 ffplay 找到要刪除 LOGO 的位置
使用 delogo 濾鏡刪除 LOGO
crop 格式:crop=out_w:out_h:x:y
如果要修改為垂直翻轉可以用vflip。
首先創建一個 inputs.txt 文件,文件內容如下:
file '1.flv'
file '2.flv'
file '3.flv'
然後執行下面的命令:
C. 請問連著兩個中劃線--是什麼shell命令
這些都是命令的選項。
你用 「man 命令」 看看幫助就知道了。
命令的選項通常有兩種形式,一種是前面只有一個中劃線的(簡寫形式),還有一種就是連著兩個中劃線的(詳細形式),其實作用是等同的。 詳細形式更便於理解罷了。
D. 兄弟們有沒有在windows下編譯ffmpeg中ffplay時
在cygwin軟體包中安裝 ar 這個軟體包。
或者下載ar.exe放在c:/windows/ar.exe 中就能繼續編譯了
E. ffmpeg 命令大全
前言
FFMPEG是特別強大的專門用於處理音視頻的開源庫。你既可以使用它的API對音視頻進行處理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,來編輯你的音視頻文件。
本文將簡要介紹一下 FFMPEG 庫的基本目錄結構及其功能,然後詳細介紹一下我們在日常工作中,如何使用 ffmpeg 提供的工具來處理音視頻文件。
在講解 FFMPEG 命令之前,我們先要介紹一些音視頻格式的基要概念。
我們按使用目的可以將 FFMPEG 命令分成以下幾類:
除了 FFMPEG 的基本信息查詢命令外,其它命令都按下圖所示的流程處理音視頻
先是解復用獲取到編碼的數據包,然後將編碼的數據包傳送給解碼器(除非為數據流選擇了流拷貝,請參閱進一步描述)。 解碼器產生未壓縮的幀(原始視頻/ PCM音頻/ ...),可以通過濾波進一步處理(見下一節)。 在過濾之後,幀被傳遞到編碼器,編碼器並輸出編碼的數據包。 最後,這些傳遞給復用器,將編碼的數據包寫入輸出文件。
默認情況下,ffmpeg只包含輸入文件中每種類型(視頻,音頻,字幕)的一個流,並將其添加到每個輸出文件中。 它根據以下標准挑選每一個的「最佳」:對於視頻,它是具有最高解析度的流,對於音頻,它是具有最多channel的流,對於字幕,是第一個字幕流。 在相同類型的幾個流相等的情況下,選擇具有最低索引的流。
您可以通過使用-vn / -an / -sn / -dn選項來禁用某些默認設置。 要進行全面的手動控制,請使用-map選項,該選項禁用剛描述的默認設置。
FFMPEG 可以使用下面的參數進行基本信息查詢。例如,想查詢一下現在使用的 FFMPEG 都支持哪些 filter,就可以用 ffmpeg -filters 來查詢。詳細參數說明如下:
查詢編譯器libfdk_aac的信息
FFMPEG 處理音視頻時使用的命令格式與參數
ffmpeg 通過 -i 選項讀取輸任意數量的輸入「文件」(可以是常規文件,管道,網路流,抓取設備等,並寫入任意數量的輸出「文件」。
原則上,每個輸入/輸出「文件」都可以包含任意數量的不同類型的視頻流(視頻/音頻/字幕/附件/數據)。 流的數量和/或類型是由容器格式來限制。 選擇從哪個輸入進入到哪個輸出將自動完成或使用 -map 選項。
要引用選項中的輸入文件,您必須使用它們的索引(從0開始)。 例如。 第一個輸入文件是0,第二個輸入文件是1,等等。類似地,文件內的流被它們的索引引用。 例如。 2:3是指第三個輸入文件中的第四個流
上面就是 FFMPEG 處理音視頻的常用命令,下面是一些常用參數
首先通過下面的命令查看一下 mac 上都有哪些設備。
注意,桌面的輸入對幀率沒有要求,所以不用限制桌面的幀率。其實限制了也沒用。
由於沒有解碼或編碼,速度非常快,沒有質量損失。 但是,由於許多因素,在某些情況下可能無法正常工作。 應用過濾器顯然也是不可能的,因為過濾器處理未壓縮的數據
上面的命令表式的是音頻、視頻都直接 ,只是將 mp4 的封裝格式轉成了flv。
在編碼之前,ffmpeg可以使用libavfilter庫中的過濾器處理原始音頻和視頻幀。 幾個鏈式過濾器形成一個過濾器圖形。 ffmpeg區分兩種類型的過濾器圖形:簡單和復雜。
請注意,某些濾鏡會更改幀屬性,但不會改變幀內容。 例如。 上例中的fps過濾器會改變幀數,但不會觸及幀內容。 另一個例子是setpts過濾器。
復雜的過濾器圖使用-filter_complex選項進行配置。 請注意,此選項是全局性的,因為復雜的過濾器圖形本質上不能與單個流或文件明確關聯。
-lavfi選項等同於-filter_complex。
一個復雜的過濾器圖的一個簡單的例子是覆蓋過濾器,它有兩個視頻輸入和一個視頻輸出,包含一個視頻疊加在另一個上面。 它的音頻對應是amix濾波器
添加文字水印
添加本地時間水印
https://www.jianshu.com/p/e4ad7e1e7ed5
先通過 ffplay 找到要刪除 LOGO 的位置
使用 delogo 濾鏡刪除 LOGO
crop 格式:crop=out_w:out_h:x:y
https://blog.csdn.net/matrix_laboratory/article/details/53158307
首先創建一個 inputs.txt 文件,文件內容如下:
然後執行下面的命令:
播放yuv數據,需要指定解析度
F. ffplay中的s參數的用法。是不是–s 1080*1920這種格式
s size 幀尺寸 設置顯示幀存儲(WxH格式),僅適用於類似原始YUV等沒有包含幀大小(WxH)的視頻。該參數已經被廢棄,請嘗試用-video_size代替。看看《Linux就該這么學》 裡面有個專欄是 Linux命令大全(手冊
G. FFmpeg常用推流命令
一、FFmpeg推RTMP流准備工作
首先確保自已已經安裝了nginx + rtmp伺服器。
打開配置文件nginx.conf
完成如下配置
nginx配置.1
如果沒有nginx + rtmp伺服器,請閱讀我的另一篇文章
Mac搭建nginx+rtmp伺服器
二、FFmpeg推流
1.推流MP4文件
視頻文件地址:/Users/xu/Desktop/bangbangbang.mp4
推流拉流地址:rtmp://localhost:1935/rtmplive/home
acc:RTMP的音頻格式
flv: RTMP的視頻格式
ffmpeg -re -i /Users/xu/Desktop/bangbangbang.mp4-vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/rtmplive/home
設置推流.2
輸入命令行後,暫時先不要點回車,等設置好本地拉流後,再進行推流。
2.本地拉流MP4文件
打開VLC播放器
VLC.3
設置播放地址
設置播放地址.4
設置拉流地址
rtmp://localhost:1935/rtmplive/home
拉流地址.5
開始推流,點擊open後開始播放。
FFmpeg推流成功.6
推流成功!
三、用ffmpeg推流桌面以及推流攝像頭進行直播
1.如果希望將桌面錄制或者分享,可以使用命令行如下:
ffmpeg -f avfoundation -i "1" -vcodec libx264 -preset ultrafast -acodec libfaac -f flv rtmp://localhost:1935/rtmplive/home
這個只能夠推桌面。
2.如果需要桌面+麥克風,比如一般做遠程教育分享 命令行如下:
ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/rtmplive/home
這個可以推桌面+麥克風。
3.如果需要桌面+麥克風,並且還要攝像頭拍攝到自己,比如一般用於互動主播,游戲主播,命令行如下
ffmpeg -f avfoundation -framerate 30 -i "1:0" \-f avfoundation -framerate 30 -video_size 640x480 -i "0" \-c:v libx264 -preset ultrafast \-filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/rtmplive/home
這個可以推桌面+麥克風,並且攝像頭把人頭放在界面下面
Snip20160713_12.png
四、FFmpeg常用基本命令
1.分離視頻音頻流
ffmpeg -i input_file -vcodec-an output_file_video//分離視頻流ffmpeg -i input_file -acodec-vn output_file_audio//分離音頻流
2.視頻解復用
ffmpeg–itest.mp4 –vcodec–an–fm4vtest.264ffmpeg –itest.avi –vcodec–an–fm4vtest.264
3.視頻轉碼
ffmpeg –i test.mp4 –vcodec h264 –s352*278–an –f m4v test.264//轉碼為碼流原始文件ffmpeg –i test.mp4 –vcodec h264 –bf0–g25–s352*278–an –f m4v test.264//轉碼為碼流原始文件
ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi//轉碼為封裝文件
-bf B幀數目控制
-g 關鍵幀間隔控制
-s 解析度控制
4.視頻封裝
ffmpeg –i video_file –i audio_file –vcodec–acodecoutput_file
5.視頻剪切
ffmpeg –i test.avi –r1–f image2 image-%3d.jpeg//提取圖片ffmpeg -ss0:1:30-t0:0:20-i input.avi -vcodec -acodec output.avi//剪切視頻
-r 提取圖像的頻率
-ss 開始時間
-t 持續時間
6.視頻錄制
ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec out.avi
7.YUV序列播放
ffplay -f rawvideo -video_size1920x1080 input.yuv
8.YUV序列轉AVI
ffmpeg–sw*h–pix_fmtyuv420p–iinput.yuv –vcodecmpeg4output.avi
9.常用參數說明:
主要參數:
i 設定輸入流
f 設定輸出格式
ss 開始時間
視頻參數:
b 設定視頻流量,默認為200Kbit/s-r 設定幀速率,默認為25
s 設定畫面的寬與高-aspect 設定畫面的比例
vn 不處理視頻-vcodec 設定視頻編解碼器,未設定時則使用與輸入流相同的編解碼器
音頻參數:
ar 設定采樣率
ac 設定聲音的Channel數
acodec 設定聲音編解碼器,未設定時則使用與輸入流相同的編解碼器an 不處理音頻