FFmpeg學習總結

躍然發表於2014-07-25

一、編譯FFmpeg靜態庫

方法一:

1要安裝xcode命令列工具

   1).xcode5安裝命令列工具方法:

             在終端執行命令Using xcode-select --install 

       2).xcode5之前安裝命令列工具方法:

2xcode5以前都是gcc編譯的,在xcode5以後都是clang編譯,在指令碼中有所體現

3xcode5以前還要下載gas-preprocessor.pl指令碼包,然後使用cp命令拷貝到usrbin下面,

     在xcode5以後不需要下載這個gas-preprocessor.pl指令碼

4下載ffmpeg原始碼,然後放放置原始碼至/usr/bin/build/src/檔案下

       在終端執行 cd /usr/bin/build/src/ffmpeg-2.2.3進入ffmpeg資料夾


5arm7指令碼(生成arm7下.a檔案)

1) sudo ./configure --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --enable-cross-compile --sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk" --target-os=darwin --cc="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" --extra-cflags="-arch armv7" --extra-ldflags="-arch armv7" --extra-ldflags=-L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/usr/lib/system --arch=arm --cpu=cortex-a8 --enable-pic  --disable-asm --disable-everything --enable-decoder=h264 --enable-decoder=rv40 --enable-decoder=aac


2) make clean

3) make 

4) make install 如果執行失敗,執行 sudo make install

5) make clean

6) 將執行所得.a檔案剪下到桌面ffmpeg資料夾下arm7子資料夾下



6arm7s指令碼(生成arm7s下.a檔案)

1) sudo ./configure --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --enable-cross-compile --sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk" --target-os=darwin --cc="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" --extra-cflags="-arch armv7s -mfpu=neon -miphoneos-version-min=7.1” --extra-ldflags="-arch armv7s -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk -miphoneos-version-min=7.1" --arch=arm --cpu=cortex-a9 --enable-pic  --disable-asm --disable-everything --enable-decoder=h264 --enable-decoder=rv40 --enable-decoder=aac

2) make clean

3) make 

4) make install 如果執行失敗,執行 sudo make install

5) make clean

6) 執行所得.a檔案剪下到桌面ffmpeg資料夾下arm7s子資料夾下


7i386的編譯:(生成i386下.a檔案)


1) sudo ./configure --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --enable-avresample --enable-cross-compile --sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk" --target-os=darwin --cc="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" --extra-cflags="-arch i386 -mfpu=neon -miphoneos-version-min=7.0" --extra-ldflags="-arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk -miphoneos-version-min=7.0" --arch=i386 --cpu=i386 --enable-decoder=h264 --enable-decoder=rv40


2) make clean

3) make 

4) make install 如果執行失敗,執行 sudo make install

5) make clean

6) 執行所得.a檔案剪下到桌面ffmpeg資料夾下sim子資料夾下

注:不用配置這個--enable-pic  --disable-asm

--enable-pic  //build position-independent code

--disable-asm  //disable all assembler optimizations

指令碼中的黃色字型顯示編譯器的路徑,這個和xcode5以前是不一樣的



8i386,arm7,arm7s資料夾下的相同名字檔案合併到ios檔案下一個檔案


1)、三個libswscale.a檔案合成一個檔案libswscale.a

lipo -create /Users/chang/Desktop/ffmpeg/sim/libswscale.a /Users/chang/Desktop/ffmpeg/arm7/libswscale.a /Users/chang/Desktop/ffmpeg/arm7s/libswscale.a -output /Users/chang/Desktop/ffmpeg/ios/libswscale.a

2)、三個libswresample.a檔案合成一個檔案libswresample.a

lipo -create /Users/chang/Desktop/ffmpeg/sim/libswresample.a /Users/chang/Desktop/ffmpeg/arm7/libswresample.a /Users/chang/Desktop/ffmpeg/arm7s/libswresample.a -output /Users/chang/Desktop/ffmpeg/ios/libswresample.a

3)、三個libavutil.a檔案合成一個檔案libavutil.a

lipo -create /Users/chang/Desktop/ffmpeg/sim/libavutil.a /Users/chang/Desktop/ffmpeg/arm7/libavutil.a /Users/chang/Desktop/ffmpeg/arm7s/libavutil.a -output /Users/chang/Desktop/ffmpeg/ios/libavutil.a

4)、三個libavformat.a檔案合成一個檔案libavformat.a

lipo -create /Users/chang/Desktop/ffmpeg/sim/libavformat.a /Users/chang/Desktop/ffmpeg/arm7/libavformat.a /Users/chang/Desktop/ffmpeg/arm7s/libavformat.a -output /Users/chang/Desktop/ffmpeg/ios/libavformat.a

5)、三個libavfilter.a檔案合成一個檔案libavfilter.a

lipo -create /Users/chang/Desktop/ffmpeg/sim/libavfilter.a /Users/chang/Desktop/ffmpeg/arm7/libavfilter.a /Users/chang/Desktop/ffmpeg/arm7s/libavfilter.a -output /Users/chang/Desktop/ffmpeg/ios/libavfilter.a

6)、三個libavdevice.a檔案合成一個檔案libavdevice.a

lipo -create /Users/chang/Desktop/ffmpeg/sim/libavdevice.a /Users/chang/Desktop/ffmpeg/arm7/libavdevice.a /Users/chang/Desktop/ffmpeg/arm7s/libavdevice.a -output /Users/chang/Desktop/ffmpeg/ios/libavdevice.a

7)、三個libavcodec.a檔案合成一個檔案libavcodec.a

lipo -create /Users/chang/Desktop/ffmpeg/sim/libavcodec.a /Users/chang/Desktop/ffmpeg/arm7/libavcodec.a /Users/chang/Desktop/ffmpeg/arm7s/libavcodec.a -output /Users/chang/Desktop/ffmpeg/ios/libavcodec.a


注:i386,arm7資料夾下各有8.a檔案,arm7s資料夾下卻只有7個,不明原理。

