FFmpeg
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。
FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,现在由Michael Niedermayer维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。
FFmpeg 是视频处理中广泛使用的开源软件。可以称之为视频编辑的 瑞士军刀
FFmpeg命令压缩
原视频大小:3.8M
ls -lh tinywan-input.mp4
-rw-rw-r-- 1 www www 3.8M Oct 31 19:24 tinywan-input.mp4
通过FFmpeg压缩
ffmpeg -i "tinywan-input.mp4" -c:v libx264 -tag:v avc1 -movflags faststart -crf 30 -preset superfast "tinywan-output.mp4"
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'tinywan-input.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41
creation_time : 2020-07-17T09:38:33.000000Z
Duration: 00:00:06.04, start: 0.000000, bitrate: 5160 kb/s
Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 5143 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc (default)
Metadata:
creation_time : 2020-07-17T09:38:33.000000Z
handler_name : Alias Data Handler
encoder : AVC Coding
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x559762163060] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 AVX512
[libx264 @ 0x559762163060] profile High, level 4.0
[libx264 @ 0x559762163060] 264 - core 152 r2854 e9a5903 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x3:0x3 me=dia subme=1 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=1 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc=crf mbtree=0 crf=30.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 pb_ratio=1.30 aq=1:1.00
Output #0, mp4, to 'tinywan-output.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41
encoder : Lavf57.83.100
Stream #0:0(eng): Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 1920x1080, q=-1--1, 25 fps, 12800 tbn, 25 tbc (default)
Metadata:
creation_time : 2020-07-17T09:38:33.000000Z
handler_name : Alias Data Handler
encoder : Lavc57.107.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
[mp4 @ 0x55976213a440] Starting second pass: moving the moov atom to the beginning of the file
frame= 151 fps= 22 q=-1.0 Lsize= 643kB time=00:00:05.92 bitrate= 890.2kbits/s speed=0.858x
压缩后视频大小:644K
ls -lh tinywan-output.mp4
-rw-rw-r-- 1 www www 644K Oct 31 19:27 tinywan-output.mp4
在线工具压缩
通过在线无损视频压缩工具rotato
,轻松压缩视频大小,访问工具在线地址:https://tools.rotato.app
PHP-FFMpeg
注意:此库需要PHP 8.0或更高版本,这里使用PHP 8.2.14
composer require php-ffmpeg/php-ffmpeg
使用PHP-FFMpeg
库来实现
<?php
/**
* @author Tinywan(ShaoBo Wan)
*/
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
/** 1. 初始化配置*/
$ffmpeg = \FFMpeg\FFMpeg::create([
'ffmpeg.binaries' => '/usr/bin/ffmpeg',
'ffprobe.binaries' => '/usr/bin/ffprobe'
]);
/** 2. 读取视频文件 */
$video = $ffmpeg->open('/home/www/build/tinywan-input.mp4');
/** 3. 进行视频压缩 */
$video->filters()
->resize(new \FFMpeg\Coordinate\Dimension(640, 480))
->synchronize();
/** 4. 输出视频 */
$video->save(new \FFMpeg\Format\Video\X264(), '/home/www/build/ffmpeg/php-tinywan-output.mp4');
压缩后视频大小:735K
ls -lh php-tinywan-output.mp4
-rw-rw-r-- 1 www www 735K Oct 31 19:46 php-tinywan-output.mp4
发表评论 取消回复