2018
Apr
24

ffmpeg 是一個免費的影片編輯 Library,使用前要先編譯安裝它,首先我們先安裝好 Docker ,利用 Docker 將 ffmpeg 安裝在 centos 6 ,這樣就能在 Windows, Mac, Linux 任何系統下使用 ffmpeg , 下面這個是我的 Dockerfile 設定。

Dockerfile
  1. FROM centos:6
  2. RUN yum install gcc gcc-c++ make cmake -y
  3.  
  4. RUN yum install ncurses-devel -y
  5. RUN yum upgrade ncurses-libs ncurses-term ncurses-devel -y
  6. RUN ldconfig
  7.  
  8. RUN yum install -y sudo wget telnet openssh-server vim git ncurses-libs ncurses-term screen
  9. RUN yum install -y libX11-devel xorg-x11-server-Xvfb
  10. RUN cd /root && wget http://pkgrepo.linuxtech.net/el6/release/x86_64/libfaac-devel-1.28-3.el6.x86_64.rpm
  11. RUN cd /root && wget http://pkgrepo.linuxtech.net/el6/release/x86_64/libfaac-1.28-3.el6.x86_64.rpm
  12. RUN cd /root && wget http://pkgrepo.linuxtech.net/el6/release/x86_64/libx264_125-0.125-0.20121107.1.el6.x86_64.rpm
  13. RUN cd /root && wget http://pkgrepo.linuxtech.net/el6/release/x86_64/libx264-devel-0.125-0.20121107.1.el6.x86_64.rpm
  14. RUN cd /root; rpm -ivh --force *.rpm
  15.  
  16. RUN cd /root && wget http://ffmpeg.org/releases/ffmpeg-3.4.tar.gz
  17. RUN cd /root ; tar -zxvf ffmpeg-3.4.tar.gz
  18. RUN cd /root/ffmpeg-3.4; \
  19. ./configure --prefix=/usr/local/ --disable-yasm --enable-avisynth --enable-nonfree --enable-libx264 --enable-gpl ; \
  20. 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
  1. cat video1.ts video2.ts > video.ts
  2. $dockerFfmpeg ffmpeg -i video.ts video.mp4

將 mov 轉成 gif

Example
  1. ffmpeg -i input.mov -vf "fps=10,scale=720:460:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif

回應 (Leave a comment)