1. 程式人生 > >ffmpeg在am335x上的移植

ffmpeg在am335x上的移植

交叉編譯工具:arm-linux-gcc

一.先下載一下檔案

1.yasm-1.2.0.tar.gz

2.x264-snapshot-20140424-2245.tar.bz2

3.xvidcore-1.1.3.tar.gz

4. SDL-1.2.15.tar.gz

5.  ffmpeg-1.2.2.tar.gz

連結如下

1.yasm-1.2.0.tar.gz

http://download.csdn.net/detail/zengzhihao/7677671

2.x264-snapshot-20140424-2245.tar.bz2

http://download.csdn.net/detail/zengzhihao/7677707

3.xvidcore-1.1.3.tar.gz

http://download.csdn.net/detail/zengzhihao/7677717

4. SDL-1.2.15.tar.gz

http://download.csdn.net/detail/zengzhihao/7677691

5.  ffmpeg-1.2.2.tar.gz

http://download.csdn.net/detail/zengzhihao/7677745

二.逐個編譯上面原始檔

/usr/local/ffmpeg_arm:依賴的庫檔案目錄,目標目錄,庫目錄

1.yasm-1.2.0.tar.gz

tar -zxvf yasm-1.2.0.tar.gz && cd yasm-1.2.0 && ./configure --prefix=/usr/local/ffmpeg_arm --host=arm-linux && make&&make install && cd ../

2.x264-snapshot-20140424-2245.tar.bz2

tar -jxvf x264-snapshot-20140424-2245.tar.bz2 && cd x264-snapshot-20140424-2245 && ./configure  --enable-shared --prefix=/usr/local/ffmpeg_arm --host=arm-linux --cross-prefix=arm-linux- --disable-asm && make && make install && cd ../

3.xvidcore-1.1.3.tar.gz

3.1

tar -zxvf xvidcore-1.1.3.tar.gz && cd xvidcore-1.1.3/build/generic

3.2
vi configure
修改$CC為gcc
4361         gcc -o gcc-ver test.c


3.3
./configure --prefix=/usr/local/ffmpeg_arm --host=arm-linux --target=arm-linux && make && make install && cd ../../../


4. SDL-1.2.15.tar.gz

tar -zxvf SDL-1.2.15.tar.gz && cd SDL-1.2.15 && ./configure --enable-shared --prefix=/usr/local/ffmpeg_arm --host=arm-linux  --disable-video-x11 --disable-input-tslib --disable-esd --disable-arts --disable-nasm  --disable-alsa   --disable-video-nanox --disable-video-qtopia --disable-video-photon  --disable-video-ggi --disable-video-svga --disable-video-aalib --disable-video-dummy --disable-video-dga --disable-arts && make && make install && cd ../

5.  ffmpeg-1.2.2.tar.gz

5.1
tar -zxvf ffmpeg-1.2.2.tar.gz && cd ffmpeg-1.2.2 


5.2


vi configure
修改configure的SDL_CONFIG
3973 SDL_CONFIG="${cross_prefix}sdl-config"

3973 SDL_CONFIG="/usr/local/ffmpeg_arm/bin/sdl-config"




5.3
 ./configure --cross-prefix=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux- --prefix=/usr/local/ffmpeg_arm --enable-shared --enable-cross-compile --arch=armv7   --target-os=linux --cc=arm-linux-gcc --enable-libxvid --enable-libx264 --enable-gpl --enable-pthreads   --disable-ffserver --enable-ffmpeg --disable-ffprobe --enable-ffplay  --enable-avfilter --disable-network  --enable-runtime-cpudetect --disable-indevs --ar=arm-linux-ar --ld=arm-linux-gcc --strip=arm-linux-strip --extra-cflags=-I/usr/local/ffmpeg_arm/include --extra-ldflags=-L/usr/local/ffmpeg_arm/lib




5.4 檢查ffplay是否包含"CONFIG_FFPLAY=yes" 沒有則說明有問題
vi config.mak


CONFIG_FFPLAY=yes


5.5
make && make install



6 拷貝/usr/local/ffmpeg_arm到開發板上執行


7 刪除多餘的檔案

 ffplay 使用示例

01.1) 播放 test.mp4 ,播放完成後自動退出02.ffplay -autoexit test.mp403.04.2) 以 320 240 的大小播放 test.mp405.ffplay -x 320 -y 240 test.mp406.07.3) 將視窗標題設定為 "myplayer",迴圈播放 2 08.ffplay -window_title myplayer -loop 2 test.mp409.10.4) 播放 雙通道 32K 的 PCM 音訊資料11.ffplay -f s16le -ar 32000 -ac 2 test.pcm

更多 ffplay 可用選項,可以使用 ffplay -h 獲取

所有的命令如下列表所示。

名稱

有引數

作用

x

Y

強制螢幕寬度

y

Y

強制螢幕高度

s

Y

強制螢幕大小

fs

N

全屏

an

N

關閉音訊

vn

N

關閉視訊

ast

Y

設定想播放的音訊流(需要指定流ID)

vst

Y

設定想播放的視訊流(需要指定流ID)

sst

Y

設定想播放的字幕流(需要指定流ID)

ss

Y

從指定位置開始播放,單位是秒

t

Y

播放指定時長的視訊

nodisp

