ffmpeg 视频处理常用命令

ffmpeg命令的一般结构如下,需要注意的是全局选项影响所有输入和输出:

    常用命令选项

    -y 覆盖视频

    -n 不覆盖视频

    -i 输入

    -t 时间

    -vf 音频滤镜

    -af 视频滤镜

    -r 指定帧率(帧速率是编码成视频文件的每秒帧数)

    -f 指定格式

 

1.视频格式转换

    ffmpeg -i video.flv video.mp4

    指定编码器转换格式

    ffmpeg -i video.flv -c:v libx264 -c:a libfaac video.mp4

2.音视频的提取和合并

    从视频中提取aac

    ffmpeg -i video.mp4 -vn -acodec copy output.aac

    从视频中提取h264

    ffmpeg -i video.mp4 -vcodec copy -an output.h264

    提取视频

    ffmpeg -i test.mp4 -vcodec copy -an test2.mp4(使用流拷贝速度很快)

    ffmpeg -i test.mp4 -an test2.mp4(效果同上,但是需要编码解码速度比较慢)

    -an  禁用音频

    -vcodec copy  拷贝视频流

    提取音频为mp3

    ffmpeg -i test.mp4 -vn -acodec copy testaac

     ffmpeg -i test.mp4 -vn test.mp3

    -vn  禁用视频流

    关掉视频原声与mp3音乐合成新的视频

    ffmpeg -i scenery.mp4 -i music.mp3 -map 0:v -vcodec copy -map 1:a -acodec copy video_music.mp4

3.截取视频

    截取视频的 5-25秒

    -ss 开始时间

    -t截取时间

    ffmpeg -i test.mp4 -ss 5 -t 20 t.mp4

4.视频分片

    把视频切为每10秒一段

    ffmpeg -i test.mp4 -c copy -map 0 -f segment -segment_time 10 video/part-%d.mp4

5.调整视频分辨率

    1.通过 –s改变视频宽高

    ffmpeg -i video3.mp4 -s 320*240 s.mp4

    2.通过scale滤镜进行缩放

    ffmpeg -i video3.mp4  -vf scale=320:240 scale.mp4

6.视频裁剪

    Crop = w:h:x:y 宽度:高度:x:y(x,y如果不写则从中心裁剪)

    ffmpeg -i video.mp4 -vf crop=iw/2:ih:0:0 crop.mp4

7.视频填充

    填充视频意味着向视频帧添加额外的区域以包含额外的内容。当输入应在具有不同宽高比的显示器上播放时, 通常需要填充视频

    ffmpeg -i test.jpg -vf pad=2*iw:2*ih:30:30 framed_photo.jpg

8.视频与图片的转换

    视频转为图片

    img2为图片的存储目录,img-%3d.jpg命名规则

    -r帧率 -f格式

    ffmpeg -i scenery.mp4 -r 2 -f image2 img2/img-%3d.jpg

    将图片转换为视频

    ffmpeg -f image2 -i img/img2%4d.jpg -r 25 video_img.mp4

   视频生成GIFffmpeg -i video.mp4 -pix_fmt rgb24 video.gif

    定时截图

    ffmpeg -i video.mp4 -ss 00:00:7.43 -vframes 1 out.png

    每秒生成一个张图片

    ffmpeg -i scenery.mp4 -vf fps=1 out%03d.png

    每分钟生成一张图片

    ffmpeg -i scenery.mp4 -vf fps=1/60 out%03d.png

    每个I帧生成一张图片

    ffmpeg -i scenery.mp4 -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr thumb%04d.png

9.水印处理 添加水印一般使用 overlay

    文字水印

    x:离左上角的横坐标

    y: 离左上角的纵坐标

    x=0:y=0  左上角

    x=0:y=h-th 左下角

    x=w-tw:y=0 右上角

    x=w-tw:y=h-th 右下角

    生成滚动文字例子

    ffmpeg -y -i video.mp4  -vf      drawtext=“fontfile=fonts/Medium.ttf:text=‘hello’:x=90+t*20:y=55:fontcolor=#ffffff:fontsize=25” drawtext.mp4

    横向滚动 x+t*n   从左往右滚动,n越大滚动越快

    x-t*n    从右边到左边滚动

    垂直滚动 y+t*n

    在视频右上角添加一个gif图片

    http://ffmpeg.org/ffmpeg-all.html#toc-gif-1

    //-ignore_loop 0 使gif循环播放

    //=shortest=1使视频结束播放

    ffmpeg -i tc.mp4 -ignore_loop 0  -i cat.gif -filter_complex "overlay=x=W-w:y=0:shortest=1”  test.mp4

    跑马灯效果

    分析:如果時間大於0,那麼就開始從子內容的寬度的x-w位置開始,然後每一幀n計數,幀數n除以(背景W+子內容背景w)求餘數+1設置為x坐標,即可循環

    ffmpeg -i video2.mp4 -i logo.png -filter_complex "[1:v]scale=50*50[logo];[0:v]scale=200*200[bg];[bg][logo]overlay=x='if(gte(t,0),-w+(mod(n,W+w))+5,NAN)':y=0” output.mp4

    //问题,调节不了水印移动速度

    添加弹幕效果

    在视频中同时加入多个文字和多个图片,使用到多个滤镜就需要使用滤镜链,而指定输入输出标签就形成滤镜链图

    ffmpeg -i video.mp4 -i logo.png -i logo1.png -filter_complex  "[1:v]scale=30:30[img1];[2:v]scale=30:30[img2];[0:v][img1]overlay=(main_w-overlay_w)/2+t*100:(main_h-overlay_h)/2[bkg];[bkg][img2]overlay=0:0",drawtext="fontfile=fonts/Medium.ttf:text='hello':fontcolor=white:fontsize=50:x='if(between(t,2,10),150,NAN)':y=120" -y output.mp4

    解析:

    1.[0:v]指定流 ,0表示第0个文件,v表示操作对象里的视频信息。

    2.[img1]是对scale滤镜的处理结果命名标记标签,[0:v][img1]表示将scale缩略处理后的图片覆盖到第0个文件即视频上,类似这个包含链接输入输出标记如[img1]的就组成滤镜链图filtergraphs

    3.由于使用overlay添加图片水印,使用drawtext添加文字水印,这个两个滤镜间使用逗号,分割开来,组成一个滤镜链

    4.overlay中t*100,表示从x轴以100的速度移动

    5.x='if(between(t,2,10),150,NAN)’表示在2,10秒的区间显示字幕。if(条件,条件为true时的值,条件为false时的值)

11.视频图片的旋转

    把图片旋转45度放到视频中心

     ffmpeg -i scenery.mp4 -i logo.png  -filter_complex "[1:v]rotate='45*PI/180:ow=hypot(iw,ih):oh=ow:c=none'[rotate];[0:v][rotate]overlay=(W-w)/2:(H-h)/2" rotate.mp4 -y

    解析

    c=none这样就不会出现黑色背景

    ow=hypot(iw,ih):hypot(x, y) 计算斜边(直角三角形最长边)等效于sqrt(xx + yy),如果不设置ow,oh则旋转之后溢出边框部分之间被裁剪掉了

    在旋转角度中加入t参数即可实现随着时间而旋转  rotate='2*PI*t

    ffmpeg -i scenery.mp4 -filter_complex  "rotate='2*PI*t:ow=min(iw,ih)/sqrt(2):oh=ow:c=none’” test.mp4

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(ffmpeg)