ffmpeg concat压缩视频导致错误的时间跨度

时间:2019-07-13 10:27:59

标签: video ffmpeg concat

我使用

ffmpeg.exe -f concat -i file_path_list_txt -c copy out_out.mp4

连接

for file in 1265_*; do ffmpeg -i $file -crf 30 -b:a 23k -b:v 96k -threads 3 -y 'out_'$file; done

压缩视频。

当我播放生成的视频时,播放器显示视频长度比压缩视频片段的总和长得多。并且在切片之间的链接处,框架可以播放很长时间,播放器上的时间在继续,但是框架仍然是静止的。

我使用ffprobe来显示原始视频片段和压缩视频片段。并找到具有相同tbr,tbn,tbc的原始视频,而压缩后的视频却没有。

原始视频:

Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, progressive), 1600x1144, 134 kb/s, 8.17 fps, 600 tbr, 600 tbn, 1200 tbc (default)
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, progressive), 1600x1144, 138 kb/s, 9.73 fps, 600 tbr, 600 tbn, 1200 tbc (default)

压缩视频:

Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1600x1144, 174 kb/s, 8.17 fps, 8.17 tbr, 245050 tbn, 16.33 tbc (default)
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1600x1144, 127 kb/s, 9.73 fps, 9.73 tbr, 1750800 tbn, 19.45 tbc (default)

当我连接时,在控制台中,ffmpeg显示以下信息:

[mp4 @ 000001fe0193b700] Application provided duration: 2585263321 / timestamp: 6303355764 is out of range for mov/mp4 format
[mp4 @ 000001fe0193b700] pts has no value
[mp4 @ 000001fe0193b700] Application provided duration: 2585443321 / timestamp: 6303535765 is out of range for mov/mp4 format
[mp4 @ 000001fe0193b700] pts has no value

在我的情况下,视频片段是逐时间生成的,我不知道它何时停止,因此在压缩之前我无法进行concat。每次生成视频片段时,我都会对其进行压缩并附加。

2 个答案:

答案 0 :(得分:1)

压缩为MOV / MP4时,请使用tbn设置公共时标-video_track_timescale N。对于您的输入,N = 600看起来不错。

答案 1 :(得分:0)

借助Gyan's answer,我使它可以工作,我需要设置conda install ...的压缩和附加过程。

详细信息如下:

每次生成新的视频片段时,将tbntbn一起使用,然后将其压缩,

get_video_attributes

然后将压缩后的片段附加到上一个视频中, ffmpeg -i $video_path_i -crf 30 -b:a 23k -b:v 96k -video_track_timescale $tbn -threads 3 -y 'out_'$file

ffmpeg.exe -f concat -i file_path_list_txt -video_track_timescale $tbn -c copy out_out.mp4