这篇文章讲解 FFmpeg 命令行工具中使用高级特性、Web 音视频、调试和测试相关的功能。

Editing Video

高级特性

拼接视频文件

多个视频文件按顺序拼接在一起:

ffmpeg -i city.mp4 -i car.mp4 -filter_complex concat video.mp4

移除水印

通过 delogo 过滤器来处理:

ffmpeg -i eagles.mpg -vf delogo=x=700:y=0:w=100:h=50:t=3:show=1 nologo.mpg

修复抖动

通过 deshake 过滤器来处理:

ffmpeg -i travel.avi -vf deshake fixed_travel.avi

添加颜色框

通过 drawbox 过滤器来处理:

ffmpeg -i ship.avi -vf drawbox=x=150:w=600:h=400:c=yellow ship1.avi

帧数检测

ffmpeg -i city.mp4 -f null /dev/null

输出结果中 frame 就是帧数:

frame=  990 fps=833 q=-0.0 Lsize=N/A time=00:00:33.00 bitrate=N/A speed=27.8x
video:518kB audio:5684kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

检测 dark frames

通过 blackdetect 过滤器来处理:

ffmpeg -f lavfi -i mptestsrc -vf blackdetect -f sdl 'test'

通过 blackframe 过滤器来处理:

ffmpeg -f lavfi -i mptestsrc -vf blackframe -f sdl 'test'

选择特定的帧来输出

通过 select 过滤器来处理:

ffmpeg -i input.avi -vf select="gte(t\,20)*lte(t\,25)" output.avi

缩放视频

通过 setdar 或者 setsar 过滤器来设置屏幕高宽比进行缩放:

ffplay -i input.avi -vf setdar=16/9
ffplay -i input.avi -vf setsar=1.234

显示视频帧的详细信息

通过 showinfo 过滤器:

ffmpeg -report -f lavfi -i testsrc -vf showinfo -t 10 showinfo.mpg

音频频谱

通过 showspectrum 过滤器:

ffmpeg -i audio.mp3 -vf showspectrum audio_spectrum.mp4

音频波形显示

通过 showwaves 过滤器:

ffmpeg -i music.mp3 -vf showwaves waves.mp4

一次生成多个格式

ffmpeg -i clip.avi clip.flv clip.mov clip.mp3 clip.mp4 clip.webm

过滤器图使用额外媒体输入

ffmpeg -i video.mpg -vf movie=logo.png:sp=5[a];[in][a]overlay video1.mp4

Web 音视频

浏览器

主流浏览器对 H5 音视频格式的支持:

Web Browser Video

HTML5 Audio

<audio controls='controls' loop='loop'>
  <source src='music.mp3' type='audio/mpeg' />
  <source src='music.ogg' type='audio/ogg' />
  Audio element is not supported in your browser, please update.
</audio>

HTML5 Video

<video controls='controls' loop='loop' width='640' height='480'>
  <source src='videoclip.mp4' type='video/mp4' />
  <source src='videoclip.webm' type='video/webm' />
  video element is not supported in your browser, please update.
</video>

调试和测试

生成测试报告

带上 -report 参数就可以生成测试报告 ffmpeg-yyyymmdd-hhmmss.log:

ffmpeg -report -i live.mp4 -vf showinfo -t 10 showinfo.mpg

调试

带上 -debug 参数,后面再跟上具体类型:

ffmpeg -debug mmco -f lavfi -i mptestsrc -t 0.5 output.mp4

带上 -debug_ts 参数,在处理过程中会打印出时间戳信息:

ffmpeg -debug_ts -f lavfi -i mptestsrc -t 0.1 output.mp4

带上 -fdebug ts 参数,在处理过程中会打印出更多时间戳信息:

ffmpeg -fdebug ts -f lavfi -i mptestsrc -t 0.1 output.mp4