使用 Trim 滤镜时如何加快 ffmpeg 转换速度?

使用 Trim 滤镜时如何加快 ffmpeg 转换速度?

示例场景:视频文件时长为 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,因此您必须调整切点。

相关内容