将视频的两半与图像连接在一起
Issue concating two halves of a video with an image
我在尝试 运行 这段代码时遇到了这个错误。我是 ffmpeg 的新手,所以我不确定如何修复它。
过滤图描述中的无效文件索引 4 [0:v][4:a][1:v][1:a][2:v][4:a][3:v][4: a]concat=n=4:v=2:a=1.
此代码的目标是在视频的两半之间插入一张图像,图像数据完好无损且能够被拉出。
ffmpeg \
-i original.mp4 -ss 00:00:00 -t 00:00:5.48 -async 1 \
-loop 1 -framerate 24 -i frames1.jpeg \
-f lavfi -t 0.1 -i anullsrc=channel_layout=stereo:sample_rate=44100 \
-i original.mp4 -ss 00:00:5.52 -t 00:00:21.12 -async 1 \
-filter_complex "[0:v][0:a][1:v][2:a][3:v][3:a]concat=n=3:v=1:a=1" out.mp4
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libavresample 3. 7. 0 / 3. 7. 0
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'original.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41isomavc1
creation_time : 2018-09-11T11:07:38.000000Z
Duration: 00:00:21.12, start: 0.000000, bitrate: 21519 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 3840x2160, 21514 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc (default)
Metadata:
creation_time : 2018-09-11T11:07:38.000000Z
handler_name : L-SMASH Video Handler
encoder : AVC Coding
Input #1, image2, from 'frames1.jpeg':
Duration: 00:00:00.04, start: 0.000000, bitrate: 79031 kb/s
Stream #1:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 3840x2160 [SAR 1:1 DAR 16:9], 24 fps, 24 tbr, 24 tbn, 24 tbc
Input #2, lavfi, from 'anullsrc=channel_layout=stereo:sample_rate=44100':
Duration: N/A, start: 0.000000, bitrate: 705 kb/s
Stream #2:0: Audio: pcm_u8, 44100 Hz, stereo, u8, 705 kb/s
Input #3, mov,mp4,m4a,3gp,3g2,mj2, from 'original.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41isomavc1
creation_time : 2018-09-11T11:07:38.000000Z
Duration: 00:00:21.12, start: 0.000000, bitrate: 21519 kb/s
Stream #3:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 3840x2160, 21514 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc (default)
Metadata:
creation_time : 2018-09-11T11:07:38.000000Z
handler_name : L-SMASH Video Handler
encoder : AVC Coding
ffmpeg \
-ss 00:00:00 -t 00:00:5.48 -i original.mp4 \
-loop 1 -framerate 25 -t 5 -i frames1.jpeg \
-ss 00:00:5.52 -t 00:00:21.12 -i original.mp4 \
-filter_complex "[0:v][1:v][2:v]concat=n=3:v=1:a=0" out.mp4
None 的输入有音频,因此无需使用 anullsrc 添加无声音频。仅当某些部分有您想要保留的音频而其他部分没有音频(例如图像)时才需要这样做。
请注意,我将 frames1.jpeg
的 -framerate
匹配到 original.mp4
的帧速率,并添加了 -t
的持续时间。
在您的原始命令中,您有 4 个输入,但您告诉 concat 过滤器您想要使用不存在的第 5 个输入 ([4:v]
)。 ffmpeg 文件索引星从 0 开始计数:
index #
input
0
original.mp4
1
frames1.jpeg
2
anullsrc
3
original.mp4
有关详细信息,请参阅 concat filter documentation。
我在尝试 运行 这段代码时遇到了这个错误。我是 ffmpeg 的新手,所以我不确定如何修复它。
过滤图描述中的无效文件索引 4 [0:v][4:a][1:v][1:a][2:v][4:a][3:v][4: a]concat=n=4:v=2:a=1.
此代码的目标是在视频的两半之间插入一张图像,图像数据完好无损且能够被拉出。
ffmpeg \
-i original.mp4 -ss 00:00:00 -t 00:00:5.48 -async 1 \
-loop 1 -framerate 24 -i frames1.jpeg \
-f lavfi -t 0.1 -i anullsrc=channel_layout=stereo:sample_rate=44100 \
-i original.mp4 -ss 00:00:5.52 -t 00:00:21.12 -async 1 \
-filter_complex "[0:v][0:a][1:v][2:a][3:v][3:a]concat=n=3:v=1:a=1" out.mp4
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libavresample 3. 7. 0 / 3. 7. 0
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'original.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41isomavc1
creation_time : 2018-09-11T11:07:38.000000Z
Duration: 00:00:21.12, start: 0.000000, bitrate: 21519 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 3840x2160, 21514 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc (default)
Metadata:
creation_time : 2018-09-11T11:07:38.000000Z
handler_name : L-SMASH Video Handler
encoder : AVC Coding
Input #1, image2, from 'frames1.jpeg':
Duration: 00:00:00.04, start: 0.000000, bitrate: 79031 kb/s
Stream #1:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 3840x2160 [SAR 1:1 DAR 16:9], 24 fps, 24 tbr, 24 tbn, 24 tbc
Input #2, lavfi, from 'anullsrc=channel_layout=stereo:sample_rate=44100':
Duration: N/A, start: 0.000000, bitrate: 705 kb/s
Stream #2:0: Audio: pcm_u8, 44100 Hz, stereo, u8, 705 kb/s
Input #3, mov,mp4,m4a,3gp,3g2,mj2, from 'original.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41isomavc1
creation_time : 2018-09-11T11:07:38.000000Z
Duration: 00:00:21.12, start: 0.000000, bitrate: 21519 kb/s
Stream #3:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 3840x2160, 21514 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc (default)
Metadata:
creation_time : 2018-09-11T11:07:38.000000Z
handler_name : L-SMASH Video Handler
encoder : AVC Coding
ffmpeg \
-ss 00:00:00 -t 00:00:5.48 -i original.mp4 \
-loop 1 -framerate 25 -t 5 -i frames1.jpeg \
-ss 00:00:5.52 -t 00:00:21.12 -i original.mp4 \
-filter_complex "[0:v][1:v][2:v]concat=n=3:v=1:a=0" out.mp4
None 的输入有音频,因此无需使用 anullsrc 添加无声音频。仅当某些部分有您想要保留的音频而其他部分没有音频(例如图像)时才需要这样做。
请注意,我将 frames1.jpeg
的 -framerate
匹配到 original.mp4
的帧速率,并添加了 -t
的持续时间。
在您的原始命令中,您有 4 个输入,但您告诉 concat 过滤器您想要使用不存在的第 5 个输入 ([4:v]
)。 ffmpeg 文件索引星从 0 开始计数:
index # | input |
---|---|
0 |
original.mp4 |
1 |
frames1.jpeg |
2 |
anullsrc |
3 |
original.mp4 |
有关详细信息,请参阅 concat filter documentation。