測試中,我在桌面建了一個資料夾ffmpeg,下面有三個子資料夾sim(即i386編譯所得.a檔案,用於模擬器除錯)、arm7(即arm7環境下編譯所得檔案)、arm7s(即arm7s環境下編譯所得檔案)。經過上面命令操作後,在ios資料夾下會得到合成後的.a檔案,這樣就可以在真機及模擬器下正常使用了。


 方法二:

  1.  命令⾏安裝FFmpeg:git clone git:// source.ffmpeg.org/ffmpeg.git ffmpeg(或:到https:// 

        github.com/ gabriel/ffmpeg-iphone-build下載 ffmpeg-iphone-build)


  1. 安裝命令⾏⼯具(Command Line Tools) 開啟終端,輸⼊命令:xcode-select -- install選擇“安裝”,然後同意安裝協議。 
  2. 下載gas-preprocessor:https:// github.com/mansr/gas-preprocessor, 先 將gas-preprocessor.pl拷⻉貝到/usr/bin/⽬錄中。 然後修改gas-preprocessor.pl檔案的權 限。注:需要有讀,寫和執⾏行的許可權。具體操 作為,⾸先在命令列下進入/usr/bin目錄, 然後執⾏行chmod命令: 1).cd /usr/bin/ 2). chmod a+rwx gas-preprocessor.pl 
  3.           注:在⽹上搜尋gas-preprocessor.pl,會有很多版本,學習中,我下載了一個較舊的版本,然後雖然編譯成功了靜態庫檔案,但是.a⽂檔案嵌入到⼯程後卻不能正常播放視訊。這個困擾我好長時間,後來換成最新程式碼,然後,ok,編譯成功!
  4.    4.下載FFmpeg原始碼庫,放置在/usr/bin/build/src目錄下
  5.    5.執行build-ffmpeg.sh檔案
  6.       1).終端下cd 至build-ffmpeg.sh指令碼所在目錄下
  7.       2).執行 sh build-ftmpeg.sh

  6. 把/build/built/universal目錄下的 lib 和 include 檔案導⼊工程,然後在header search path ,library search  path配置include⽂件路徑。 


、Mac OS X下安裝FFmpeg

This post is going to be to show you how to install FFmpeg on Mac OS X as easy as possible. For that, i will use a software called “Homebrew”. It is a linux like package manager with a lot of useful tools easy to install from it. It is quite similar to MacPorts, but in this special case you will get a more recent FFmpeg using Homebrew thanMacPorts. Once you are familiar with Homebrew, i am sure you will use it a lot more afterwards if you are not using already.

Install/Update Xcode

To be able to use Homebrew you need the Xcode Command Line Tools. Follow these steps to install it:

1. Open “Mac App Store” and install Xcode. If you have XCode already installed, update to the latest version available if necesary.

2. After Xcode has been successfully installed, open the Xcode Preferences-Pane.

3. Select the “Downloads”-Tab and click on “Install” next to the “Command Line Tools” entry.

The time i am writing this Tutorial i have already installed the Xcode Command Line Tools, even if not in the latest version, which i will correct later on my system. But, this is also good for you as you can see what to install if i tell you that on your system will be an “Install”-Button where is an “Update”-Button on the provided screenshot.

Install Homebrew

Installing Homebrew is quite simple. Everything you need to do is to open up a Terminal window, paste and execute the following command and follow the instructions during the installation process.

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

After successful installation you should execute:

brew doctor

This checks if your Homebrew installation was successful and installation of Formulas (Packages) will work. If you have any trouble please drop me a note in the comments section.

Install FFmpeg

Now we are nearly done as all prerequisites are now installed and we can start installing FFmpeg. As there are many options when installing FFmpeg, a command you should know about is brew options <Formula> . This will show you all available options for the fromula you are going to install which will be in this case “ffmpeg”. So in our case, brew options ffmpeg will print the following information to your screen:


1

2

3

4

5

6

7

8

reneVolution$ brew options ffmpeg

 

--with-fdk-aac

    Enable the Fraunhofer FDK AAC library

--with-ffplay

    Enable FFplay media player

--with-freetype

    Build with freetype support

To finally install FFmpeg on your system you should follow these steps:

1. Check if your Homebrew installation is up to date and working with brew doctor

2. Check all available options for ffmpeg with brew options ffmpeg

3. Install ffmpeg with all desired options with brew install ffmpeg [all your options]

Example:

To install FFmpeg with all available options without disabling anything execute:


1

brew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-frei0r --with-libass --with-libvo-aacenc --with-libvorbis --with-libvpx --with-opencore-amr --with-openjpeg --with-opus --with-rtmpdump --with-schroedinger --with-speex --with-theora --with-tools

If you are running into any troubles during installation please leave a message in the comments section.

Afterwards FFmpeg should be installed and you can start enjoy to use it.

If you prefer to work with FFmpeg on your Windows machine, read my article How to get the latest FFmpeg binaries for Windows.


安裝完成後,即可在mac 終端即可使用ffmpeg命令操作視音訊。ffmpeg功能強大得令人匪夷所思。


FFmpeg 基本用法

本課要解決的問題

1.FFmpeg的轉碼流程是什麼?

2.常見的視訊格式包含哪些內容嗎?

3.如何把這些內容從視訊檔案中抽取出來?

4.如何從一種格式轉換為另一種格式?

5.如何放大和縮小視訊?

6.如何旋轉,翻轉,填充,裁剪,模糊,銳化視訊?

7.如何給視訊加logo,刪除logo?

8.如何給視訊加文字,動態文字?

9.如何處理圖片?

10.如何錄影,新增動態logo,截圖,馬賽克視訊?

第一部分

基礎

術語

容器(Container)

容器就是一種檔案格式,比如flv,mkv等。包含下面5種流以及檔案頭資訊。

流(Stream)

是一種視訊資料資訊的傳輸方式,5種流:音訊,視訊,字幕,附件,資料。

幀(Frame)

幀代表一幅靜止的影像,分為I幀,P幀,B幀。

編解碼器(Codec)

是對視訊進行壓縮或者解壓縮,CODEC =COde (編碼) +DECode(解碼)

複用/解複用(mux/demux)

把不同的流按照某種容器的規則放入容器,這種行為叫做複用(mux)

把不同的流從某種容器中解析出來,這種行為叫做解複用(demux)

 

 

簡介

FFmpeg的名稱來自MPEG視訊編碼標準,前面的“FF”代表“Fast Forward”,FFmpeg是一套可以用來記錄、轉換數字音訊、視訊,並能將其轉化為流的開源計算機程式。可以輕易地實現多種視訊格式之間的相互轉換。

 

FFmpeg的使用者有Google,Facebook,Youtube,優酷,愛奇藝,土豆等。

組成

1、libavformat:用於各種音視訊封裝格式的生成和解析,包括獲取解碼所需資訊以生成解碼上下文結構和讀取音視訊幀等功能,包含demuxers和muxer庫;

2、libavcodec:用於各種型別聲音/影像編解碼;

3、libavutil:包含一些公共的工具函式;

4、libswscale:用於視訊場景比例縮放、色彩對映轉換;

5、libpostproc:用於後期效果處理;

6、ffmpeg:是一個命令列工具,用來對視訊檔案轉換格式,也支援對電視卡實時編碼;

7、ffsever:是一個HTTP多媒體實時廣播流伺服器,支援時光平移;

8、ffplay:是一個簡單的播放器,使用ffmpeg 庫解析和解碼,通過SDL顯示;

 

FFmpeg處理流程

過濾器(Filter)

在多媒體處理中,filter的意思是被編碼到輸出檔案之前用來修改輸入檔案內容的一個軟體工具。如:視訊翻轉,旋轉,縮放等。

語法:[input_link_label1][input_link_label2]… filter_name=parameters [output_link_label1][output_link_label2]…

過濾器圖link label :是標記過濾器的輸入或輸出的名稱

1.視訊過濾器 -vf

如testsrc視訊按順時針方向旋轉90度

ffplay -f lavfi -i testsrc -vf transpose=1

如testsrc視訊水平翻轉(左右翻轉)

ffplay -f lavfi -i testsrc -vf hflip

2.音訊過濾器 -af

實現慢速播放,聲音速度是原始速度的50%

ffplay p629100.mp3 -af atempo=0.5

 

如何實現順時針旋轉90度並水平翻轉? 

過濾器鏈(Filterchain)

基本語法

Filterchain = 逗號分隔的一組filter

語法:“filter1,filter2,filter3,…filterN-2,filterN-1,filterN”

順時針旋轉90度並水平翻轉

ffplay -f lavfi -i testsrc -vf transpose=1,hflip

 

如何實現水平翻轉視訊和源視訊進行比較? 看過濾器鏈是如何實現的。

 

過濾器鏈(Filterchain)

第一步: 源視訊寬度擴大兩倍。

ffmpeg -i jidu.mp4 -t 10 -vf pad=2*iw output.mp4

第二步:源視訊水平翻轉

ffmpeg -i jidu.mp4 -t 10 -vf hflip output2.mp4

第三步:水平翻轉視訊覆蓋output.mp4

ffmpeg -i output.mp4 -i output2.mp4 -filter_complex overlay=w compare.mp4

是不是很複雜?

用帶有連結標記的過濾器圖(Filtergraph)只需一條命令。

過濾器圖(Filtergraph)

基本語法

Filtergraph = 分號分隔的一組filterchain

“filterchain1;filterchain2;…filterchainN-1;filterchainN”

 

 

Filtergraph的分類

1、簡單(simple) 一對一

2、複雜(complex)多對一, 多對多

過濾器圖(Filtergraph)

簡單過濾器圖處理流程:

複雜過濾器圖處理流程:

 

從圖中可以發現複雜過濾器圖比簡單過濾器圖少2個步驟,效率比簡單高,ffmpeg建議儘量使用複雜過濾器圖。

回答上面提的問題,實現水平翻轉視訊和源視訊進行比較

 

過濾器圖(Filtergraph)

用ffplay直接觀看結果:

ffplay -f lavfi -i testsrc -vf split[a][b];[a]pad=2*iw[1];[b]hflip[2];[1][2]overlay=w

 

F1: split過濾器建立兩個輸入檔案的拷貝並標記為[a],[b]

F2: [a]作為pad過濾器的輸入,pad過濾器產生2倍寬度並輸出到[1].

F3: [b]作為hflip過濾器的輸入,vflip過濾器水平翻轉視訊並輸出到[2].

F4: 用overlay過濾器把 [2]覆蓋到[1]的旁邊.

 

 

選擇媒體流

一些多媒體容器比如AVI,mkv,mp4等,可以包含不同種類的多個流,如何從容器中抽取各種流呢?

語法:

-map file_number:stream_type[:stream_number]

 

這有一些特別流符號的說明:

1、-map 0 選擇第一個檔案的所有流

2、-map i:v 從檔案序號i(index)中獲取所有視訊流, -map i:a 獲取所有音訊流,-map i:s 獲取所有字幕流等等。

3、特殊引數-an,-vn,-sn分別排除所有的音訊,視訊,字幕流。

 

注意:檔案序號和流序號從0開始計數。

選擇媒體流

第二部分

檢視幫助

幫助

FFmpeg工具有一個巨大的控制檯幫助。下表描述了可用的一些選項,斜體字表示要被替換的項,ffplay和ffprobe也有一些類似的選項。

 

幫助

可用的bit流 :ffmpeg –bsfs

可用的編解碼器:ffmpeg –codecs

可用的解碼器:ffmpeg –decoders

可用的編碼器:ffmpeg –encoders

可用的過濾器:ffmpeg –filters

可用的視訊格式:ffmpeg –formats

可用的聲道佈局:ffmpeg –layouts

可用的license:ffmpeg –L

可用的畫素格式:ffmpeg –pix_fmts

可用的協議:ffmpeg -protocals

 

第三部分

位元速率、幀率和檔案大小

概述

        位元速率和幀率是視訊檔案的最重要的基本特徵,對於他們的特有設定會決定視訊質量。如果我們知道位元速率和時長那麼可以很容易計算出輸出檔案的大小。

 

幀率:幀率也叫幀頻率,幀率是視訊檔案中每一秒的幀數,肉眼想看到連續移動影像至少需要15幀。

位元速率:位元率(也叫位元速率,資料率)是一個確定整體視訊/音訊質量的引數,為秒單位處理的位元組數,位元速率和視訊質量成正比,在視訊檔案中中位元率用bps來表達。

幀率

1、用 -r 引數設定幀率

ffmpeg –i input –r fps output

2、用fps filter設定幀率

