我有一个下载的视频youtube-dlffmpeg
。我想使用循环函数创建一个由图像和下载的视频组成的视频。
./ffmpeg -f concat -safe 0 -i list.txt -c copy merged.mp4
我的 list.txt 文件里面是
file word_img.jpg
file youtube_video.mp4
运行底部的命令会创建一个新视频。只是它与 YouTube 视频完全相同。其他图像从未添加。这可能与编码有关吗?
我也尝试了另一种方法,情况如下。
./ffmpeg -t 125 -async 1 -i youtube_video.mp4\
-t 5 -i word_img.jpg \
-filter_complex "[0]loop=149:1:0[bgheld5]; \
[1]loop=149:1:0[fgheld5]; \
[bgheld5][fgheld5]overlay=eof_action=pass" out.mp4
这种方法可行。静态图像显示 5 秒,然后播放 30 秒的 YouTube 视频。问题是 YouTube 视频的音频和视频不同步约 5 秒。
运行./ffmpeg -i img.jpg
返回以下内容
Input #0, image2, from 'img.jpg':
Duration: 00:00:00.04, start: 0.000000, bitrate: 1258 kb/s
Stream #0:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 640x356 [SAR 96:96 DAR 160:89], 25 tbr, 25 tbn, 25 tbc
运行./ffmpeg -i video.mp4
返回以下内容
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.26.101
Duration: 00:02:00.04, start: 0.000000, bitrate: 575 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x356 [SAR 1:1 DAR 160:89], 440 kb/s, 24.98 fps, 24.98 tbr, 25k tbn, 49.95 tbc (default)
Metadata:
handler_name : ISO Media file produced by Google Inc. Created on:
10/28/2018.
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : ISO Media file produced by Google Inc. Created on: 10/28/2018
答案1
我假设您有一个静态图像文件和一个想要连接的视频。图像应显示五秒钟,无音频;视频应紧随其后。
您可以使用以下命令运行所有内容:
ffmpeg \
-loop 1 -framerate 24 -t 5 -i image.png \
-f lavfi -t 1 -i anullsrc \
-i video.mp4 \
-filter_complex " \
[2:v]scale=320:240,setsar=sar=1[video]; \
[0:v][1:a][video][2:a]concat=n=2:v=1:a=1 \
" output.mp4
它能做什么:
- 将图像指定为输入
0
,以 24 fps 的速度循环播放,最长为 5 秒。 - 指定静音音频作为第二个输入
1
,这是连接所需的 - 指定视频作为第三个输入
2
- 将视频缩放到与图像相同的大小(但你当然也可以缩放图像……只需将输入标识符交换
2:v
为1:v
并重命名标签video
) - 将其样本纵横比设置为 1(这是针对不同 SAR 的快速修复方法;您可能需要更明确地说明,如图所示这里)
- 将徽标+静音音频与视频连接起来。
您还可以使用scale2ref
过滤器(另一个示例这里)将徽标缩放到视频大小:
-filter_complex " \
[0:v][2:v]scale2ref[logo][video]; \
[logo]setsar=sar=1[logo]; \
[logo][1:a][video][2:a]concat=n=2:v=1:a=1 \
"