FFmpeg非root用户Linux部署测试,裁剪视频时长分辨率、删除视频中音频、替换音频命令行,计算VMAF SSIM PSNR

本文详细介绍了如何在Linux上为非root用户部署FFmpeg的静态构建版本,包括下载、验证、解压和使用过程。还列出了FFmpeg的一些常见命令,如视频裁剪、分辨率调整、音频处理以及VMAF、SSIM和PSNR的计算方法,特别关注了帧同步的重要性。
摘要由CSDN通过智能技术生成

一、 FFmpeg非root用户Linux部署测试

参考John Van Sickle - FAQ,机翻如下:
FFmpeg静态构建教程
静态构建基本上是一个二进制文件,所有库都包含在二进制文件本身中。使用静态二进制文件无需安装,但您可能希望将其放置在 shell 的 PATH 中以便从命令行轻松调用它。否则,您可以使用二进制文件的绝对路径。
下载最新git build

$ wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz
$ wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz.md5

下载构建和构建的 md5 哈希值后,您可以检查其完整性

$ md5sum -c ffmpeg-git-amd64-static.tar.xz.md5
ffmpeg-git-amd64-static.tar.xz: OK

解压构建。注意:如果您需要在 Windows 上执行此操作,请使用 7-Zip 对其进行解压。您可能需要运行两次;一次解压缩,再次解压目录。

$ tar xvf ffmpeg-git-amd64-static.tar.xz

现在我有目录“ffmpeg-git-20180203-amd64-static”。(这里的日期可能有所不同,用ls命令查看一下,比如我这里就是20230908)

$ ls ffmpeg-git-20180203-amd64-static
ffmpeg  ffprobe  GPLv3.txt  manpages  model  qt-faststart  readme.txt

请阅读readme.txt! (按“q”退出“less”,如果不小心进入了插入模式,按"ESC"退出)

$ less ffmpeg-git-20180203-amd64-static/readme.txt

无需任何进一步的步骤,我就可以开始使用 ffmpeg 和二进制文件的相对路径。

$ ./ffmpeg-git-20180203-amd64-static/ffmpeg (+命令行其他部分,其实就是把常见的ffmpeg -i xxx.mp4中的ffmpeg替换掉)
ffmpeg version N-89948-ge3d946b3f4-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 6.4.0 (Debian 6.4.0-11) 20171206

或者使用二进制文件的绝对路径。

$ /home/XXX/ffmpeg-git-20180203-amd64-static/ffmpeg(+命令行其他部分,其实就是把常见的ffmpeg -i xxx.mp4中的ffmpeg替换掉)
ffmpeg version N-89948-ge3d946b3f4-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 6.4.0 (Debian 6.4.0-11) 20171206

因为是在云平台测试,全局部署我没有root权限,所以暂时没找到方法(改bashrc文件也试过,没用),后续就不贴了,原文有全局部署改PATH的命令行。

二、 FFmpeg常用命令(根据需要更新中ing)

  1. 裁剪视频,精确控制裁剪时长
ffmpeg -y -i 01.mp4 -ss 00:00:10 -t 00:02:00 -c:a copy -vcodec libx264 -keyint_min 2 -g 1 -y 02.mp4
  1. 视频分辨率大小调整
ffmpeg -i 02.mp4 -vf scale=3840:2160 03.mp4
  1. 删除视频本身的音频
 ffmpeg -i videoWithAudio.mp4 -c:v copy -an videoWithoutAudio.mp4
  1. 替换视频本身的音频,比如将原始音频替换为纯音乐,同时保证视音频长度一致(哪怕音频比视频长也没问题)
ffmpeg -i 1.mp4 -i 2.mp3 -c:v copy -map 0:v:0 -map 1:a:0 -shortest 3.mp4  
  1. 计算VMAF\SSIM\PSNR,这里默认大家已经安装了VMAF相关文件
    FFmpeg命令行结构比较一致,基本上都是 FFmpeg -i 第一个视频 -i 第二个视频 -lavfi XXXX -f null -,只是针对不同的全参考方法,XXXX位置有变动,此外FFmpeg对帧似乎不敏感(没办法对齐),尽量还是加上两个视频的帧率。

VMAF VMAF要求比较多,如果两个视频满足各方面相同(除了內容),就可以直接用下面这个命令:

ffmpeg -i 失真视频.mp4 -i 参考视频.mp4 -lavfi libvmaf="model_path=vmaf_v0.6.1.pkl":log_path=vmaf_logfile.txt -f null -
  • The reference and distorted videos need to be frame-synchronized. The scan mode (interlaced/progressive) has to match; they have to have the same duration and the same frame-rate. The reference and distorted videos’ resolution has to match, which often requires a robust up/down-scaling procedure.(要求帧同步,扫描格式相同,时间长度相同,帧率相同,分辨率相同)
  • 默认提供了 vmaf_float_v0.6.1.pkl 模型,可以分为 HDTV、Phone、4K超分辨率三种使用模式,满足不同播放场景下的画质评测需求。 由于 vmaf_float_v0.6.1.pkl 模型的训练集中包括了 4K 和1080p 的视频源,当需要对比 A/B 两个 4K 视频哪一个画质更好时,也能使用此模型。但是由于默认模型采用的是 1080p + 3H观看距离的方式采集的 EMOS 数据,无法算出准确的 4K VMAF 分数。Netflix 后来专门提供了vmaf_4k_v0.6.1.pkl 用于 4K 的画质评估。

如果不幸分辨率不同,需要用vmaf官方推荐的bicubic进行上/下采样缩放,命令行更改为:

ffmpeg -i 失真视频.mp4 -i 参考视频.mp4 -filter_complex "[0:v]scale=1920x1080:flags=bicubic[main];[1:v]scale=1920x1080:flags=bicubic,format=pix_fmts=yuv420p,fps=fps=30/1[ref];[main [ref]libvmaf=psnr=true:log_path=vmaflog.json:log_fmt=json" -f null -

我发现如果帧率是29.97Hz,自己和自己测的Vmaf数值很离奇,而改成30,就正常了,暂时不知道是哪个数学式子的问题(苦恼/(ㄒoㄒ)/)

btw,参考https://ottverse.com/vmaf-easyvmaf/,又学习了一点FFmpeg控制帧同步(Frame Synchroization)的操作:扫描格式不同时,添加[1:v]yadif=0:-1:0[ref],帧率不同,添加[1:v]fps=fps=30[ref],还有个首帧有offset的,感觉太复杂了,目前还没遇到类似问题,先不学了。easyVMAF把这些问题统一自动处理了,应该会更方便。等我试试~
easyVmaf

PSNR和SSIM:有人说不指定帧率时,帧对不上,会导致psnr值和ssim值偏低。我简单测试了一下,似乎没有大问题:

ffmpeg -i 失真视频.mp4 -r 29.97 -i 参考视频.mp4 -r 29.97 -lavfi psnr="psnr.log" -f null -
ffmpeg -i 失真视频.mp4 -r 29.97 -i 参考视频.mp4 -r 29.97 -lavfi ssim="stats_file=ssim.log" -f null -
Fps未指定: PSNR y:14.060202 u:26.960207 v:30.324055 average:15.740519 min:13.311459 max:18.996602
Fps=30:PSNR y:14.060202 u:26.960207 v:30.324055 average:15.740519 min:13.311459 max:18.996602
Fps=29.97 PSNR y:13.976181 u:26.806821 v:30.271764 average:15.655802 min:13.201645 max:18.850938
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月婵婵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值