ffmpeg -i clip.mpg -vf fps=fps=25 clip.webm

幀率的預定義值:

例如設定位元速率為29.97fps,下面三種方式具有相同的結果:

ffmpeg -i input.avi -r 29.97 output.mpg

ffmpeg -i input.avi -r 30000/1001 output.mpg

ffmpeg -i input.avi -r netsc output.mpg

 

位元速率、檔案大小

設定位元速率 –b 引數

-b 

ffmpeg -i film.avi -b 1.5M film.mp4

 

音訊:-b:a     視訊: - b:v

設定視訊位元速率為1500kbps

ffmpeg -i input.avi -b:v 1500k output.mp4

 

控制輸出檔案大小

-fs (file size首字母縮寫) 

ffmpeg -i input.avi -fs 1024K output.mp4

計算輸出檔案大小

(視訊位元速率+音訊位元速率) * 時長 /8 = 檔案大小K

 

 

第四部分

調整視訊解析度

1、用-s引數設定視訊解析度,引數值wxh,w寬度單位是畫素,h高度單位是畫素

ffmpeg -i input_file -s 320x240 output_file

 

2、預定義的視訊尺寸

下面兩條命令有相同效果

ffmpeg -i input.avi -s 640x480 output.avi

ffmpeg -i input.avi -s vga output.avi

 

Scale filter調整解析度

Scale filter的優點是可以使用一些額外的引數

語法:

Scale=width:height[:interl={1|-1}]

下表列出了常用的額外引數

舉例

下面兩條命令有相同效果

ffmpeg -i input.mpg -s 320x240 output.mp4 

ffmpeg -i input.mpg -vf scale=320:240 output.mp4

 

對輸入視訊成比例縮放

改變為源視訊一半大小

ffmpeg -i input.mpg -vf scale=iw/2:ih/2 output.mp4

改變為原視訊的90%大小:

ffmpeg -i input.mpg -vf scale=iw*0.9:ih*0.9 output.mp4

 

舉例

在未知視訊的解析度時,保證調整的解析度與源視訊有相同的橫縱比。

寬度固定400,高度成比例:

ffmpeg -i input.avi -vf scale=400:400/a

ffmpeg -i input.avi -vf scale=400:-1

 

相反地,高度固定300,寬度成比例:

ffmpeg -i input.avi -vf scale=-1:300

ffmpeg -i input.avi -vf scale=300*a:300

 

第五部分

裁剪/填充視訊

裁剪視訊crop filter

從輸入檔案中選取你想要的矩形區域到輸出檔案中,常見用來去視訊黑邊。

語法:crop:ow[:oh[:x[:y:[:keep_aspect]]]]

 

舉例

裁剪輸入視訊的左三分之一,中間三分之一,右三分之一:

ffmpeg -i input -vf crop=iw/3:ih :0:0 output 

ffmpeg -i input -vf crop=iw/3:ih :iw/3:0 output 

ffmpeg -i input -vf crop=iw/3:ih :iw/3*2:0 output

裁剪幀的中心

當我們想裁剪區域在幀的中間時,裁剪filter可以跳過輸入x和y值,他們的預設值是

Xdefault  = ( input width - output width)/2 

Ydefault  = ( input height - output height)/2

ffmpeg -i input_file -v crop=w:h output_file

裁剪中間一半區域:

ffmpeg -i input.avi -vf crop=iw/2:ih/2 output.avi

 

舉例

比較裁剪後的視訊和源視訊比較

ffplay -i jidu.mp4 -vf split[a][b];[a]drawbox=x=(iw-300)/2:(ih-300)/2:w=300:h=300:c=yellow[A];[A]pad=2*iw[C];[b]crop=300:300:(iw-300)/2:(ih-300)/2[B];[C][B]overlay=w*2.4:40

 

 

自動檢測裁剪區域

cropdetect  filter 自動檢測黑邊區域

ffplay jidu.mp4 -vf cropdetect

 

然後用檢測到的值來裁剪視訊

ffplay jidu.mp4 –vf crop=672:272:0:54

 

填充視訊(pad)

在視訊幀上增加一快額外額區域,經常用在播放的時候顯示不同的橫縱比

語法:pad=width[:height:[:x[:y:[:color]]]]

 

舉例

建立一個30個畫素的粉色寬度來包圍一個SVGA尺寸的圖片:

ffmpeg -i photo.jpg -vf pad=860:660:30:30:pink framed_photo.jpg


同理可以製作testsrc視訊用30個畫素粉色包圍視訊

ffplay  -f lavfi -i testsrc -vf pad=iw+60:ih+60:30:30:pink

 

4:3到16:9

一些裝置只能播放16:9的橫縱比,4:3的橫縱比必須在水平方向的兩邊填充成16:9,

 

高度被保持,寬度等於高度乘以16/9,x(輸入檔案水平位移)值由表示式(output_width - input_width)/2來計算。

 

4:3到16:9的通用命令是:

ffmpeg -i input -vf pad=ih*16/9:ih :(ow-iw)/2:0:color output

 

舉例

ffplay  -f lavfi -i testsrc -vf pad=ih*16/9:ih:(ow-iw)/2:0:pink

 

16:9到4:3

為了用4:3的橫縱比來顯示16:9的橫縱比,填充輸入檔案的垂直兩邊,寬度保持不變,高度是寬度的3/4,y值(輸入檔案的垂直偏移量)是由一個表示式(output_height-input_height)/2計算出來的。

 

16:9到4:3的通用命令:

ffmpeg -i input -vf pad=iw :iw*3/4:0:(oh-ih)/2:color output

 

舉例

ffplay  -f lavfi -i testsrc=size=320x180 -vf pad=iw:iw*3/4:0:(oh-ih)/2:pink

 

 

第六部分

翻轉和旋轉

翻轉

水平翻轉語法: -vf hflip

ffplay -f lavfi -i testsrc -vf hflip

 

垂直翻轉語法:-vf vflip

ffplay -f lavfi -i testsrc -vf vflip

 

旋轉

語法:transpose={0,1,2,3}

0:逆時針旋轉90°然後垂直翻轉

1:順時針旋轉90°

2:逆時針旋轉90°

3:順時針旋轉90°然後水平翻轉

第七部分

模糊,銳化

模糊

