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