使用FFmpeg裁剪视频却仅生成音频,该如何解决?
解决FFmpeg裁剪视频仅出音频的问题
问题根源
你用的-c:v copy和-c:a copy是直接复制音视频流,没有重新编码。这种方式要求裁剪的起始时间-ss必须正好落在视频的关键帧位置上。如果指定的时间点不是关键帧,FFmpeg没法直接截取非关键帧开始的视频段,就会导致输出文件丢失视频流,只剩音频。
解决方案
方案1:快速裁剪(微小时间偏差,保留原编码)
把-ss参数移到输入文件-i的前面,让FFmpeg先定位到最接近指定时间的关键帧,再开始读取输入:
ffmpeg -ss 01:10:15 -i input.mp4 -to 01:10:20 -c:v copy -c:a copy output.mp4
这种方法速度快,输出文件和原文件编码一致,但起始时间可能和你指定的有几帧的微小偏差(通常可以忽略)。
方案2:精准裁剪(无时间偏差,需重新编码)
如果必须严格对齐指定的时间点,就放弃流复制,重新编码视频和音频:
ffmpeg -i input.mp4 -ss 01:10:15 -to 01:10:20 -c:v libx264 -c:a aac output.mp4
重新编码会处理非关键帧的内容,保证时间精准,但速度会慢一些,因为需要重新压缩视频。你可以添加-crf 23(视频质量参数,数值越小质量越高,默认23)来调整输出质量。
方案3:提前查看关键帧位置
如果想确认指定时间是否在关键帧上,可以用ffprobe工具查看所有关键帧的时间点:
ffprobe -select_streams v -show_frames -show_entries frame=pkt_pts_time,key_frame input.mp4 | grep -E 'key_frame=1|pkt_pts_time'
输出里key_frame=1对应的pkt_pts_time就是关键帧的时间,对比你指定的-ss时间就能判断问题所在。
针对MKV格式的补充
MKV封装对关键帧的兼容性比MP4好,但如果同样出现问题,上面的方案依然适用,优先用方案1快速裁剪,需要精准时用方案2。
内容的提问来源于stack exchange,提问作者Pexicade
相关产品推荐
相关产品推荐

