video-compare
这是一个用C++14编写的分屏视频比较工具,利用FFmpeg库和SDL2。它提供交互式导航和播放控制,以及各种分析工具和可自定义的显示选项。
video-compare
可用于直观比较编解码器、调整大小算法和其他修改对两个同步播放的视频文件的影响。该工具功能多样,允许比较分辨率、帧率、扫描方法、色彩格式、容器格式、编解码器或时长不同的视频。
得益于FFmpeg的灵活性,video-compare
还能够比较图像或图像序列。
安装
Arch Linux
通过AUR安装:
git clone https://aur.archlinux.org/video-compare.git
cd video-compare
makepkg -sic
Homebrew
通过Homebrew安装:
brew install video-compare
预编译的Windows 10二进制文件
预构建的Windows 10 x86 64位版本可从此页面获取。
下载并解压缩.zip文件到您的系统,然后从命令提示符运行video-compare.exe
。
从源代码编译
自行构建。
截图
视觉比较模式:
减法模式(加上时间偏移、200%缩放和放大):
垂直堆叠模式:
致谢
video-compare
由Jon Frydensbjerg(电子邮件:jon@pixop.com)创建。代码主要基于
优秀的视频播放器GitHub项目:https://github.com/pockethook/player
使用方法
使用操作系统的DPI设置启动。视频像素在Retina 5K显示器等设备上会翻倍; 因此,这是在此类屏幕上显示HD 1080p视频的首选选项:
video-compare video1.mp4 video2.mp4
在支持高DPI模式的系统上允许使用该模式。视频像素将"一对一"显示。适用于 例如在Retina 5K显示器上显示UHD 4K视频:
video-compare -d video1.mp4 video2.mp4
将位深度增加到每个颜色分量10位(默认为8位)。这会提高保真度但 会影响性能。在具有高级显示器和支持30位色彩的驱动程序的系统上, 可显著减少可见的色带:
video-compare -b video1.mp4 video2.mp4
使用特定的窗口大小,而不是从视频尺寸派生窗口大小。视频 帧将被缩放以适应。如果宽度或高度任一被省略,缺失的值将根据 指定的另一个维度计算,以保持宽高比。这对于将高分辨率 视频缩小到低分辨率显示器上很有用:
video-compare -w 1280x720 video1.mp4 video2.mp4
自动缓冲区内循环播放,在缓冲区填满或到达文件末尾时触发,简化了
视频分析,无需手动重新开始播放(也提供双向"乒乓"模式,pp
):
video-compare -a on video1.mp4 video2.mp4
移动右侧视频的显示时间戳,而不是假设视频已对齐。正值 会延迟左侧视频,而负值则相反地延迟右侧视频。当视频 稍微不同步时很有用:
video-compare -t 0.080 video1.mp4 video2.mp4
以全尺寸垂直堆叠显示视频,不使用滑块(也支持hstack
进行水平堆叠):
video-compare -m vstack video1.mp4 video2.mp4
通过命令行指定的FFmpeg视频滤镜列表预处理一个或两个输入 (参见FFmpeg的视频滤镜文档)。 这是用于裁剪/填充(比较不同宽高比的视频)、 调整颜色、去隔行、降噪、加速/减速等的瑞士军刀:
video-compare -l crop=iw:ih-240 -r format=gray,pad=iw+320:ih:160:0 video1.mp4 video2.mp4
选择无法自动检测的解复用器(如VapourSynth):
video-compare --left-demuxer vapoursynth script.vpy video.mp4
明确选择右侧视频的解码器:
video-compare --right-decoder h264_cuvid video1.mp4 video2.mp4
为左侧视频设置硬件加速类型:
video-compare --left-hwaccel videotoolbox video1.mp4 video2.mp4
转换SDR视频的色彩空间并映射850尼特峰值亮度的HDR视频,以适应 sRGB显示器上相同的亮度水平:
video-compare -R 850 sdr_video.mp4 hdr_video.mp4
将500尼特峰值亮度的HDR视频映射到sRGB SDR显示器,并调整SDR视频 的色调,以模拟两个视频在实际HDR显示器上的相对亮度差异:
video-compare -T rel -L 500 hdr_video.mp4 sdr_video.mp4
使用双下划线(__
)作为占位符,可以更简单地将视频与自身进行比较。这
使得可以执行诸如比较视频与其时间偏移版本或测试各种
滤镜集合等任务,而无需重复输入相同的、可能很长的路径:
video-compare some/very/long/and/complicated/video/path.mp4 __
当然,上述功能可以按任意顺序组合使用。不带任何参数启动video-compare
可以
查看所有支持的选项。
控制
- H: 切换屏幕上的控制帮助文本
- 空格: 切换播放/暂停
- 逗号
,
: 切换缓冲区内双向循环/暂停 - 句号
.
: 切换缓冲区内单向循环/暂停 - Esc: 退出
- 下箭头: 后退15秒
- 左箭头: 后退1秒
- 向下翻页: 后退600秒
- 上箭头: 前进15秒
- 右箭头: 前进1秒
- 向上翻页: 前进600秒
- J: 降低播放速度
- L: 提高播放速度
- S: 交换左右视频
- A: 移动到缓冲区中的上一帧
- D: 移动到缓冲区中的下一帧
- F: 将两个画面保存为PNG图像到当前目录
- P: 在控制台打印鼠标位置和光标下的像素值
- M: 在控制台打印图像相似度指标
- Z: 放大光标周围区域(结果显示在左下角)
- C: 放大光标周围区域(结果显示在右下角)
- R: 重新居中并重置缩放至100%(x1)
- 1: 切换隐藏/显示左侧视频
- 2: 切换隐藏/显示右侧视频
- 3: 切换隐藏/显示HUD
- 5: 缩放50%(x0.5)
- 6: 缩放100%(x1)
- 7: 缩放200%(x2)
- 8: 缩放400%(x4)
- 0: 切换视频/差异模式
- 加号
+
: 右侧视频时间前移1帧 - 减号
-
: 右侧视频时间后移1帧
水平移动鼠标来调整可移动滑块的位置。
使用鼠标滚轮放大/缩小光标下的像素。按住鼠标右键移动鼠标来平移视图。
左键单击鼠标可根据鼠标光标相对于窗口宽度的水平位置进行时间跳转(目标位置显示在右下角)。
按住SHIFT键同时按D
可解码并移动到下一帧。
按住CTRL键的同时使用+
/-
进行时间调整可以更快地增减10帧。同样,按住ALT键可进行更大幅度的100帧时间调整。
构建
要求
需要安装FFmpeg头文件和开发库,以及SDL2及其TrueType字体渲染附加组件(libsdl2_ttf)。现在特别需要SDL2版本2.0.10或更高版本以支持亚像素精度渲染功能。用户在编译前可能需要升级现有的SDL2安装。
在Debian GNU/Linux上,可以通过apt
安装所需的开发包:
apt install libavformat-dev libavcodec-dev libavfilter-dev libavutil-dev libswscale-dev libswresample-dev libsdl2-dev libsdl2-ttf-dev
说明
通过GNU Make编译源代码:
make
链接后的video-compare
可执行文件将在源代码目录中创建。要进行系统范围的安装:
make install
注意,在大多数环境中执行此操作需要root权限(提示:使用sudo
)。
注意事项
-
不支持音频播放。
-
为获得最佳体验,请将时间调整控制在几秒钟以内。
-
跳转需要在最近的关键帧(即I帧)上重新同步。
实用技巧
Windows资源管理器中的"发送到"集成
当你只需要指定输入文件而不需要其他参数时,可以直接从资源管理器启动工具,方法是右键点击 -> 发送到 -> video-compare。
以下是此集成的工作方式:
https://user-images.githubusercontent.com/8549626/166630445-c8c511b7-005f-48aa-83bc-0eb9676cfa2a.mp4
你可以通过选择两个文件,然后右键点击其中任何一个,按N键(聚焦"发送到"),然后按V键(选择"video-compare")来快速实现。
要让video-compare出现在"发送到"字段中,你需要打开"发送到"文件夹,可以通过在运行(Windows + R)中输入shell:sendto
来访问,然后只需创建一个指向video-compare.exe
的快捷方式即可。
感谢couleurm分享这个技巧并创建上面的屏幕录像。