ffmpeg - ffmpeg 从文件中读取并立即应用 filter_complex
问题描述
我正在fls.txt
接受ffmpeg -i
并申请concat
和加速。
fls.txt
file 'input1.mp4'
file 'input2.mp4'
file 'input3.mp4'
一口气的命令如下所示:
ffmpeg -i fls.txt \
-filter_complex "[0:v][0:a][1:v][1:a][2:v][2:a] concat=n=3:v=1:a=1 [v][a];\
[v]setpts=0.5*PTS[v1];[a]atempo=2,asetpts=N/SR/TB[a1]" \
-c:v h264_nvenc -map "[v1]" -map "[a1]" x2.mp4
a
输出真的很奇怪,说找不到流之类的东西。而且它看起来好像是在试图理解它fls.txt
本身而不是它的内容作为参数。我在这里做错了什么,我该如何纠正?此外,这是一个简化的示例,我不能手动编写 3 个输入文件路径。我需要从文件中读取它。如果这很重要,我在 Windows 10 上。
编辑:通过进行建议的编辑并扩展-filter_complex
我在下面得到一个错误。
ffmpeg -f concat -safe 0 -i fls.txt \
-filter_complex "[0:v]setpts=0.5*PTS[v1];[v1]setpts=0.5*PTS[v2];[0:a]atempo=2,asetpts=N/SR/TB[a1];[a1]atempo=2,asetpts=N/SR/TB[a2]" \
-c:v h264_nvenc -map "[v1]" -map "[a1]" x2.mp4 \
-c:v h264_nvenc -map "[v2]" -map "[a2]" x4.mp4
错误:
Output with label 'v1' does not exist in any defined filter graph, or was already used elsewhere.
解决方案
filtergraph 描述中的流说明符 ':a' ... 不匹配任何流。
要启用 concat demuxer,您必须-f concat
在-i fls.txt
.
ffmpeg -f concat -i fls.txt \
-filter_complex "[0:v]setpts=0.5*PTS[v1];[0:a]atempo=2,asetpts=N/SR/TB[a1]" \
-c:v h264_nvenc -map "[v1]" -map "[a1]" x2.mp4
因为您正在尝试使用concat demuxer,所以也不需要concat 过滤器,因此您可以简化命令。
您可能还必须使用-safe 0
before-i
您可以在文档中阅读。
后续问题:带有标签“v1”的输出在任何定义的过滤器图中都不存在,或者已经在其他地方使用过
您不能重复使用已使用的过滤器输出标签,因此本示例避免了这种情况:
ffmpeg -f concat -safe 0 -i fls.txt \
-filter_complex "[0:v]setpts=0.5*PTS[2xv];[0:v]setpts=PTS/4[4xv];[0:a]atempo=2,asetpts=N/SR/TB[2xa];[0:a]atempo=4,asetpts=N/SR/TB[4xa]" \
-c:v h264_nvenc -map "[2xv]" -map "[2xa]" x2.mp4 \
-c:v h264_nvenc -map "[4xv]" -map "[4xa]" x4.mp4
推荐阅读
- javascript - 在对象或数组中查找字符串的路径
- c++ - ROS 是否为每个订阅者发送单独的消息?
- android - 在lostfocus的android edtitext中进行计算
- python - Django充当浏览器
- assembly - 仅使用 ADD、MOV 和 SUB 存储在 EBX 中的二进制补码
- java - 如何在 Windows 10 Power Shell 中运行 java 命令?
- java - JPA 和休眠:NonUniqueObjectException。不明白原因
- python - 如何从网页中的书中提取文本?
- ios - 更改 ScrollView SwiftUI 的背景颜色
- node.js - 意外的空对象模式 no-empty-pattern