語法:boxblur=luma_r:luma_p[:chroma_r:chram_p[:alpha_r:alpha_p]]

ffplay -f lavfi -i testsrc -vf  boxblur=1:10:4:10

注意:luma_r和alpha_r半徑取值範圍是0~min(w,h)/2, chroma_r半徑的取值範圍是0~min(cw/ch)/2

銳化

語法:-vf unsharp=l_msize_x:l_msize_y:l_amount:c_msize_x:c_msize_y:c_amount

所有的引數是可選的,預設值是5:5:1.0:5:5:0.0

l_msize_x:水平亮度矩陣,取值範圍3-13,預設值為5

l_msize_y:垂直亮度矩陣,取值範圍3-13,預設值為5

l_amount:亮度強度,取值範圍-2.0-5.0,負數為模糊效果,預設值1.0

c_msize_x:水平色彩矩陣,取值範圍3-13,預設值5

c_msize_y:垂直色彩矩陣,取值範圍3-13,預設值5

c_amount:色彩強度,取值範圍-2.0-5.0,負數為模糊效果,預設值0.0

舉例

使用預設值,亮度矩陣為5x5和亮度值為1.0

ffmpeg -i input -vf unsharp output.mp4

高斯模糊效果(比較強的模糊):

ffplay -f lavfi -i testsrc -vf unsharp=13:13:-2

 

第八部分

覆蓋(畫中畫)

覆蓋

語法:overlay[=x[:y]

所有的引數都是可選,預設值都是0

 

舉例

Logo在左上角

ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay pair1.mp4

 

舉例

右上角:

ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=W-w  pair2.mp4

左下角:

ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=0:H-h  pair2.mp4

右下角:

ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=W-w:H-h  pair2.mp4

 

刪除logo

語法:-vf delogo=x:y:w:h[:t[:show]]

x:y 離左上角的座標

w:h  logo的寬和高

t: 矩形邊緣的厚度預設值4

show:若設定為1有一個綠色的矩形,預設值0.

ffplay -i jidu.mp4 -vf delogo=50:51:60:60:100:0

第九部分

新增文字

新增文字

語法:

drawtext=fontfile=font_f:text=text1[:p3=v3[:p4=v4[…]]]

常用的引數值

x:離左上角的橫座標

y: 離左上角的縱座標

fontcolor:字型顏色

fontsize:字型大小

text:文字內容

textfile:文字檔案

t:時間戳,單位秒

n:幀數開始位置為0

draw/enable:控制檔案顯示,若值為0不顯示,1顯示,可以使用函式

簡單用法

1、在左上角新增Welcome文字

ffplay -f lavfi -i color=c=white -vf drawtext=fontfile=arial.ttf:text=Welcom

2、在中央新增Good day

ffplay -f lavfi -i color=c=white -vf drawtext="fontfile=arial.ttf:text='Goodday':x=(w-tw)/2:y=(h-th)/2"

3、設定字型顏色和大小

ffplay -f lavfi -i color=c=white -vf drawtext="fontfile=arial.ttf:text='Happy Holidays':x=(w-tw)/2:y=(h-th)/2:fontcolor=green:fontsize=30"

 

動態文字

用 t (時間秒)變數實現動態文字

1、頂部水平滾動

ffplay -i jidu.mp4 -vf drawtext="fontfile=arial.ttf:text='Dynamic RTL text':x=w-t*50:fontcolor=darkorange:fontsize=30"

2、底部水平滾動

ffplay -i jidu.mp4 -vf drawtext="fontfile=arial.ttf:textfile=textfile.txt:x=w-t*50:y=h-th:fontcolor=darkorange:fontsize=30"

3、垂直從下往上滾動

ffplay jidu.mp4 -vf drawtext="textfile=textfile:fontfile=arial.ttf:x=(w-tw)/2:y=h-t*100:fontcolor=white:fontsize=30“

想實現右上角顯示當前時間?

動態文字

在右上角顯示當前時間 localtime

ffplay jidu.mp4 -vf drawtext="fontfile=arial.ttf:x=w-tw:fontcolor=white:fontsize=30:text='%{localtime\:%H\\\:%M\\\:%S}'“

 

每隔3秒顯示一次當前時間

ffplay jidu.mp4 -vf drawtext="fontfile=arial.ttf:x=w-tw:fontcolor=white:fontsize=30:text='%{localtime\:%H\\\:%M\\\:%S}':enable=lt(mod(t\,3)\,1)"

 

第十部分

圖片處理

圖片支援

FFmpeg支援絕大多數圖片處理, 除LJPEG(無損JPEG)之外,其他都能被解碼,除了EXR,PIC,PTX之外,所有的都能被編碼。

擷取一張圖片使用 –ss(seek from start)引數.

ffmpeg -ss 01:23:45 -i jidu.mp4 image.jpg

從視訊中生成GIF圖片

ffmpeg -i jidu.mp4 -t 10 -pix_fmt rgb24 jidu.gif

轉換視訊為圖片(每幀一張圖)

ffmpeg -i clip.avi frame%4d.jpg

圖片轉換為視訊

ffmpeg -f image2 -i img%4d.jpg -r 25 video.mp4

 

裁剪、填充

和視訊一樣,圖片也可以被裁剪和填充

裁剪

ffmpeg -f lavfi -i rgbtestsrc -vf crop=150:150 crop_rg.png

填充

ffmpeg -f lavfi -i smptebars -vf pad=360:280:20:20:orange pad_smpte.jpg

 

翻轉,旋轉,覆蓋

和視訊一樣圖片同樣能翻轉,旋轉和覆蓋

翻轉

ffmpeg -i orange.jpg -vf hflip orange_hfilp.jpg

ffmpeg -i orange.jpg -vf vflip orange_vfilp.jpg

旋轉

ffmpeg -i image.png -vf transpose=1 image_rotated.png

覆蓋

ffmpeg -f lavfi -i rgbtestsrc -s 400x300 rgb .png 

ffmpeg -f lavfi -i smptebars smpte.png 

ffmpeg -i rgb .png -i smpte.png -filter_complex overlay= (W-w)/2:(H-h)/2  rgb_smpte.png

 

第十一部分

其他高階技巧

螢幕錄影

顯示裝置名稱

ffmpeg -list_devices 1 -f dshow -i dummy

呼叫攝像頭

ffplay -f dshow  -i video="Integrated Camera"

儲存為檔案

ffmpeg -y -f dshow -s 320x240 -r 25 -i video="Integrated Camera" -b:v 800K -vcodec mpeg4 new.mp4

 

新增字幕subtitles

語法 –vf subtitles=file

 

ffmpeg -i jidu.mp4 -vf subtitles=rgb.srt output.mp4

視訊顫抖、色彩平衡

視訊顫抖

ffplay –i jidu.mp4 -vf crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)

 

