2018
Apr
24
ffmpeg 是一個免費的影片編輯 Library,使用前要先編譯安裝它,首先我們先安裝好 Docker ,利用 Docker 將 ffmpeg 安裝在 centos 6 ,這樣就能在 Windows, Mac, Linux 任何系統下使用 ffmpeg , 下面這個是我的 Dockerfile 設定。
Dockerfile
- FROM centos:6
- RUN yum install gcc gcc-c++ make cmake -y
- RUN yum install ncurses-devel -y
- RUN yum upgrade ncurses-libs ncurses-term ncurses-devel -y
- RUN ldconfig
- RUN yum install -y sudo wget telnet openssh-server vim git ncurses-libs ncurses-term screen
- RUN yum install -y libX11-devel xorg-x11-server-Xvfb
- RUN cd /root && wget http://pkgrepo.linuxtech.net/el6/release/x86_64/libfaac-devel-1.28-3.el6.x86_64.rpm
- RUN cd /root && wget http://pkgrepo.linuxtech.net/el6/release/x86_64/libfaac-1.28-3.el6.x86_64.rpm
- RUN cd /root && wget http://pkgrepo.linuxtech.net/el6/release/x86_64/libx264_125-0.125-0.20121107.1.el6.x86_64.rpm
- RUN cd /root && wget http://pkgrepo.linuxtech.net/el6/release/x86_64/libx264-devel-0.125-0.20121107.1.el6.x86_64.rpm
- RUN cd /root; rpm -ivh --force *.rpm
- RUN cd /root && wget http://ffmpeg.org/releases/ffmpeg-3.4.tar.gz
- RUN cd /root ; tar -zxvf ffmpeg-3.4.tar.gz
- RUN cd /root/ffmpeg-3.4; \
- ./configure --prefix=/usr/local/ --disable-yasm --enable-avisynth --enable-nonfree --enable-libx264 --enable-gpl ; \
- make ;
編輯影片
安裝好 ffmpeg 後,就可以啟動 docker 來編輯影片,像下面這個指令,先 mount /Users/puritys/Documents/ 這個目錄到 /temp_dir ,然後再用 -w /temp_dir
切換到 docker 路徑到 /temp_dir,後面的 ffmpeg ... 則是執行 ffmpeg 程式。
docker run -it --rm -v /Users/puritys/Documents/:/temp_dir -w /temp_dir images/ffmpeg ffmpeg...
接下來的指令我就省去啟動 docker 的指令,改用 $dockerFfmpeg
代替。
將 flv 影片格式轉成 mp4
$dockerFfmpeg ffmpeg -i test.flv -acodec copy -vcodec copy result.mp4
修改影片尺寸
參數 scale=640:360 可以把影片壓縮成寬 640 ,高 360 ,壓完後可以有效的降低影片容量。
$dockerFfmpeg ffmpeg -i test.flv -vf scale=640:360 result.mp4
加速影片
參數 "setpts=0.5*PTS" 可以加快 2 倍,加速後聲音就沒有用了,所以要再補上參數 -an
移除聲音 audio。
$dockerFfmpeg ffmpeg -i test.flv -filter:v "setpts=0.5*PTS" -an result.mp4
Crop:切割影片
用參數 "crop=width:height:x:y" ,代表從 x,y 這點開始計算,切割寬 width ,高 height 。
$dockerFfmpeg ffmpeg -filter:v "crop=90:90:0:0" -i test.flv result.mp4
ts: Transport stream to mp4
Example
- cat video1.ts video2.ts > video.ts
- $dockerFfmpeg ffmpeg -i video.ts video.mp4
將 mov 轉成 gif
Example
- ffmpeg -i input.mov -vf "fps=10,scale=720:460:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif