FFmpeg几种常见视频编辑操作总结

Posted 老樊Lu码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FFmpeg几种常见视频编辑操作总结相关的知识,希望对你有一定的参考价值。

1.视频切片,那么每隔50秒裁剪为一个文件

ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:00:30 -f segment output%03d.mp4

2.视频抽帧,在视频文件第15 秒位置,提取一张图片

ffmpeg -i input.mp4 -r 0.1 -t 20 image%3d.jpg

3.为视频打上水印

ffmpeg -i sub_video3.mp4 -vf drawtext="fontfile=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf:text='Watermark Text':fontsize=20:fontcolor=red:x=100:y=100" with_text3.mp4

vf 是视频过滤器;此处调用 drawtext 进行文本绘制。

  • fontfile:指定字体文件;
  • text:指定水印文字,utf8字符均支持;
  • fontsize:字体大小;
  • fontcolor:字体颜色;
  • x, y :指定文字放置在画面的位置。

4.给视频加上时间戳

如果能给视频文件添加一个时间戳,动态展示播放,会是一种很好的播放体验。思考一下,其实打时间戳,与在画面绘制文本原理其实是一致的。ffmpeg 提供了 timecode 用于展示实时的时间。

ffmpeg -y -i input.mp4 -vf "drawtext=fontcolor=white:fontsize=16:fontfile=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf:box=1:boxcolor=black@0.3:x=50:y=20:timecode='00\\:01\\:00\\;02':rate=30000/1001" out.mp4

上面的指令,是从 01:00 位置开始显示时间戳。

5. 视频打上时间戳,自定义格式

这是第5条的加强版,使用灵活的自定义时间格式进行 overlay。

ffmpeg -i video.mp4 -vf drawtext="fontfile=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf:text='%T %D':x=10: y=10: fontsize=24: fontcolor=black" -vcodec libx264 -preset fast -crf 34 -threads 0 strftime.mp4

在本实例中,我们使用了格式化时间文本输出,同时为了优化CPU处理速度,手动选择了视频编码器 libx264,并且指定自动使用优化的多线程。

6.加强难度:耦合多路输入,并配上字幕

输入信号可以有多路,支持字幕需要引入字幕文件。

ffmpeg -i in_video.avi -c:v libx264 -vpre ipod640 -s 480x240 -b 256k -map 0:0 -c:a libfaac -ar 48000 -ab 128k -ac 2 -map 0:1 -i in_subtitles.srt -c:s copy -map 1:2 out_video_with_titles.m4v

7.保留原声合并音(视)频

ffmpeg -i {$input} -i {$addFilePath} -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -crf {$this->crf} -preset {$this->preset} {$output}

注意:inputs=输入流数量,duration=决定流的结束(longest最长输入时间,shortest最短,first第一个输入持续的时间),dropout_transition= 输入流结束时,容量重整时间

8.截取时间段内的音频

ffmpeg -ss {$startTime} -i {$input} -to {$endTime} -c copy -copyts {$outputPath}

ffmpeg -ss {$startTime} -i {$input} -t {$duration} -c copy {$outputPath}

如果你仅仅在输入文件之前( -i 之前)指定了 ss 选项,那么时间戳会被重置为 0,此时选项 t 和选项 to 产生的效果一样。

如:ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy cut.mp4

ffmpeg -i video.mp4 -ss 00:01:00 -to 00:02:00 -c copy cut.mp4

上面例子中,第一个命令会得到从 00:01:00 到 00:03:00 的片断,而第二个命令会真正得到从 00:01:00 到 00:02:00 的片断。

9.去除音视频的原声

ffmpeg -i {$input} -c:v copy -an {$output}

-c:v copy 表示复制视频,-an 表示不需要音频。

10.为不带音频的视频文件添加音频

ffmpeg -i {$input} -i {$audio} {$output}

#0:0 表示视频流,#0:1 表示音频流。该命令只适用于给音频流为空的视频文件添加音频流。

11.生成指定长度的空白音频

ffmpeg -f lavfi -i aevalsrc=0 -t {$seconds} -q:a 9 -ac 1 -ar 16000 -acodec pcm_s16le {$output}

12.视频转音频,wav 格式

ffmpeg -i {$input} -vn -ar 16000 -ac {$channel} -f wav {$output}

-vn 表示不需要视频。

13.生成视频封面图

ffmpeg -ss 00:00:00 -t 00:00:00.001 -i {$input} -r 1 -f image2 {$output}

14.改变音频文件的音量

ffmpeg -i {$input} -filter: volume={$multiple} -y {$output}

15.获取音视频时长

ffmpeg -i {$input} 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//

通过命令行命令,搜索、截取出 00:00:00 格式的音视频时长。

16.获取视频帧图

ffmpeg -i {$input} -vf scale=160:-1 -r {$numPerSecond} -start_number 000000 {$dir}/%11d.png

-start_number 设置输出文件名开始的数字。

17.修改视频分辨率5

ffmpeg -i {$input} -vf scale=iw*{$multiple}:ih*{$multiple} -crf {$this->crf} -preset {$this->preset} {$output}

-vf 表示滤镜。

scale 为滤镜里的缩放功能。

iw/ih 表示原始尺寸的大小。

scale=-1:ih*2 表示高度乘 2,宽度等比缩放。

pass 压制视频可自定义码率6 = 可自定义大小

ffmpeg -i {$input} -strict -2 -passlogfile {$dir} -vb {$bitRate}k -pass 1 -f mp4 -y /dev/null

ffmpeg -i {$input} -strict -2 -passlogfile {$dir} -vb {$bitRate}k -pass 2 -f mp4 {$output}

18.两条命令可以分开执行,也可以用 && 连接一起执行。

-strict -2 -passlogfile {$dir} 用于指定生成中间临时文件的目录。

-vb 可理解为 video bitrate。

19.生成纯色视频

ffmpeg -f lavfi -i color=white:1280*720:d=10 -format rgb32 -f matroska -vcodec libx264 -b:v 2000k color.mp4

20.循环图片生成视频

ffmpeg -stream_loop {$frame} -i {$input} {$output}

 

 

 

 

 

以上是关于FFmpeg几种常见视频编辑操作总结的主要内容,如果未能解决你的问题,请参考以下文章

Android 集成 FFmpeg 轻松实现一个音视频编辑 App

python也能玩视频剪辑!moviepy操作记录总结

仅使用 HTML、CSS 和 Javascript 进行视频编辑 [关闭]

音视频基本概念和FFmpeg的简单入门

ffmpeg常见用法总结

当 ffmpeg 中的音频较长时,将黑帧附加到视频中