色彩平衡

ffplay -i jidu.mp4 -vf curves=vintage

色彩變幻

ffplay -i jidu.mp4 -vf hue="H=2*PI*t: s=sin(2*PI*t)+1“

彩色轉換黑白

ffplay -i jidu.mp4 -vf lutyuv="u=128:v=128"

設定音訊視訊播放速度

3倍視訊播放視訊

ffplay -i jidu.mp4 -vf setpts=PTS/3

?速度播放視訊

ffplay -i jidu.mp4  -vf setpts=PTS/(3/4)

2倍速度播放音訊

ffplay -i speech.mp3 -af atempo=2

 

問題:視訊和音訊同時3/4慢速播放

截圖

每隔一秒截一張圖

ffmpeg -i input.flv -f image2 -vf fps=fps=1 out%d.png

每隔20秒截一張圖

ffmpeg -i input.flv -f image2 -vf fps=fps=1/20 out%d.png

 

注意:ffmpeg version N-57961-gec8e68c版本最多可以每隔20s截一張圖。

多張截圖合併到一個檔案裡(2x3) ?每隔一千幀(秒數=1000/fps25)即40s截一張圖

ffmpeg? -i jidu.mp4 -frames 3 -vf "select=not(mod(n\,1000)),scale=320:240,tile=2x3" out.png

 

馬賽克視訊

馬賽克視訊

用多個輸入檔案建立一個馬賽克視訊:

ffmpeg -i jidu.mp4 -i jidu.flv -i "Day By Day SBS.mp4" -i "Dangerous.mp4" -filter_complex "nullsrc=size=640x480 [base]; [0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=320 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=320:y=240" -c:v libx264 output.mkv

 

Logo動態移動

1、2秒後logo從左到右移動:

ffplay -i jidu.mp4  -vf movie=logo.png[logo];[in][logo]overlay=x='if(gte(t\,2)\,((t-2)*80)-w\,NAN)':y=0

 

2、2秒後logo從左到右移動後停止在左上角

ffplay -i jidu.mp4  -vf movie=logo.png[logo];[in][logo]overlay=x='if(gte(((t-2)*80)-w\,W)\,0\,((t-2)*80)-w)':y=0

3、每隔10秒交替出現logo。

ffmpeg -y -t 60 -i jidu.mp4 -i logo.png -i logo2.png -filter_complex "overlay=x=if(lt(mod(t\,20)\,10)\,10\,NAN ):y=10,overlay=x=if(gt(mod(t\,20)\,10)\,W-w-10\,NAN ) :y=10" overlay.mp4

 

資料

FFmpeg官網: http://www.ffmpeg.org

FFmpeg doc : http://www.ffmpeg.org/documentation.html

FFmpeg wiki : https://trac.ffmpeg.org/wiki

FAQ

Thanks!

 

 FFmpeg基礎: http://wenku.baidu.com/view/296eefcaf90f76c661371af1.html


四、FFmpeg優劣對比


1、FFMPEG 與ios自帶的播放控制元件(MPMoviePlayerController) 各自的優勢是什麼?

     1).MPMoviePlayerController 只支援能在iPhone或者iPod上直接播放(不借助其他播放器)的格式

     .mov, .mp4,.mpv, and .3gp

      反過來就是說, rmvb  mkv 等一些比較常用的是不支援的,只能靠別的(如ffmpeg等)

     2). ffmpeg是優化過的,你要用在嵌入式上面的話必須找到相應平臺的工程,移植很困難,而且生成檔案大!   

       ffmpeg使用的許多優化彙編指令你這個平臺也不一定支援。

      ffmpeg的優勢在於支援格式全面。 速度沒有什麼優勢的。


2、FFmpeg支援

FFmpeg 對編碼解碼器的支援

ffmpeg 支援的編解碼器種類共有 280 多種,涵蓋了幾乎所有常見音視訊編碼格式,

能解碼幾乎所有的音視訊,每種音視訊編解碼器的實現都在 libavcodec 目錄下有具體的 C 語言實現

FFmpeg 對容器格式的支援

ffmpeg 支援對絕大多數的容器格式的讀寫操作,共計 190 多種,涵蓋了網際網路上各 種常見媒體格式及日常生活中及專業應用中的各種媒體格式。

FFmpeg 對影像顏色空間的支援ffmpeg 支援常見的影像顏色空間,並且在 libavswcale 中定義了顏色空間轉換的相關

函式實現各種顏色模式的互轉。

3、音訊

音訊:使用audiocore播放音訊只能播放iOS支援的音訊格式,使用SDL播放音訊沒有限制。

FFMPEG功能相當強大,在完整的FFMPEG包中就包含了ffserver, ffplay, ffmpeg, avcodec, avdevice, avformat, avutil, swscale等;其中ffserver, ffplay, ffmpeg為應用程式,對與我們這些從事軟體開發的人來說基本上沒什麼用;而avcodec為加解碼庫、avformat為格式庫,avutil則為基礎庫(但平常我們很少用到), swscale則為圖象處理庫;所以我們所要的就是移值avcodec, avformat, avutil, swscale這四個庫。

目前幾乎所有的主流多媒體播放器都是基於開源多媒體框架ffmpeg來做的,可見ffmpeg的強大。FFmpeg在Chrome, MPlayer, VLC, xine中都有應用


4、ffmpeg缺點

ffmpeg編譯起來太麻煩了……各種神煩……擺脫xcode之後先編譯.a庫然後再新增進專案應該會好些,我反正是懶得再試了……

AVPlayer比較殘,MP4方面吊拽酷炫,無人能敵,其他的就差強人意了(不能播好不好)


五、在Windows、Mac OS 下搭建Apache檔案伺服器


