1. FFmpeg有什麼用
FFmpeg有非常強大的功能包括視頻採集功能、視頻格式轉換、視頻抓圖、給視頻加水印等,核心功能作用如下。
視頻採集功能
ffmpeg視頻採集功能非常強大,不僅可以採集視頻採集卡或USB攝像頭的圖像,還可
以進行屏幕錄制,同時還支持以RTP方式將視頻流傳送給支持RTSP的流媒體伺服器,支持直播應用。
ffmpeg在linux下的視頻採集
在Linux平台上,ffmpeg對V4L2的視頻設備提供了很好的支持,如:
./ffmpeg -t 10 -f video4linux2 -s 176*144 -r 8 -i /dev/video0 -vcodec h263 -f rtp rtp://192.168.1.105:5060 > /tmp/ffmpeg.sdp
以上命令表示:採集10秒鍾視頻,對video4linux2視頻設備進行採集,採集QCIF(176*144)的視頻,每秒8幀,視頻設備為/dev/video0,視頻編碼為h263,輸出格式為RTP,後面定義了IP地址及埠(WWW.PC841.COM 百事網),將該碼流所對應的SDP文件重定向到/tmp/ffmpeg.sdp中,將此SDP文件上傳到流媒體伺服器就可以實現直播了。
ffmpeg在windows下的視頻採集
在windows下關於ffmpeg視頻採集的資料非常少,但是ffmpeg還是支持windows下視頻採集的。ffmpeg支持windows下video for windows(VFW)設備的視頻採集,不過VFW設備已經過時,正在被WDM的視頻設備所取代,但是ffmpeg還沒有支持WDM的計劃,不過好像有將WDM轉為VFW的工具,因此ffmpeg還是可以在windows下進行視頻採集的。
視頻格式轉換功能
ffmpeg視頻轉換功能。視頻格式轉換,比如可以將多種視頻格式轉換為flv格式,可不是視頻信號轉換 。
ffmpeg可以輕易地實現多種視頻格式之間的相互轉換(wma,rm,avi,mod等),例如可以將攝錄下的視頻avi等轉成視頻網站所採用的flv格式。
視頻截圖功能
對於選定的視頻,截取指定時間的縮略圖。視頻抓圖,獲取靜態圖和動態圖,不提倡抓gif文件;因為抓出的gif文件大而播放不流暢。
給視頻加水印功能
使用ffmpeg 視頻添加水印(logo)。
2. 怎樣使用ffmpeg 進行音頻解碼
安裝完成ffmpeg後,就可以使用ffmpeg進行音頻文件格式轉換。比如 ./ffmpeg -i /media/1.mp3 /media/1.wav, 通過該命令行可以將/media文件夾下1.mp3文件轉換成WAV格式的。
但是反過來 ./ffmpeg -i /media/1.WAV /media/1.MP3 卻不能轉換成Mp3格式,提示如下錯誤(找不到編碼器):
Stream mapping:
Stream #0:0 -> #0:0 (wav -> ?)
Encoder (codec none) not found for output stream #0:0
如果強行指定編碼器 ./ffmpeg -i /media/1.wav -acodec mp3 /media/1.mp3, 仍提示找不到編碼器錯誤:
Unknown encoder 'mp3'
這是因為,ffmpeg雖然是個開源軟體,但因為具體格式的版權原因,它並沒有包含所有的編解碼格式,或者有個格式只有對應的解碼器,但沒有編碼器,比如 Mp3就只有解碼器,能播放Mp3文件,但卻沒有Mp3的編碼器,無法將其它格式轉換成Mp3。可以通過命令行 ./ffmpeg -codecs 查詢編解碼配置,第一個D表示Decoder,該格式能夠解碼;E表示Encoder,該格式可以編碼。從中可以看出Mp3不能編碼,Mp2倒是即可解碼 也可編碼。如何解決這個問題呢?
D A D mp1 MP1 (MPEG audio layer 1)
D A D mp1float MP1 (MPEG audio layer 1)
DEA D mp2 MP2 (MPEG audio layer 2)
D A D mp2float MP2 (MPEG audio layer 2)
D A D mp3 MP3 (MPEG audio layer 3)
D A D mp3a ADU (Application Data Unit) MP3 (MPEG audio layer 3)
D A D mp3afloat ADU (Application Data Unit) MP3 (MPEG audio layer 3)
我的第一個方法是自己寫代碼來完成。源碼文件中,Allcodecs.c中對各個格式進行注冊,先修改Mp3的注冊行,改為同時注冊解碼器和編碼器:
REGISTER_ENCDEC (MP2, mp2);
REGISTER_DECODER (MP2FLOAT, mp2float);
REGISTER_DECODER (MP3, mp3) // 此行修改為 REGISTER_ENCDEC (MP3, mp3)
然後新增Mp3編碼器的實現Struct,裡面Init函數、encode函數、close函數使用Mp2的函數,因為我也不知道如何去實現Mp3的函數,或者說到代碼實現級我也不知道Mp3和Mp2的區別在哪。
AVCodec ff_mp3_encoder = {
.name = "mp3",
.type = AVMEDIA_TYPE_AUDIO,
.id = CODEC_ID_MP3,
.priv_data_size = sizeof(MpegAudioContext),
.init = MPA_encode_init,
.encode = MPA_encode_frame,
.close = MPA_encode_close,
.sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
.supported_samplerates= (const int[]){44100, 48000, 32000, 22050, 24000, 16000, 0},
.long_name = NULL_IF_CONFIG_SMALL("MP3 (MPEG audio layer 3)"),
.defaults = mp3_defaults,
};
重新編譯上線。 用命令行./ffmpeg -i /media/1.WAV /media/1.MP3 試了一下,能成功生成1.mp3文件,文件也能播放。似乎沒有問題了,單用 file /media/1.mp3 查看了一下,發現文件不是Mp3格式的,而是Mp2格式的:
/media/1.mp3: MPEG ADTS, layer II, v1, 128 kbps, 44.1 kHz, Stereo
很遺憾,自行修改代碼的方式行不通,因為不是每個編解碼格式協議的專家,自行修改代碼失敗的風險很大,不僅是Mp3,還有一些其他格式比如AMR OGG H.263是沒有編碼器的。所以,第二個方案,使用成熟的第三方編碼器和ffmpeg結合。
Mp3比較好的開源第三方庫是libmp3lame(簡稱Lame)。我下了一個最新版本(3.99.4)的Lame源碼,編譯它:
首先配置: ./configure --prefix=/shared --enable-shared --enable-static
然後編譯: make
make install
生成文件: 動態鏈接庫 /shared/lib/libmp3lame.so 和 靜態鏈接庫 /shared/lib/libmp3lame.a。這里只需要使用動態鏈接庫,將.so文件拷貝到/lib中,這個文件夾是動態鏈接庫的默認搜索路徑, 讓ffmpeg運行時可以找到。
然後對ffmpeg配置libmp3lame: ./configure --enable-libmp3lame
重新編譯ffmpeg,運行轉化命令,看看效果如何。
首先執行 ./ffmpeg -codecs 查看可用編解碼的變化,可以看到多出了libmp3lame編碼器,帶E的:
D V D lagarith Lagarith lossless
EA libmp3lame libmp3lame MP3 (MPEG audio layer 3)
EV ljpeg Lossless JPEG
D V D loco LOCO
然後執行 ./ffmpeg -i /media/1.WAV /media/1.MP3, 生成1.mp3,用File命令查看,確實是Mp3文件。
/media/1.mp3: Audio file with ID3 version 2.4.0, contains: MPEG ADTS, layer III, v1, 128 kbps, 44.1 kHz, Stereo
大功告成,問題解決。
也可在命令行中指定編解碼生成Mp3文件:./ffmpeg -i /media/1.WAV -acodec libmp3lame /media/1.MP3.
3. ffmpeg 命令行的輸出文件的路徑該怎麼寫
ffmpeg 輸出文件無須參數,直接寫 d:\path\filename.mp4。
ffmpeg -i c:\input\k.mp4 -c d:\path\filename.mp4。
在windows下,路徑中出現空格或其他空白符時,則需要用雙引號把路徑包括起來。
比如 "d:\path\my file.mp4"
4. linux環境下ffmpeg從視頻中每隔幾幀提取幀命令
命令:ffmpeg -i INPUT -y -f image2 -ss TIME -vframes 1 OUTPUT
其中各參數的說明如下:
INPUT :輸入。表示原始視頻文件
TIME:某個時間點,要提取的圖像即為該時間點的圖像。格式00:01:30或直接寫90
OUTPUT:會在視頻文件所在的文件夾下生成圖像文件
自己動手寫個bash小腳本應該不難吧。
5. ffmpeg的安裝和使用
ffmpeg是一個可移植的音視頻解碼編碼庫。是開源的。是c代碼。不是php的。按你的需求。應該不需要安裝,直接到ffmpeg.org下載windows版編譯好的exe文件。然後參考網上的命令行參數。調用一下就可以了。
詳解估計你是要不到的了。貌似沒有人專門寫這個。不是大家不願意分享。而且大家都很難把整個ffmpeg吃透。自己多嘗試嘗試吧。
6. linux怎麼實現由ffmpeg命令
格式轉換 (將file.avi 轉換成output.flv)
C代碼
#ffmpeg -i file.avi output.flv
-i 表示輸入文件
:現在有個視頻video.avi,有個音頻 audio.mp3,將其合並成output.avi
兩個命令(file.avi 是中間文件,用完可刪)
C代碼
#ffmpeg -i video.avi -vcodec -an video2.avi
#ffmpeg -i video2.avi -i audio.mp3 -vcodec -acodec output.avi
-i 表示輸入文件
-vcodec 表示 force video codec (『』 to stream) 這個不知怎麼譯 ,估計是直接
-acodec 這個說的應該是音頻了 跟上面一樣
-an:表示 disable audio 估計是audio no 之類的縮寫,表示去掉video.avi 原有的音頻
方法2 好像可以直接指定兩個輸入文件 ,
C代碼
#ffmpeg -i /tmp/a.wav -i /tmp/a.avi /tmp/a.avi
兩個文件的順序很重要
從視頻里提取聲音(聲音與視頻的分離)
C代碼
#ffmpeg -i 人生若只如初見.flv -vnr.mp3
從flv 文件中提取聲音並保存為mp3格式
-vn : 表示忽略視頻 估計是video no 之類的縮寫
#ffmpeg -i 人生若只如初見.flv -an r.flv
只留視頻不留聲音
-an : 表示 忽略 聲音 估計是audio no 之類的縮寫
從視頻里提取圖片( )
C代碼
#ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 test.jpg
-ss
第8秒處截一圖
壓縮mp3 文件
如果你覺得mp3文件有點大,想變小一點那麼可以通過-ab 選項改變音頻的比特率 (bitrate)
C代碼
#ffmpeg -i input.mp3 -ab 128 output.mp3
//這里將比特率設為128
你可以用file 命令查看一下源文件 的信息
z.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 192 kbps, 44.1 kHz, Stereo
其中的192 kbps 就是這個東西
mp3中比特率的含義是:在壓縮音頻文件至mp3時,由壓縮軟體所確定數碼文件在播放時每秒傳 送給播放器大小,其單位是:千位/秒;英文的含義是:kbps – = kilobits per second。現在mp3文件的最高數位率是320 kbps。這樣的文件體積很大,每分鍾的音樂超過兩兆位元組。如果採用可變比特率(VBR)編碼來生成mp3文件,獲得與320 kbps相當音質,文件的體積會縮小25~50%。請注意:播放時間相同,而歌曲不同,所獲的壓縮mp3文件的一般不相同,這是因為VBR編碼所生成的 mp3文件的大小不僅僅取決於播放時間的長度,還取決於源音頻文件的其它因素。
7. 如何使用ffmpeg.exe。雙擊是一閃而過,怎麼輸入參數啊
1、首先把要分割的視頻放到D:aab目錄下,路徑可以隨意更改。
8. ffmpeg.exe的參數
ffmpeg.exe -i F:閃客之家閃客之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:11.flv
ffmpeg -i F: 1.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f: est.flv
使用-ss參數 作用(time_off set the start time offset),可以從指定時間點開始轉換任務。如:
轉換文件格式的同時抓縮微圖:
ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg'
對已有flv抓圖:
ffmpeg -i test.flv -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg'
-ss後跟的時間單位為秒
Ffmpeg轉換命令
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 -acodec aac -ac 2 -ar 22500
-ab 24 -f 3gp test.3gp
或者
ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp
ffmpeg參數設定解說
-bitexact 使用標准比特率
-vcodec xvid 使用xvid壓縮
-s 320x240 指定解析度
-r 29.97 楨速率(可以改,確認非標准楨率會導致音畫不同步,所以只能設定為15或者29.97)
畫面部分,選其一
-b <比特率> 指定壓縮比特率,似乎ffmpeg是自動VBR的,指定了就大概是平均比特率,比如768,1500這樣的
就是原來默認項目中有的
-qscale <數值> 以<數值>質量為基礎的VBR,取值0.01-255,約小質量越好
-qmin <數值> 設定最小質量,與-qmax(設定最大質量)共用,比如-qmin 10 -qmax 31
-sameq 使用和源同樣的質量
聲音部分
-acodec aac 設定聲音編碼
-ac <數值> 設定聲道數,1就是單聲道,2就是立體聲,轉換單聲道的TVrip可以用1(節省一半容量),高品質
的DVDrip就可以用2
-ar <采樣率> 設定聲音采樣率,PSP只認24000
-ab <比特率> 設定聲音比特率,前面-ac設為立體聲時要以一半比特率來設置,比如192kbps的就設成96,轉換
君默認比特率都較小,要聽到較高品質聲音的話建議設到160kbps(80)以上
-vol <百分比> 設定音量,某些DVDrip的AC3軌音量極小,轉換時可以用這個提高音量,比如200就是原來的2倍
這樣,要得到一個高畫質音質低容量的MP4的話,首先畫面最好不要用固定比特率,而用VBR參數讓程序自己去
判斷,而音質參數可以在原來的基礎上提升一點,聽起來要舒服很多,也不會太大(看情況調整
例子:ffmpeg -y -i 1.avi -title Test -vcodec xvid -s 368x208 -r 29.97 -b 1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol 200 -f psp -muxvb 768 1.***
解釋:以上命令可以在Dos命令行中輸入,也可以創建到批處理文件中運行。不過,前提是:要在ffmpeg所在的目錄中執行(轉換君所在目錄下面的cores子目錄)。
參數:
-y(覆蓋輸出文件,即如果1.***文件已經存在的話,不經提示就覆蓋掉了)
-i 1.avi(輸入文件是和ffmpeg在同一目錄下的1.avi文件,可以自己加路徑,改名字)
-title Test(在PSP中顯示的影片的標題)
-vcodec xvid(使用XVID編碼壓縮視頻,不能改的)
-s 368x208(輸出的解析度為368x208,注意片源一定要是16:9的不然會變形)
-r 29.97(幀數,一般就用這個吧)
-b 1500(視頻數據流量,用-b xxxx的指令則使用固定碼率,數字隨便改,1500以上沒效果;還可以用動態碼率如:-qscale 4和-qscale 6,4的質量比6高)
-acodec aac(音頻編碼用AAC)
-ac 2(聲道數1或2)
-ar 24000(聲音的采樣頻率,好像PSP只能支持24000Hz)
-ab 128(音頻數據流量,一般選擇32、64、96、128)
-vol 200(200%的音量,自己改)
-f psp(輸出psp專用格式)
-muxvb 768(好像是給PSP機器識別的碼率,一般選擇384、512和768,我改成1500,PSP就說文件損壞了)
1.***(輸出文件名,也可以加路徑改文件名)
機器強勁的話,可以多開幾個批處理文件,讓它們並行處理。
E:ffmpeg.exe -i I:1.wmv -b 360 -r 25 -s 320x240 -hq -deinterlace -ab 56 -ar 22050 -ac 1 D:2.flv
9. 我想用ffmpeg命令行轉換一個視頻文件,視、音頻編碼格式不變,只是將畫面旋轉90度,請問命令行該如何寫
在你的轉碼命令裡面添加上-vf rotate=PI/2或者-vf rotate=3*PI/2,例如
ffmpeg -i E:\ffmpeg\test.mp4 -y -vf rotate=PI/2 E:\ffmpeg\dest1.mp4