我正在尝试对视频文件进行分段,对每个片段进行转码,然后将它们全部拼接回一个。该过程正在运行,但我注意到最终文件的持续时间与原始文件的持续时间不同。可能是因为我正在转码为与源帧速率不同的固定帧速率。
要分割我使用的视频:
ffmpeg -y -i video_only.mp4 -c copy -flags -global_header -segment_time 50 -break_non_keyframes 0 -reset_timestamps 0 \
-segment_list file_segs.list -segment_format mp4 -segment_list_type ffconcat -write_empty_segments 0 \
-f segment file_seg-%d.mp4
然后,使用此命令对每个段进行转码:
ffmpeg -y -i $f -vcodec libx264 -vsync 1 -crf 18 -vf "fps=30" -pix_fmt yuv420p -preset:v fast -profile:v main -level:v 4.1 transcoded/$f
最后,concat:
ffmpeg -y -f concat -i file_segs.list -c:v copy -c:a copy -movflags +faststart video_final.mp4
我尝试在过滤器(-vf)上使用“-r 30”,结果相同。 由于这是转码系统的一部分,我不想在转码之前检查输入文件fps,因为它可以是任何东西 - 变量fps(也不容易检测)
在这种转码流程中改变帧速率时,有什么方法可以保持持续时间不变?