示例场景:视频文件时长为 3 小时。当您使用修剪过滤器在 1.5 小时后开始剪辑时,您会注意到 ffmpeg 显示它不会在 20-30 秒内开始实际转换(例如下面的输出)。因此,它会在开始修剪\转换之前在视频文件中搜索 1.5 小时标记。有什么方法可以快速找到 1.5 小时标记?我以为 -ss 是答案,但事实并非如此。我正在使用最新的 ffmpeg 版本。
我正在运行的命令如下:
ffmpeg -i "Input.mp4" -filter_complex "[0:v] trim='01\:30\:00':'02\:30\:00', setpts=PTS-STARTPTS [vid]; [0:a] atrim='01\:30\:00':'02\:30\:00', asetpts=PTS-STARTPTS [aud]" -map "[vid]" -map "[aud]" -profile:v main -pix_fmt yuv420p -qscale:v 22 -async 1 -c:a aac -b:a 64k -ar 22050 -strict experimental -movflags +faststart -y "output.mp4"
在文件实际开始转换之前我看到的是压缩的输出。
frame= 0 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
frame= 0 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
frame= 0 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
frame= 0 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
frame= 0 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
frame= 0 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
frame= 0 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
frame= 0 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
frame= 0 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
frame= 0 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
frame= 0 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
frame= 0 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
frame=74379 fps=2.9 q=0.0 size= 0kB time=01:50:00.00 bitrate= 0.3kbits/s speed=0.234x
根据@slhck 评论编辑以下解决方案
ffmpeg -ss 01:30:00 -i "Input.mp4" -filter_complex "[0:v] trim='00\:00\:00':'01\:00\:00', setpts=PTS-STARTPTS [vid]; [0:a] atrim='00\:00\:00':'01\:00\:00', asetpts=PTS-STARTPTS [aud]" -map "[vid]" -map "[aud]" -profile:v main -pix_fmt yuv420p -qscale:v 22 -async 1 -c:a aac -b:a 64k -ar 22050 -strict experimental -movflags +faststart -y "output.mp4"
您会注意到添加 -ss 会改变修剪标记。从现在 0 开始,到小时标记结束。因此您需要做一些计算。
答案1
根据 的位置,寻求的工作方式有所不同-ss
。
通过将其放在 前面-i
,ffmpeg 将首先查找指定的时间点,然后开始解码。这样会快得多:
ffmpeg -ss 01:30:00 -i ...
但请注意,过滤器部分的时间戳将被重置为 0,因此您必须调整切点。