文章目录
1 提取音视频流
1.1 提取音频流
ffmpeg431.exe -i ande_302.mp4 -vn -acodec copy -f mp4 -y ande_302-vn.mp4
1.2 提取视频流
ffmpeg431.exe -i ande_302.mp4 -an -vcodec copy -f mp4 -y ande_302-an.mp4
选项详解:
- -i : 指定的文件。
- -vn:video no。
- -an:audio no。
- -acodec:audio codec。
- -vcodec:video codec。
- -f:指定封装格式。
- -y:直接覆盖。
另外补充个关于1080P和720P的概念:
- 1080P: 1920x1080。
- 720P: 1280x720 。
2 截取音视频片段
命令如下:
ffmpeg431.exe -i ande_302.mp4 -ss 10 -t 00:00:10 -c copy -f mp4 -y ande_302-ss10-t10.mp4
// 技巧:-ss 放到-i 前头,效率就会很高。
ffmpeg431.exe -ss 10 -i ande_302.mp4 -t 00:00:10 -c copy -f mp4 -y ande_302-ss10-t10.mp4
参数详解:
- -ss:start second。
- -t:time,截取多长时间。
- -c copy:直接复制,不经过重新编码(这样比较快)。
3 合并音视频
命令如下:
ffmpeg431.exe -i ande_302-an.mp4 -i ande_302-vn.mp4 -c copy -f mp4 ande_302-newfull.mp4
命令比较简单,没什么好解释的。
4 Libx265/Libxvid 重新编解码
Libxvid(iso+mpeg:mpeg1(vcd),2(dvd), 4(10:avc,h.264; 3:audio;4:video(xvid,vidx))
libmp3lame(iso,mpeg1, layer3)
libx264: itu(h.26x: 1,3,4,5),avc, AVC(H.264: libx264, openh264),advanced video coding
libx265: hevc(HEVC), high efficience video coding
ffmpeg431.exe -i ande_302.mp4 -acodec libmp3lame -vcodec libxvid -f mp4
ande_302-xvid-mp3.mp4
ffmpeg431.exe -i ande_302.mp4 -acodec libmp3lame -vcodec libx265 -f mp4
ande_302-xvid-mp3.mp4
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> mpeg4 (libxvid))
Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
5 添加图片水印
-vf : video filter
命令如下:
ffmpeg431.exe -i ande_302.mp4 -vf
"movie=head11.png[watermark2];[in][watermark2]overlay=100:150[out]" -vcodec libx264
-acodec aac -y ande_test_picwm2.mp4
对于水印的位置还可以使用如下方式:
- main_w(视频宽度), overlay_w(图片宽度),main_h(视频高度),overlay_h(图片高度)
ffmpeg431.exe -i ande_302.mp4 -vf
"movie=head11.png[watermark1];[in][watermark1]overlay=main_w-overlay_w-10:main_h-overlay_h-10[out]" -vcodec libx264 -acodec aac -y ande_test_picwm4.mp4
6 添加文字水印
6.1 添加静态文字水印
ffmpeg431.exe -i ande_302.mp4 -vf
"drawtext=fontfile=simhei.ttf:text='hello,ffmpeg':x=10:y=main_h-overlay_h-30:fontsize=35:fon
tcolor=red" -f mp4 -y ande_test_text1.mp4
ffmpeg431.exe -i ande_302.mp4 -vf
"drawtext=fontfile=simhei.ttf:text='hello,ffmpeg':x=10:y=10:fontcolor=#FF6600" -f mp4 -y
ande_test_text1.mp4
字体文件: 同路径。
文字:utf-8 编码。
6.2 文字跑马灯效果
drawtext 各个参数的含义详解:
- line_h, lh:the height of each text line,时间线
- main_h, h, H:the input height,输入视频的高度:像素
- main_w, w, W:the input width,输入视频的宽度:像素
- n:the number of input frame, starting from 0,第几帧
- rand(min, max):return a random number included between min and max,随机数
- mod(a, b):求余,a%b,5%2==>: 1
- sar:The input sample aspect ratio,输入采样的宽高比,yuv,像素的宽高比
- t:timestamp expressed in seconds, NAN if the input timestamp is unknown,时间戳,单位:秒
- text_h, th:the height of the rendered text,文本的高度:像素
- text_w, tw:the width of the rendered text,文本的宽度:像素
左到右:
ffmpeg431.exe -i ande_302.mp4 -vf "drawtext=fontfile=simhei.ttf:text='hello, 您 好
ffmpeg':x=(mod(2*n\,w+tw)-tw):y=10:fontcolor=#FF6600:fontsize=60" -f mp4 -y
ande_test_text3.mp4
右到左:
ffmpeg431.exe -i ande_302.mp4 -vf "drawtext=fontfile=simhei.ttf:text='hello, 您 好
ffmpeg':x=w-t*w/10:y=10:fontcolor=#FF6600:fontsize=60" -f mp4 -y ande_test_text4.mp4
6.3 文字每隔M秒显示N秒间隔显示效果
ffmpeg431.exe -i ande_302.mp4 -vf "drawtext=fontfile=simhei.ttf:text='hello, 您 好
ffmpeg':x=main_w-tw-50:y=10:enable=lt(mod(t\,5)\,2):fontcolor=#FF6600:fontsize=60" -f mp4
-y ande_test_text10.mp4
lt:letter than <
gt:greater than <
enable:可用
7 FFmpeg音视频特效处理
7.1 镜面倒影特效vflip
ffmpeg -i ande_302.mp4 -vf
"split[up][down];[up]pad=iw:ih*2[up];[down]vflip[down];[up][down]overlay=0:h" -y
output_vflip222.mp4
7.2 裁剪指定区域 crop
ffmpeg -i ande_302.mp4 -vf crop=400:400:0:0 -y ande_302-crop111.mp4
crop 的参数格式为 w:h: x:y,
- w、h 为输出视频的宽和高,
- x、y 标记输入视频中的某点,将该点作为基准点,向右下进行裁剪得到输出视频。
如果 x y 不写的话,默认居中剪切。
7.3 画中画 overlay
ffmpeg -i ande_302.mp4 -i aabbaaAV-small.mp4 -filter_complex
overlay=main_w-overlay_w-20:0 output_overlay333.mp4
overlay 技术又称视频叠加技术。overlay 视频技术使用非常广泛,常见的例子有,电视
屏幕右上角显示的电视台台标,以及画中画功能。
画中画是指在一个大的视频播放窗口中还存在一个小播放窗口,两个窗口不同的视频内
容同时播放。
overlay 技术中涉及两个窗口,通常把较大的窗口称作背景窗口,较小的窗口称作前景
窗口,背景窗口或前景窗口里都可以播放视频或显示图片。FFmpeg 中使用 overlay 滤镜可实现视频叠加技术。
描述:前景窗口(第二输入)覆盖在背景窗口(第一输入)的指定位置。
语法:overlay[=x:y[[:rgb={0, 1}]]
参数 x 和 y 是可选的,默认为 0。
参数 rgb 参数也是可选的,其值为 0 或 1,默认为 0。
参数说明:
- x 从左上角的水平坐标,默认值为 0
- y 从左上角的垂直坐标,默认值为 0
- rgb 值为 0 表示输入颜色空间不改变,默认为 0;值为 1 表示将输入的颜色空间设置为 RGB.
变量说明:如下变量可用在 x 和 y 的表达式中
- main_w 或 W 主输入(背景窗口)宽度
- main_h 或 H 主输入(背景窗口)高度
- overlay_w 或 w overlay 输入(前景窗口)宽度
- overlay_h 或 h overlay 输入(前景窗口)高度