1windows下配置Apache做檔案伺服器

以下是在windows 8下配置Apache作為檔案伺服器的步驟,並且配置了 webdav 能支援put 上傳,已在linux下使⽤用curl命令測試成功!

Apache2.4.7 win版下載地址:http://www.apachelounge.com/download/

1.下載回來的是解壓檔案,解壓好放到要安裝的位置。(我這⾥裡以D: \Acpache24為例)2.開啟Apache24\conf下httpd.conf ⽂件,⽤記事本開啟即可。 (1):把c:/Apache24 改為 ServerRoot "D:/Apache24" (2):ServerAdmin 改不改⽆所謂

(3):Listen 80 預設為80,如80端⼝已被佔用,請使用其他埠號, 如:Listen 8181(4):ServerName www.example.com:80 把#號去掉,改為⾃己的域名,如 果沒有則使⽤用IP地址,如:ServerName192.168.20.18:8181 (5):把DocumentRoot "c:/Apache24/htdocs" 改為 DocumentRoot "D:/ Apache24/htdocs" 這⾥裡使⽤用的是預設的⽂件夾,你也可以⾃己新建,然 後修改路徑就好了

(6):把<Directory "c:/Apache24/htdocs"> 改為 <Directory "D:/Apache24/ htdocs">(7):把ScriptAlias /cgi-bin/ "c:/Apache24/cgi-bin/" 改為 ScriptAlias /cgi-bin/ "D:/Apache24/cgi-bin/"

(8):把<Directory "c:/Apache24/cgi-bin"> 改為 <Directory "D:/Apache24/ cgi-bin">

3.上⾯面設定完成後,儲存文件。下⾯就是啟動Apache:

開始 --- 運⾏,輸入cmd,開啟命令提⽰示符。接著輸入1.d: 回車 2.cd Apache24\bin 回車 3.httpd 回車

如果httpd.conf配置正確的話,輸入httpd回車後是沒有任何提示的,這個 時候就是啟動了Apache。 注意:不能關掉這個命令視窗,否則apache會關閉的。

4.測試,⽤瀏覽器訪問會出現“It works”那麼就說明apache已經正確安裝 了。

5.加⼊入為windows的系統服務,讓Apache⾃啟動。 (1)關閉3的那個httpd命令視窗,不然會報錯的。(2)開始 --- 運⾏,輸⼊cmd,再開啟一個命令提示符。輸入d:回車cd Apache24\bin回車 (注意:windows8的要以管理員來執行)

這⾥加入服務的命令為:httpd.exe -k install -n "servicename"。 servicename為Apache在windows的服務中的名字。例如:httpd.exe -k install -n "Apache24"。輸入httpd.exe -k install -n "Apache24"後,會有成功安裝的提示,“服 務”也會有Apache24這個服務項。這個時候可以選擇啟動,啟動Apache 服務。 如果要解除安裝這個服務的話,先要停止這個服務,然後輸入httpd.exe -k uninstall -n "Apache24"解除安裝這個服務。 以後可以通過Apache24\bin資料夾下的ApacheMonitor.exe來控制這個

Apache。工作列也會有顯示這個軟體的很方便的管理Apache的執行。

接著就是配置下載目錄:download及上傳目錄upload了,其中上傳目錄需 要配置成webdav,以便於接收put 的上傳⽅式。

⼀、配置下載目錄download: 1.在Apache目錄下建立下載目錄download 路徑為"D:/Apache24/

download"2.在Apache24\conf 下開啟httpd.conf⽂檔案,新增以下內容:

Alias /download "D:/Apache24/download" <Directory "D:/Apache24/download">

Options Indexes AllowOverride None Order allow,deny Allow from all Require all granted

</Directory>

3.儲存文件,重啟服務,在linux下使用curl進行測試, curl -o test.txt http://192.168.20.18:8181/download/test.txt

⼆二、配置上傳目錄upload:1.在Apache目錄下建立下載目錄upload 路徑為"D:/Apache24/upload" 2.在Apache24\conf 下開啟httpd.conf⽂檔案

#LoadModule dav_module modules/mod_dav.so #LoadModule dav_fs_module modules/mod_dav_fs.so

#Include conf/extra/httpd-dav.conf 找到以上3行,把"#"去掉 3.開啟Apache24\conf\extra下httpd-dav.conf⽂檔案 DavLockDB "c:/Apache24/var/DavLock"

Alias /uploads "c:/Apache24/uploads"

<Directory "c:/Apache24/uploads"> Dav On

AuthType DigestAuthName DAV-uploadAuthUserFile "c:/Apache24/user.passwd" AuthDigestProvider file<RequireAny>

Require method GET POST OPTIONS

Require user admin </RequireAny>

</Directory> 把以上程式碼替換成以下程式碼:

DavLockDB "D:/Apache24/var/DavLock" Alias /upload "D:/Apache24/upload" <Directory "D:/Apache24/upload">

Dav On

Options IndexesAllowOverride NoneOrder allow,denyAllow from allAuthType BasicAuthName DAV-uploadAuthUserFile "D:/Apache24/user.passwd" AuthBasicProvider file

Require valid-user </Directory>

4.按照 DavLockDB "D:/Apache24/var/DavLock",建立資料夾與檔案。 (1).在Apache24目錄下建立⽂件夾var (2).在⽂件夾var中建立檔案DavLock5.建立密碼⽂件

(1).開始 --- 運⾏,輸⼊cmd,開啟命令提⽰示符。接著輸入d: 回車 cd Apache24\bin 回車

輸入htpasswd.exe -c "D:\Apache24\user.passwd" admin 回車 "D:\Apache24\user.passwd"⽣成密碼檔案要存放的路徑,admin是使用者名稱,然後輸入2次密碼,這樣就OK了,然後重啟服務。 6.在linux下使⽤用curl進⾏行測試, curl -T dtwpc.dat -u admin:123456

http://192.168.20.18:8181/upload/

