ffmpeg连接两个具有相同长宽比和fps的视频文件,但仍然会丢失输出

时间:2019-01-10 21:33:57

标签: ffmpeg encode

我需要连接两个具有以下编码的剪辑

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

1 个答案:

答案 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来重新复用。在此站点上有使用此选项的几个示例。