前言:
如今大家对“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文件播放