0

我有一个视频,我需要对旧设备的字幕进行硬编码,所以我通常为此使用 ffmpeg,它工作正常,但速度太慢。

这是我通常使用的命令。

ffmpeg -i test-cut.mp4 -vf "subtitles=test-cut.srt" -c:v libx264 -crf 24 -vsync passthrough -c:a copy test.ffmpeg.mp4

前几天我尝试了 handbrakeCLI,它在同一个文件上要快得多。

我使用这个 HandbrakeCLI 命令进行转换和硬编码,我知道它不像类似,但你会期望 ffmpeg 更快,因为它不转换音频,实际上只需要在需要字幕的帧处转换视频。

HandBrakeCLI --preset "Very Fast 1080p30" --format av_mp4 -i test-cut.mp4 --srt-file test-cut.srt --srt-burn=1 -o test.handbrake.mp4

有没有一种方法可以让 ffmpeg 只在需要字幕的视频上打印字幕。而不必转换整个视频。

例如,如果我有一个一分钟长的视频,并且在 30 秒时说了 1 个句子,并且该句子/子需要显示 5 秒才能让 ffmpeg 仅转换该 5 秒片段并复制视频的其余部分和新输出的音频?

输入视频为 720p,24 FPS,速度差异通常是手刹是 2x,ffmpeg 大约是视频时长的 0.7x。我知道我使用 1080p 配置文件进行手刹。两者都在同一台机器和同一视频上进行了测试。

版本 ffmpeg 版本 4.2.2 HandBrake 1.3.1

视频信息 原始视频

CONTAINER......: MPEG-4
SIZE...........: 13.3 MiB
RUNTIME........: 45 s 94 ms
VIDEO CODEC....: avc1, High@L3.1, 8 bits
RESOLUTION.....: 1280x720
BITRATE........: 2 402 kb/s
FRAMERATE......: 24.000 FPS
AUDIO..........: AAC, 2 channels, 66.2 kb/s

手刹输出

CONTAINER......: MPEG-4
SIZE...........: 2.81 MiB
RUNTIME........: 45 s 51 ms
VIDEO CODEC....: x264, avc1, Main@L4, 8 bits
RESOLUTION.....: 1118x692
BITRATE........: 355 kb/s
FRAMERATE......: 24.000 FPS
AUDIO..........: AAC, 2 channels, 160 kb/s

ffmpeg 输出

CONTAINER......: MPEG-4
SIZE...........: 3.90 MiB
RUNTIME........: 45 s 94 ms
VIDEO CODEC....: x264, avc1, High@L3.1, 8 bits
RESOLUTION.....: 1280x720
BITRATE........: 651 kb/s
FRAMERATE......: 23.976 (23976/1000) FPS
AUDIO..........: AAC, 2 channels, 66.2 kb/s

如果有人能提供任何建议以在硬编码潜艇上更快地获得 ffmpeg,将不胜感激。

4

1 回答 1

1

对于手刹,您使用非常快的预设。
您还可以使用 ffmpeg 指定预设,默认情况下它设置为 medium,但您可以更改:
-preset veryfast

于 2021-12-08T22:53:57.150 回答