You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过FFmpeg或其他工具对视频偏移片段的帧执行水平∆x、垂直∆y像素的平移变换

如何通过FFmpeg或其他工具对视频偏移片段的帧执行水平∆x、垂直∆y像素的平移变换

没问题!用FFmpeg完全可以实现这个需求,而且不用你之前关注的那个复杂的remap_opencl滤镜——用更简单直接的translate视频滤镜就足够搞定平移操作了。我给你分两种场景详细说明:

一、先剪好偏移片段再单独平移

如果你已经把需要调整的偏移片段单独剪出来了(比如文件名叫shifted_segment.mp4),直接用下面的FFmpeg命令就能完成平移:

ffmpeg -i shifted_segment.mp4 -vf "translate=dx=∆x:dy=∆y" -c:a copy shifted_segment_fixed.mp4
  • 把命令里的∆x换成你需要的水平偏移像素数:正数代表向右移,负数代表向左移
  • ∆y换成垂直偏移像素数:正数代表向下移,负数代表向上移
  • -c:a copy是直接复制原音频,避免重新编码浪费时间,如果你的片段没有音频可以去掉这个参数

二、不用提前剪,一步完成拆分、平移、拼接全流程

如果你不想单独剪片段,FFmpeg的复杂滤镜链可以一次性处理整个视频,假设偏移片段的时间范围是从第15秒到第30秒,命令如下:

ffmpeg -i input.mp4 -filter_complex "\
[0:v]trim=start=0:end=15,setpts=PTS-STARTPTS[part1_v];\
[0:v]trim=start=15:end=30,setpts=PTS-STARTPTS,translate=dx=∆x:dy=∆y[part2_v];\
[0:v]trim=start=30,setpts=PTS-STARTPTS[part3_v];\
[part1_v][part2_v][part3_v]concat=n=3:v=1:a=0[out_v];\
[0:a]atrim=start=0:end=15,asetpts=PTS-STARTPTS[part1_a];\
[0:a]atrim=start=15:end=30,asetpts=PTS-STARTPTS[part2_a];\
[0:a]atrim=start=30,asetpts=PTS-STARTPTS[part3_a];\
[part1_a][part2_a][part3_a]concat=n=3:v=0:a=1[out_a]\
" -map "[out_v]" -map "[out_a]" final_output.mp4

这个命令的逻辑是:把视频和音频分别拆成三段,中间视频段添加平移滤镜,然后把三段视频、三段音频分别拼接起来,setptsasetpts是为了保证时间戳正常,避免播放时出现卡顿或跳帧。

三、如果不想用命令行,推荐这些免费可视化工具

要是你觉得FFmpeg命令太繁琐,试试下面这些开源免费的视频编辑工具,操作更直观:

  • Shotcut:完全开源免费,导入偏移片段后,在「滤镜」面板里找到「平移与缩放」滤镜,直接输入x、y方向的偏移数值即可,导出后再和其他片段拼接就行
  • OpenShot:同样是开源免费,把视频拖到时间线后,在右侧属性面板里调整「位置」参数,或者添加「变换」滤镜来设置平移量,操作简单易上手
  • DaVinci Resolve:专业级别的免费剪辑软件,功能非常强大,把偏移片段放到时间线后,在「编辑」或「颜色」页面的变换控件里调整x、y轴的位置,精度很高,适合需要精细调整的场景

补充一句:你之前看到的remap_opencl是用于更复杂的像素映射(比如非规则变形、畸变校正),对于简单的平移操作,translate滤镜已经完全够用啦。

备注:内容来源于stack exchange,提问作者Mostafa Zeinali

火山引擎 最新活动