N

無顯示螢幕

f

Y

強制封裝格式

pix_fmt

Y

指定畫素格式

stats

N

顯示統計資訊

idct

Y

IDCT演算法

ec

Y

錯誤隱藏方法

sync

Y

視音訊同步方式(type=audio/video/ext)

autoexit

N

播放完成自動退出

exitonkeydown

N

按下按鍵退出

exitonmousedown

N

按下滑鼠退出

loop

Y

指定迴圈次數

framedrop

N

CPU不夠的時候丟幀

window_title

Y

顯示視窗的標題

rdftspeed

Y

Rdft速度

showmode

Y

顯示方式(0 = video, 1 = waves, 2 = RDFT)

codec

Y

強制解碼器

專案組成

FFmpeg是一套可以用來記錄、轉換數字音訊、視訊,並能將其轉化為流的開源計算機程式。它包括了領先的音/視訊編碼庫libavcodec等。

libavformat:用於各種音視訊封裝格式的生成和解析,包括獲取解碼所需資訊以生成解碼上下文結構

和讀取音視訊幀等功能;

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

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

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

libpostproc:用於後期效果處理;

ffmpeg:該專案提供的一個工具,可用於格式轉換、解碼或電視卡即時編碼等;

ffsever:一個 HTTP 多媒體即時廣播串流伺服器;

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

4命令集

ffmpeg 命令集舉例

1.獲取視訊的資訊

ffmpeg -i video.avi

2.將圖片序列合成視訊

ffmpeg -f image2 -i image%d.jpg video.mpg

上面的命令會把當前目錄下的圖片(名字如:image1.jpg. image2.jpg. 等…)合併成video.mpg

3.將視訊分解成圖片序列

ffmpeg -i video.mpg image%d.jpg

上面的命令會生成image1.jpg. image2.jpg. …

支援的圖片格式有:PGM. PPM. PAM. PGMYUV. JPEG. GIF. PNG. TIFF. SGI

4.為視訊重新編碼以適合在iPod/iPhone上播放

ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320×180 -title X final_video.mp4

說明:

* 源視訊:source_video.avi

* 音訊編碼:aac

* 音訊位率:128kb/s

* 視訊編碼:mpeg4

* 視訊位率:1200kb/s

* 視訊尺寸:320 X 180

* 生成的視訊:final_video.mp4

5.為視訊重新編碼以適合在PSP上播放

ffmpeg -i source_video.avi -b 300 -s 320×240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4

說明:

* 源視訊:source_video.avi

* 音訊編碼:aac

* 音訊位率:32kb/s

* 視訊編碼:xvid

* 視訊位率:1200kb/s

* 視訊尺寸:320 X 180

* 生成的視訊:final_video.mp4

6.從視訊抽出聲音.並存為Mp3

ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3

說明:

* 源視訊:source_video.avi

* 音訊位率:192kb/s

* 輸出格式:mp3

* 生成的聲音:sound.mp3

7.將wav檔案轉成Mp3

ffmpeg -i son_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3

8.將.avi視訊轉成.mpg

ffmpeg -i video_origine.avi video_finale.mpg

9.將.mpg轉成.avi

ffmpeg -i video_origine.mpg video_finale.avi

10.將.avi轉成gif動畫(未壓縮)

ffmpeg -i video_origine.avi gif_anime.gif

11.合成視訊和音訊

ffmpeg -i son.wav -i video_origine.avi video_finale.mpg

12.將.avi轉成.flv

ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320×240 -f flv video_finale.flv

13.將.avi轉成dv

ffmpeg -i video_origine.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv

或者:

ffmpeg -i video_origine.avi -target pal-dv video_finale.dv

14.將.avi壓縮成divx

ffmpeg -i video_origine.avi -s 320×240 -vcodec msmpeg4v2 video_finale.avi

15.將Ogg Theora壓縮成Mpeg dvd

ffmpeg -i film_sortie_cinelerra.ogm -s 720×576 -vcodec mpeg2video -acodec mp3 film_terminate.mpg

16.將.avi壓縮成SVCD mpeg2

NTSC格式:

ffmpeg -i video_origine.avi -target ntsc-svcd video_finale.mpg

PAL格式:

ffmpeg -i video_origine.avi -target pal-svcd video_finale.mpg

17.將.avi壓縮成VCD mpeg2

NTSC格式:

ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg

PAL格式:

ffmpeg -i video_origine.avi -target pal-vcd video_finale.mpg

18.多通道編碼

ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2

19.從flv提取mp3

ffmpeg -i source.flv -ab 128k dest.mp3

5格式

支援的編碼

源自FFmpeg專案組的兩個視訊編碼

Snow

FFV1

支援的格式

ASF

AVI

BFI[7]

IFF[8]

RL2[9]

FLV

MXF, Material eXchange Format, SMPTE 377M

Matroska

Maxis XA[10]

MSN Webcam stream[11]

MPEG transport stream

TXD[6]

OMA[12]

GXF, General eXchange Format, SMPTE 360M

mov,mp4,m4a,3gp,

6協議

支援的協議

HTTP

RTP

RTSP

RealMedia RTSP/RDT

TCP

UDP

Gopher

RTMP

RTMPT, RTMPE, RTMPTE, RTMPS (via librtmp)

SDP

MMS over TCP