FFMPEG 将文本帧添加到视频的开头

FFMPEG add text frames to the start of video

我有一些 mp4 或 webm 格式的视频,我想使用 ffmpeg 在每个视频的开头添加 4 秒,以便在没有声音的情况下在中心显示一些文本。

一些其他要求:

我是 ffmpeg 的新手,我们将不胜感激。

提前致谢

下面 mp4 的示例 ffprobe 信息:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.33.100
  Duration: 00:00:03.84, start: 0.042667, bitrate: 1117 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 1021 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
  handler_name    : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 140 kb/s (default)
Metadata:
  handler_name    : SoundHandler

示例 webm

Input #0, matroska,webm, from 'input.webm':
  Metadata:
  encoder         : Lavf55.33.100
 Duration: 00:00:03.80, start: 0.000000, bitrate: 1060 kb/s
   Stream #0:0(eng): Video: vp8, yuv420p, 1280x720, SAR 1:1 DAR 16:9, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
   Stream #0:1(eng): Audio: vorbis, 48000 Hz, stereo, fltp (default)

Screenshot from joined.mp4

Screenshot for step 3 console

简短的回答是您不能将新数据编码为 mp4 或 webm 并将其插入视频流的前面。这些格式根本无法像那样工作。这两种编码格式都是有损的,因此如果您再次对它们进行解码和编码,那么第二次编码将 lost/changed 附加信息。您可以做其他事情,但您尝试做的事情不会奏效。

您必须生成一个 4 秒的视频,其虚拟音频与现有视频的参数(包括时基)相匹配,然后使用带有 streamcopy 的 concat demuxer。

对于Q中所示的示例文件:

步骤 1 生成文字视频

ffmpeg -f lavfi -r 30 -i color=black:1280x720 -f lavfi -i anullsrc -vf "drawtext=fontfile='/path/to/font.ttf':fontcolor=FFFFFF:fontsize=50:text='Your text':x='(main_w-text_w)/2':y='(main_h-text_h)/2',fade=t=in:st=0:d=1,fade=t=out:st=3:d=1" -c:v libx264 -b:v 1000k -pix_fmt yuv420p -video_track_timescale 15360 -c:a aac -ar 48000 -ac 2 -sample_fmt fltp -t 4 intro.mp4

对于 WebM,将 -c:v libx264 替换为 -c:v libvpx,将 -c:a aac 替换为 -c:a libvorbis,将 intro.mp4 替换为 intro.webm。您可以删除 -video_track_timescale 15360,因为 WebMs 倾向于使用我见过的单一时间尺度。

步骤 2 准备 concat 文件,比如说,list.txt

file 'intro.mp4'
file 'input.mp4'

步骤 3 连接

ffmpeg -f concat -i list.txt -c copy -fflags +genpts joined.mp4

这里重要的变量是视频大小1280x720、帧率-r 30-pix_fmt yuv420p、采样率-ar 48000、格式-sample_fmt fltp、频道布局-ac 2 当然还有编解码器。