我需要连接两个具有以下编码的剪辑
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 320x240 [SAR 4:3 DAR 16:9], 100 kb/s, 23.98 fps, 23.98 tbr, 19184 tbn, 47.96 tbc (default)
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 261 kb/s, 23.98 fps, 23.98 tbr, 48k tbn, 47.95 tbc (default)
使用常规的concat
方法破坏第二个剪辑视频流
ffmpeg -y -f concat -safe 0 -i filesname.txt -vcodec copy -acodec copy 1.mp4
我需要对第一个剪辑应用什么编码才能使其易于与第一个剪辑连接?
注意: 第一个剪辑具有以下规格,我使用以下命令对其进行了编码,以匹配第二个剪辑的规格。
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 320x240 [SAR 4:3 DAR 16:9], 61 kb/s, 23.98 fps, 23.98 tbr, 19184 tbn, 47.96 tbc (default)
ffmpeg -i 1_original.mp4 -c:v libx264 -preset slow -profile:v baseline -vf scale=320x240 -r 23.98 -c:a aac -ar 44100 1.mp4
答案 0 :(得分:1)
您的timebase在输入之间有所不同,但是连接的时基必须相同。第二个输入的帧速率为24000/1001。 (不幸的是,控制台输出显示了一个四舍五入的值,但是您可以参考ffprobe -v error -show_streams input.mp4
)。但是,您将另一个视频重新编码为23.98的帧速率。结果导致时间尺度差异为19184 tbn与48k tbn。
使用-r 24000/1001
(或alias -r ntsc-film
):
ffmpeg -i 1_original.mp4 -c:v libx264 -preset slow -profile:v baseline -vf setsar=1 -r 24000/1001 -c:a aac -ar 44100 1.mp4
我用setsar替换了比例滤镜以修复纵横比的差异,尽管该差异不会阻止concat多路分配器。
如果帧速率实际上是相同的,但是时间尺度不同,则可以使用-c copy
和-video_track_timescale
来重新复用。在此站点上有使用此选项的几个示例。