ffmpeg视频处理教程

1、ffmpeg简介

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。

视频采集功能:ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。

视频格式转换功能:ffmpeg视频转换功能。视频格式转换,比如可以将多种视频格式转换为flv格式,可不是视频信号转换 。ffmpeg可以轻易地实现多种视频格式之间的相互转换(wma,rm,avi,mod等),例如可以将摄录下的视频avi等转成视频网站所采用的flv格式。转码时可选命令非常多,编码器、视频时长、帧率、分辨率、像素格式、采样格式、码率、裁剪选项、声道数等等都可以自由选择:

视频截图功能:对于选定的视频,截取指定时间的缩略图。视频抓图,获取静态图和动态图,不提倡抓gif文件;因为抓出的gif文件大而播放不流畅。

给视频加水印功能:使用ffmpeg 视频添加水印(logo)。

2、ffmpeg常用功能

(1)查看视频信息:

ffmpeg -i video.avi
参数:
  -i:表示输入的源视频

这个命令可以查看视频时长,比特率,音频编码方式,音频比特率,视频编码方式,视频比特率,帧率,视频分辨率等信息。

(2)从视频中剪切出片段:

ffmpeg -i output.mp4 -ss 00:00:00 -c copy -to 00:00:10 output_10.mp4
参数:
  -ss:指定裁剪的开始时间;
  -to:指定裁剪的结束时间;
  -c:指定音频和视频的编码方式,这里为copy,表示目标视频和源视频相同,-c可以细分为图像-c:v和音频-c:a;

(3)视频片段合并 :

ffmpeg -f concat -i filelist.txt -c copy output.avi
参数:
  filelist.txt的内容为:
     file '001.avi'
     file '002.avi'
     file '003.avi' 

(4)从视频中提取音频:

ffmpeg -i video.mp4 -vn audio.mp3
参数:
  -vn:表示去掉视频

(5)从视频中提取无声视频:

ffmpeg -i video.mp4 -an output.mp4
参数:
  -an:表示去掉音频

(7)图像序列和音频合并成视频:

ffmpeg -r 30 -i image%d.jpg -b 200K output.mp4
参数:
  -r:指定视频的帧率,注意-r要放在-i前面;
  -b: 指定比特率;

图像有三种格式,分别是jpg,png和bmp,其中jpg压缩损失最大,图片最小,质量最差,bmp是没有任何压缩,图片最大,png介于两者之间。因此如果我们想要将分解的图像序列合成源视频的原样,最好采用bmp格式。

如果想合成MP4视频,图像格式只能为jpg,其它两种格式不能用;

png和bmp格式的图片可以合成avi格式的视频,但是不能合成MP4格式的;

(8)视频和音频合成视频:

ffmpeg -i input.mp4 -i audio.mp3 -c copy output.mp4

(9)调整视频帧率:

ffmpeg -i input.avi -c:a copy -r 30 output.mp4
参数:
  -r:指定帧率
  -c:a: 音频编码方式不变

(10)调整视频比特率:

比特率也是一个决定音视频总体质量的参数,它决定每个时间单位处理的bit数。比特率决定处理1s的编码流需要多少bits。

压缩前的每秒数据量(这里可以算出一个字节大小) = 帧率 × 分辨率;

压缩比 = 压缩前的每秒数据量 / 码率;

文件大小 = 比特率 × 视频时长;

比特率不是越大越好,也不是越小越好。比特率和分辨率有很大关系,一般情况下,分辨率越大,也要求比特率很大,分辨率很小,只需要很小的比特率就可以了。

ffmpeg -i file.avi -b 1.5M file.mp4
参数:
  -b:指定比特率,这里-b可以细分为音频比特率-b:a和视频比特率-b:v,-b则表示整体比特率;

(11)调整视频分辨率:

ffmpeg -i input.mp4 -vf scale=-1:360 -c:a copy output.mp4
参数:
  -vf:对视频进行过滤,-1表示原视频调整后不会变形

窄屏的分辨率和比特率配置如下:

宽屏的分辨率和比特率配置如下

(12)加快视频和音频的播放速度:

ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" output.mp4
参数:
  -vf:等价于-filter:v,即对视频进行过滤,这里提高视频为原来的两倍;
  -af:等价于-filter:a,即对音频进行过滤,这里提高音频为原来的两倍;

3、ffmpeg的GPU加速

ffmpeg可以使用GPU进行加速,只需要在编译时配置好驱动进行编译即可,具体教程参考这里。安装好GPU版本的ffmpeg之后,我们首先需要查询ffmpeg支持的硬件加速器:

ffmpeg -hwaccels
 
输出:
    Hardware acceleration methods:
    cuda
    cuvid

接着我们需要查看硬件加速器支持的编码器和解码器有哪些:

ffmpeg -codecs | grep cuvid
 
