最近用ffmpeg进行了很多视频操作,现在记录下来备忘。

ffmpeg :A complete, cross-platform solution to record, convert and stream audio and video.

ffmpeg 分割视频

ffmpeg -i input.flv -ss 00:00:50 -t 00:10:00 -c copy output.flv

其中-ss后接开始时间-t后接持续时间。-c copy表示不经转码,直接进行流复制。

ffmpeg 合并视频

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

其中list.txt为视频列表文件

file 'a1.mp4'
file 'a2.mp4'

ffmpeg 转码(编解码)

目前常见的视频编码是H264等,但H265编码的视频也逐渐多起来。H265是更为先进的编码方式,可以用较小的文件大小编码更清晰的视频,唯一缺点是编码慢,使用libx265进行编码慢到怀疑人生,新的N卡已经支持硬编码,旧的不行。依据使用经验,在默认参数下可以减小到原来的20%,但速度只有2.5x左右。

可以用ffmpeg -codecs查看可用的编解码器。
其中H264部分的输出。

 DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_crystalhd h264_v4l2m2m h264_vdpau h264_cuvid ) (encoders: libx264 libx264rgb h264_nvenc h264_omx h264_v4l2m2m h264_vaapi nvenc nvenc_h264 )
ffmpeg -i input.flv -c:v libx265 out.mp4

使用N卡加速H264编解码,使用ffmpeg -hwaccels查看可用的硬件加速。

ffmpeg -hwaccel cuvid -i input.mp4 -c:v h264_cuvid -c:v h264_nvenc output.np4