作为后续行动这个问题我现在正在努力实现视频和音频的同步编辑。
我仍然尝试按帧剪切视频。虽然视频上生成的时间戳似乎是正确的,但音频远未同步。甚至给 增加一个常数时间也无济于事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 秒的音频开始,然后同步视频开始
- 如果我使用 no
setpts/asetpts
和 noselect/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"
沒有更多篩選...