ffmpeg 中 setpts/asetpts 和/或 select/aselect 的问题

ffmpeg 中 setpts/asetpts 和/或 select/aselect 的问题

作为后续行动这个问题我现在正在努力实现视频和音频的同步编辑。

我仍然尝试按帧剪切视频。虽然视频上生成的时间戳似乎是正确的,但音频远未同步。甚至给 增加一个常数时间也无济于事asetpts。它似乎随着我使用的每个不同的帧范围而变化。

这是我所拥有的(它只是较长脚本的相关部分):

SET SELECT=select='gte(n\,%4)*lte(n\,%5)'
SET ASELECT=aselect='gte(n\,%4)*lte(n\,%5)'
SET SETPTS=setpts='PTS-STARTPTS'
SET ASETPTS=asetpts='PTS-STARTPTS'
SET SCALE=scale='1280:-1'
SET CROP=%3
:
ffmpeg -y -i %1 -af %ASELECT%,%ASETPTS% -vf %SELECT%,%SETPTS%,%SCALE%,%CROP% ^
-ab 128k -crf 18 -pix_fmt yuv420p "%1 converted.mp4"

简而言之

  • 它以裁剪内容和开始/结束帧作为参数
  • 源文件以约 1 秒的音频开始,然后同步视频开始
  • 如果我使用 nosetpts/asetpts和 no select/aselect,则生成的视频将以一秒钟的带有音频的冻结帧开始,然后视频将与音频同步播放
  • 如果我使用 no setpts/asetpts,则生成的视频将以冻结的帧开始,然后音频进入,然后从传递的起始帧开始,视频将与音频同步播放
  • 如果我使用否select/aselect,则生成的视频的视频和音频都会开始关闭大约一秒钟
  • 如果我使用全部,则生成的视频的视频和音频都从起始帧开始,并且音频大约关闭一秒

我猜想select/aselect运行良好,但setpts/asetpts造成了麻烦。仅使用视频过滤器或音频过滤器只会使情况变得更糟。

显然我在这里做错了。因此,有人能帮我吗?也许有人可以解释一下setpts和是如何asetpts一起工作的?

编辑:
其他尝试:

ffmpeg -y -i %1 ^
-filter_complex %ASELECT%,%ASETPTS%;%SELECT%,%SETPTS%,%SCALE%,%CROP% ^
-ab 128k -crf 18 -pix_fmt yuv420p "%1 converted.mp4"

有两个输入(这非常慢):

ffmpeg -y -i %1 -i %1 ^
-filter_complex [1:1]%ASELECT%,%ASETPTS%[aud];[0:0]%SELECT%,%SETPTS%,%SCALE%,%CROP%[vid] ^
-map [vid] -map [aud] ^
-ab 128k -crf 18 -pix_fmt yuv420p "%1 converted.mp4"

答案1

简而言之,我失败了。

我现在正在做的是将开始和结束帧号转换为时间戳,-ss然后-t像世界上其他人一样使用 (*叹气*)。我可以这样做,因为我知道剪辑的 FPS。

就同​​步而言,我使用两个输入文件中一个剪辑的技巧。

最终的命令现在如下所示:

ffmpeg -y -i %1 -itsoffset %audioDelay% -i %1 -vf %SCALE%,%CROP% ^
-ss %startTime% -t %duration% -r 25 ^
map=-map 0:0 -map 1:1 ^
-ab 128k -crf 18 -pix_fmt yuv420p "%~1 converted.mp4"

沒有更多篩選...

相关内容