我使用
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。每次生成视频片段时,我都会对其进行压缩并附加。
答案 0 :(得分:1)
压缩为MOV / MP4时,请使用tbn
设置公共时标-video_track_timescale N
。对于您的输入,N = 600看起来不错。
答案 1 :(得分:0)
借助Gyan's answer,我使它可以工作,我需要设置conda install ...
的压缩和附加过程。
详细信息如下:
每次生成新的视频片段时,将tbn
与tbn
一起使用,然后将其压缩,
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