常用命令如下:

转换视频格式

ffmpeg -i input.mp4 output.avi

转换音频格式

ffmpeg -i input.mp3 output.wav

裁剪视频

ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:20 -c:v copy -c:a copy output.mp4

调整视频分辨率

ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4

调整视频帧率

ffmpeg -i input.mp4 -r 30 output.mp4

提取视频关键帧

ffmpeg -i input.mp4 -vf "select='eq(pict_type\,I)'" -vsync vfr keyframes_%04d.jpg

分离视频流和音频流

ffmpeg -i input.mp4 -c:v copy -an video.mp4

ffmpeg -i input.mp4 -vn -c:a copy audio.mp3

合并视频和音频

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 output.mp4

添加水印

ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4

调整音频音量

ffmpeg -i input.mp3 -af volume=2 output.mp3

添加字幕

ffmpeg -i input.mp4 -vf subtitles=subtitles.srt output.mp4

合并多个视频文件

ffmpeg -f concat -i filelist.txt -c copy output.mp4

调整视频播放速度

ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" output.mp4

生成视频缩略图

ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 thumbnail.jpg

添加背景音乐

ffmpeg -i input.mp4 -i background_music.mp3 -filter_complex "[0:a][1:a]amix=inputs=2:duration=first" -c:v copy output.mp4

调整视频亮度和对比度

ffmpeg -i input.mp4 -vf eq=brightness=0.2:contrast=1.5 output.mp4

合成图片序列为视频

ffmpeg -framerate 30 -i image_%04d.jpg -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4

将视频转换为 GIF

ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" -c:v gif output.gif

将视频转换为黑白

ffmpeg -i input.mp4 -vf hue=s=0 output.mp4

将视频旋转90度

ffmpeg -i input.mp4 -vf "transpose=1" -c:a copy output.mp4

借助ffmpeg工具的能力,来实现以下从视频中,找出静音的片段。ffmpeg命令行如下:

ffmpeg -i input.mp4 -af silencedetect=n=-120dB:d=5 -f null -

-i:表示指定输入的音视频文件。

-af:表示使用音频简单过滤器图(audio simple filtergraph)。

silencedetect:表示使用的过滤器图是静音检测过滤器。当此过滤器检测到输入音频音量小于或等于噪声容限值且持续时间大于或等于检测到的最小噪声持续时间时,该过滤器会记录一条消息。

n:noise,表示设置噪声容限,可以以 dB或幅度比为单位指定。默认值为 -60dB,或 0.001。此处表示设置噪声容限为-120db,即低于-120分贝的音频被认为是静音。

d:duration,设置通知前的静音持续时间(默认为 2 秒)。此处设置的时间为5秒,表示静音持续5秒,则发送通知

-f:force format,强制输出的文件格式。此处为null,表示不产生实际输出文件,并将输出重定向到标准输出流。

-:最后的一个“-”表示将输出重定向到标准输出流,也就是终端控制台中。

找个视频文件,按照以上命令执行后,控制台输出如下:

...
[silencedetect @ 0x7fb678111c80] silence_start: 0.30 bitrate=N/A speed=16.4x    
[silencedetect @ 0x7fb678111c80] silence_end: 2.77132 | silence_duration: 2.47132 frame= 2568 fps=2511 q=-0.0 size=N/A time=00:01:25.63 bitrate=N/A speed=83.7x   frame= 4076 fps=2677 q=-0.0 size=N/A time=00:02:15.90 bitrate=N/A speed=89.2x   frame= 5097 fps=2520 q=-0.0 size=N/A time=00:02:49.93 bitrate=N/A speed=  84x   
[silencedetect @ 0x7fb678111c80] silence_start: 180.05 frame= 5564 fps=2486 q=-0.0 Lsize=N/A time=00:03:05.52 bitrate=N/A speed=82.9x     video:2565kB audio:31960kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[silencedetect @ 0x7fb678111c80] silence_end: 185.527 | silence_duration: 5.47698
...

从控制台输出可看出,该视频文件共有2段静音片段,第一段从0.30s开始,到2.77132结束,持续2.47132s;第二段从180.05s开始,到185.527结束,持续5.47698s

青い空