龙空技术网

ffmpeg视频处理教程

端庄优雅青山NAl 156

前言:

如今大家对“ubuntu里mp4文件播放”都比较注重,兄弟们都需要剖析一些“ubuntu里mp4文件播放”的相关资讯。那么小编也在网络上搜集了一些有关“ubuntu里mp4文件播放””的相关内容,希望大家能喜欢,姐妹们一起来学习一下吧!

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:表示去掉视频

相关学习资料推荐,点击下方链接免费报名,先码住不迷路~】

音视频免费学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发

【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~

(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博客

标签: #ubuntu里mp4文件播放