使用FFmpeg为剪辑视频添加原视频时间戳与总时长
解决方法
要实现显示原视频时间戳与总时长的需求,需要给剪辑后的视频时间加上起始偏移量,并提前获取原视频的总时长,具体步骤如下:
1. 获取原视频总时长
先用ffprobe提取原视频的总时长并格式化为HH:MM:SS格式:
in_file="你的原视频文件名.mp4" # 获取原视频总时长,格式化为HH:MM:SS total_duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$in_file" | awk '{printf "%02d:%02d:%02d", int($1/3600), int(($1%3600)/60), int($1%60)}')
2. 带原时间戳的FFmpeg剪辑命令
使用drawtext滤镜时,通过pts:hms:起始偏移秒数计算原视频的时间戳,再拼接总时长:
ffmpeg -i "$in_file" -ss 00:00:05 -t 5 -vf "drawtext=fontfile=font.ttf:text='%{pts\:hms\:5}/$total_duration':fontsize=24:fontcolor=white:box=1:boxcolor=black@0.5:boxborderw=5:x=(w-text_w-10):y=(h-text_h-10)" -c:a copy -c:v libx264 out_file.mp4
参数说明
%{pts\:hms\:5}:pts是剪辑后视频的当前帧时间(从0开始),加上5秒的起始偏移后,格式化为HH:MM:SS,对应原视频的时间戳/$total_duration:拼接原视频的总时长,实现00:00:05/00:00:30的显示效果x=(w-text_w-10):y=(h-text_h-10):将时间戳定位在右下角,距离边缘10像素-ss 00:00:05 -t 5:截取原视频5秒到10秒的片段(时长5秒)-c:a copy:直接复制音频流,避免重新编码
注意:如果你的font.ttf路径不在当前目录,需要写完整路径(比如/usr/share/fonts/TTF/DejaVuSans.ttf)。
内容的提问来源于stack exchange,提问作者Kes
相关产品推荐
相关产品推荐