输出:
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
  configuration: --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp 
                 --extra-cflags=-I/usr/local/cuda-10.0/include --extra-ldflags=-L/usr/local/cuda-10.0/lib64
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
 DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_v4l2m2m h264_cuvid) 
                            (encoders: h264_nvenc h264_v4l2m2m nvenc nvenc_h264 )
 DEV.L. hevc                 H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_cuvid ) 
                            (encoders: nvenc_hevc hevc_nvenc )
 DEVIL. mjpeg                Motion JPEG (decoders: mjpeg mjpeg_cuvid )
 DEV.L. mpeg1video           MPEG-1 video (decoders: mpeg1video mpeg1_v4l2m2m mpeg1_cuvid )
 DEV.L. mpeg2video           MPEG-2 video (decoders: mpeg2video mpegvideo mpeg2_v4l2m2m mpeg2_cuvid )
 DEV.L. mpeg4                MPEG-4 part 2 (decoders: mpeg4 mpeg4_v4l2m2m mpeg4_cuvid ) (encoders: mpeg4 mpeg4_v4l2m2m )
 D.V.L. vc1                  SMPTE VC-1 (decoders: vc1 vc1_v4l2m2m vc1_cuvid )
 DEV.L. vp8                  On2 VP8 (decoders: vp8 vp8_v4l2m2m vp8_cuvid ) (encoders: vp8_v4l2m2m )
 D.V.L. vp9                  Google VP9 (decoders: vp9 vp9_v4l2m2m vp9_cuvid )

所有带有"cuvid"或"nvenc"的,都是CUDA提供的GPU编解码器可以看到,我们现在可以进行 h264 / hevc / mjpeg / mpeg1 / mpeg2 / mpeg4 / vc1 / vp8 / vp9格式的GPU解码,以及h264 / hevc格式的GPU编码。接着我们就可以用-hwaccel参数指定硬件加速器,指定视频解码器和视频编码器进行GPU加速。比如:

对视频进行压缩,调整比特率,分辨率不变:

ffmpeg -hwaccel cuvid -c:v h264_cuvid -i test.mp4 -c:v h264_nvenc -b 2.5M test_gpu.mp4
参数:
  -hwaccel cuvid:指定使用cuvid硬件加速;
  -c:v h264_cuvid:使用h264_cuvid进行视频解码;
  -c:v h264_nvenc:使用h264_nvenc进行视频编码;
  -b 2.5M : 指定视频输出的比特率为2.5M;

调整视频的分辨率,此时比特率也要随着调整:

ffmpeg -y -hwaccel cuvid -c:v h264_cuvid -i test.mp4 -b 0.96M -vf scale_npp=-1:320 -c:v h264_nvenc test_gpu.mp4
 
参数:
  -hwaccel cuvid:指定使用cuvid硬件加速;
  -c:v h264_cuvid:使用h264_cuvid进行视频解码;
  -c:v h264_nvenc:使用h264_nvenc进行视频编码;
  -b 0.96M : 指定视频输出的比特率为0.96M;
  -vf scale_npp=-1:320:进行硬解码,即GPU解码,使用硬件加速时使用该参数,而-vf scale表示使用软解码,即CPU解码,
                        不使用硬件加速时使用该参数。-1表示原视频调整后不会变形;

参考:FFmpeg

FFmpeg:视频转码、剪切、合并、播放速调整_ffmpeg合并视频不同帧率_风神修罗使的博客-CSDN博客

使用GPU硬件加速FFmpeg视频转码_大向CZ的博客-CSDN博客

原文链接:ffmpeg视频处理教程_ffmpeg mpeg1video_蓬莱道人的博客-CSDN博客

★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然!我可以为您提供一些关于FFmpeg的基本教程FFmpeg是一个开源的多媒体处理工具,它可以用于处理音频、视频和图像。它具有强大的功能和广泛的应用领域。 以下是一些基本的FFmpeg教程: 1. 安装FFmpeg:首先,您需要下载并安装FFmpeg。您可以在FFmpeg官方网站(https://ffmpeg.org/)上找到适用于不同操作系统的安装指南。 2. 转码视频:使用FFmpeg可以将视频文件转换为不同格式(例如,从MP4转换为AVI)。要转码视频,您可以使用以下命令: ``` ffmpeg -i input.mp4 output.avi ``` 这将将`input.mp4`文件转换为AVI格式,并将其保存为`output.avi`文件。 3. 剪辑视频:使用FFmpeg可以剪辑视频文件。要剪辑视频,您可以使用以下命令: ``` ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 -c copy output.mp4 ``` 这将从`input.mp4`文件中提取从第10秒开始的30秒,并将其保存为`output.mp4`文件。 4. 提取音频:使用FFmpeg可以从视频文件中提取音频。要提取音频,您可以使用以下命令: ``` ffmpeg -i input.mp4 -vn -acodec copy output.aac ``` 这将从`input.mp4`文件中提取音频流,并将其保存为`output.aac`文件。 5. 调整音频和视频质量:使用FFmpeg可以调整音频和视频的质量参数。例如,要调整视频的比特率,您可以使用以下命令: ``` ffmpeg -i input.mp4 -b:v 1000k output.mp4 ``` 这将将`input.mp4`文件的视频比特率设置为1000kbps,并将其保存为`output.mp4`文件。 这只是FFmpeg的一小部分功能。它还可以执行许多其他任务,包括添加字幕、调整图像大小、应用滤镜等等。您可以在FFmpeg文档中找到更多教程和示例。 希望这些基本教程对您有帮助!如果您有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值