Windows系统下使用FFmpeg提取视频非规则多段内容的方法咨询
Windows系统下使用FFmpeg提取视频非规则多段内容的方法咨询
我现在遇到了个FFmpeg的使用难题,想请教大家怎么解决:我需要从视频里提取几个不连续的片段(还可能要把它们合并),但试了几种方法都不太顺利。
和我查到的那些按固定间隔提取片段的示例不同,我的需求是提取任意时间点的片段。我查了不少资料后,尝试用concat分离器的方法,命令如下:
ffmpeg -f concat -i seg.txt -c copy out_%03d.mp4
但这个命令跑不通,主要有两个问题:
- 输出文件名
out_%03d.mp4没有自动展开成out_001.mp4、out_002.mp4这类序列文件; - 输入文件的配置被FFmpeg标记为“有问题”,具体报错信息我放在了
seg.txt的末尾。
下面是seg.txt的完整内容:
#file 'e:\tmp\video\kr.mp4' ... file 'KR.mp4' inpoint 75.0 outpoint 92.0 inpoint 275.0 outpoint 300.0 inpoint 1049.0 outpoint 1082.0 # [eof] # errors: #[concat @ 05a6a5c0] Unsafe file name 'E:\tmp\video\kr.mp4' #seg.txt: Operation not permitted #seg.txt: Invalid data found when processing input
除了这个方法,我也试过直接在一条命令里指定多个输出片段,比如:
ffmpeg -i kr.mp4 ^ -c:v libx264 -pix_fmt yuv420p -r 25 -y ^ -preset ultrafast -crf 38 ^ -ss 75.0 -to 92.0 out_001.mp4 ^ -ss 275.0 -to 300.0 out_002.mp4 ^ -ss 1049.0 -to 1082.0 out_003.mp4
但实际需求里,每个片段都要加滤镜参数(比如指定字体文件、字号等),再加上视频文件的路径,如果要提取50多个片段的话,命令长度肯定会超过Windows命令行8192字符的限制,这个方法显然不太行。
我的运行环境是Windows 8 32位,用的FFmpeg版本是n6.0-22-g549430e14d-20230529,在cmd.exe里执行命令,而且因为找不到更新的32位版本,没法升级FFmpeg。
想请大家指点下:
- 怎么正确调用FFmpeg实现我的需求?
- 带路径的输入文件名该怎么正确指定?
- 怎么让输出文件的掩码
out_%03d.mp4正常展开? - 如果把命令写到批处理文件里,转义规则该怎么处理?
谢谢大家的帮助!
备注:内容来源于stack exchange,提问作者Skeeve
相关产品推荐
相关产品推荐