配置時遇到的錯誤及解決方法:error.log:[Fri Jan 30 13:38:40 2009] [error] [client 192.168.123.123] The locks could not be queried for verification against a possible "If:" header. [500, #0][Fri Jan 30 13:38:40 2009] [error] [client 192.168.123.123] Could not open the lock database. [500, #400][Fri Jan 30 13:38:40 2009] [error] [client 192.168.123.123] (17)File exists: Could not open property database. [500, #1]

問題原因:在配置WebDav時,在配置httpd-dav.conf檔案時,追加了下面 的內容,卻沒有建立此⽂件,並修改其許可權DavLockDB "/usr/local/apache2/var/DavLock" 解決辦法:按照以上DavLockDB的目錄,建立⽂件夾與檔案。 1.在路徑:/usr/local/apache2/ 建立資料夾 var 2.在資料夾var中建立檔案DavLock

出現錯誤資訊:301 Moved Permanently 問題原因:如果你訪問的伺服器的主機名和在Apache配置⽂件⾥面定義 的ServerName不一樣,那麼當產⽣一個引用自身的URL請求的時候, Apache會根據UseCanonicalName屬性的設定來把你的請求重定向到⼀個新的主機名,⽐如你訪問⼀個目錄卻沒有加上尾部的斜槓,這樣的 話,Apache⾸先會在原始面上要求驗證,然後執⾏重定向,因為主機 名變了,所以Apache在新主機名上的面再要求驗證,就出現了兩次要求驗證。解決辦法:1.每次訪問目錄的時候都要加上尾部的斜槓; 2.使用Apache配置⽂件⾥面定義的ServerName來訪問,或者在Apache 配置⽂件⾥面設定UseCanonicalName off。

啟動Apache時出現錯誤error.log:AH00558: httpd: Could not reliably determine the server's fully qualified domain

name, using fe80::d9c3:303e:7b2b:4e34. Set the 'ServerName' directive globallyto suppress this message問題原因:這是由於沒有設定ServerName 解決辦法:開啟httpd.conf⽂檔案,找到ServerName,把"#"去掉就好了

Apache中⽂文⼿手冊2.2版本:http://lamp.linux.gov.cn/Apache/ApacheMenu/ index.html


2Mac OS 下配置Apache做檔案伺服器

Mac自帶了Apache環境。

開啟apache命令:sudo apachectl start

關閉apache命令:sudo apachectl stop

重啟apache命令:sudo apachectl restart


啟動Apache

開啟“終端(terminal)”,輸入 sudo apachectl -v,(可能需要輸入機器祕密)。如下顯示Apache的版本

接著輸入 sudo apachectl start,這樣Apache就啟動了。開啟Safari瀏覽器位址列輸入 “http://localhost”,可以看到內容為“It works!”的頁面。其位於“/Library(資源庫)/WebServer/Documents/”下,這就是Apache的預設根目錄。

Apache的安裝目錄在:/etc/apache2/,etc預設是隱藏的。有三種方式檢視:

dock下右鍵Finder,選擇"前往資料夾",輸入"/etc"

在finder下----》前往---》前往資料夾,然後輸入/etc

可以在terminal 輸入 "open /etc"


設定虛擬主機


在終端執行“sudo vi /etc/apache2/httpd.conf”,開啟Apche的配置檔案

在httpd.conf中找到“#Include /private/etc/apache2/extra/httpd-vhosts.conf”,去掉前面的“#”,儲存並退出。

執行“sudo apachectl restart”,重啟Apache後就開啟了虛擬主機配置功能。

執行“sudo vi /etc/apache2/extra/httpd-vhosts.conf”,就開啟了配置虛擬主機檔案httpd-vhost.conf,配置虛擬主機了。需要注意的是該檔案預設開啟了兩個作為例子的虛擬主機:

<VirtualHost *:80>

    ServerAdmin webmaster@dummy-host.example.com

    DocumentRoot "/usr/docs/dummy-host.example.com"

    ServerName dummy-host.example.com

    ErrorLog "/private/var/log/apache2/dummy-host.example.com-error_log"

    CustomLog "/private/var/log/apache2/dummy-host.example.com-access_log" common

</VirtualHost>


<VirtualHost *:80>

    ServerAdmin webmaster@dummy-host2.example.com

    DocumentRoot "/usr/docs/dummy-host2.example.com"

    ServerName dummy-host2.example.com

    ErrorLog "/private/var/log/apache2/dummy-host2.example.com-error_log"

    CustomLog "/private/var/log/apache2/dummy-host2.example.com-access_log" common

</VirtualHost> 

而實際上,這兩個虛擬主機是不存在的,在沒有配置任何其他虛擬主機時,可能會導致訪問localhost時出現如下提示:


Forbidden

You don't have permission to access /index.php on this server

最簡單的辦法就是在它們每行前面加上#,註釋掉就好了,這樣既能參考又不導致其他問題。


增加如下配置

<VirtualHost *:80>

    DocumentRoot "/Library/WebServer/Documents"

    ServerName localhost

    ErrorLog "/private/var/log/apache2/localhost-error_log"

    CustomLog "/private/var/log/apache2/localhost-access_log" common

</VirtualHost> 


<VirtualHost *:80>

    DocumentRoot "/Users/snandy/work"

    ServerName mysites

    ErrorLog "/private/var/log/apache2/sites-error_log"

    CustomLog "/private/var/log/apache2/sites-access_log" common

    <Directory />

                Options Indexes FollowSymLinks MultiViews

                AllowOverride None

                Order deny,allow

                Allow from all

      </Directory>

</VirtualHost> 

儲存退出,並重啟Apache。


執行“sudo vi /etc/hosts”,開啟hosts配置檔案,加入"127.0.0.1 mysites",這樣就可以配置完成sites虛擬主機了,可以訪問“http://mysites”了,在10.8之前Mac OS X版本其內容和“http://localhost/~[使用者名稱]”完全一致。

注意,記錄log的“ErrorLog "/private/var/log/apache2/sites-error_log"”也可以刪掉,但記錄日誌其實是一個好習慣,在出現問題時可以幫助我們判斷。如果保留這些log程式碼,一定log檔案路徑都是存在的,如果隨便修改一個不存在的,會導致Apache無法服務而沒有錯誤提示,這個比較噁心。


配置好以上資訊,進入/Library/WebServer/Documents目錄,新建video資料夾,放若干視訊到video資料夾下。在瀏覽器輸入http://localhost/video/huidaoguoqu.mp4或者http://本機ip/video/huidaoguoqu.mp4,這時就可以正常訪問或者下載該視訊了。