c - 如何对音频流使用混合和连接过滤器?

标签 c video ffmpeg blend

我尝试使用 concat、blend 和 amx 滤镜合并两个视频文件。

当我只使用视频流时,我成功了两个视频。 然后添加音频流代码(过滤器脚本) FFmpeg 不起作用。

  1. 两个视频交叉淡入淡出(干得好)

    ffmpeg -y -i "A.mp4"-i "B.mp4"-filter_complex “[0:v]分割[v000][v010];[1:v]分割[v100][v110];[v000]修剪=0:17[v001]; [v010]trim=17:27[v011t];[v011t]setpts=PTS-STARTPTS[v011];[v100]trim=0:10[v101]; [v110]trim=10:50[v111t];[v111t]setpts=PTS-STARTPTS[v111];[v101] [v011]blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1- (if(gte(T,10),1,T/10)))'[outv];[v001][outv][v111] concat=n=3[outv2]"-vcodec libx264 -map [outv2] -t 50 d:\Output\1.mp4

  2. 1 + 音频流

    ffmpeg -y -i“A.mp4”-i“B.mp4” -filter_complex "[0:v]分割[v000][v010];[1:v]分割[v100][v110];[v000]trim=0:17[v001];[v010]trim=17:27[ v011t];[v011t]setpts=PTS-STARTPTS[v011];[v100]trim=0:10[v101];[v110]trim=10:50[v111t];[v111t]setpts=PTS-STARTPTS[v111] ;[0:a]asplit[a000][a010];[1:a]asplit[a100][a110];[a000]atrim=0:17[a001];[v010]atrim=17:27[a011t] ;[a011t]asetpts=PTS-STARTPTS[a011];[a100]atrim=0:10[a101];[a110]atrim=10:50[a111t];[a111t]asetpts=PTS-STARTPTS[a111];[ v101][v011]blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1-(if(gte(T,10),1,T/10) )))'[outv];[a101][a011]amix=inputs=2:duration=first:dropout_transition=3[outa];[v001][outv][v111] [a001][outa][a111] concat =n=6:v=1:a=1:不安全=1 [outv2][outa2]" -vcodec libx264 -acodec aac -map [outv2] -map [outa2] -t 50 d:\Output\1.mp4

错误信息 “Parsed_blend_16”过滤器输出板 0(视频)和“Parsed_concat_18”过滤器输入板 1(音频)之间的媒体类型不匹配 [AVFilterGraph @ 026d3680] 无法创建链接 Blend:0 -> concat:1 初始化复杂过滤器时出错。 无效参数

如何解决?

ps。我认为过滤器脚本太复杂了。 你能让我知道如何使用 ffmpeg 的交叉淡入淡出更简单的方法吗?

最佳答案

已解决如果您想在脚本中同时使用视频和音频流,您应该先编写视频流脚本,然后再编写音频。

"[0:v]split[v000][v010];[1:v]split[v100][v110];
[v000]trim=0:17[v001];[v010]trim=17:27[v011t];[v011t]setpts=PTS-STARTPTS[v011];
[v100]trim=0:10[v101];[v110]trim=10:50[v111t];[v111t]setpts=PTS-STARTPTS[v111];
[v101][v011]blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1- 
(if(gte(T,10),1,T/10)))'[outv];
[v001][outv][v111] concat=n=3 [outv2];
[0:a]asplit[a000][a010];[1:a]asplit[a100][a110];[a000]atrim=0:17[a001];
[a010]atrim=17:27[a011t];[a011t]asetpts=PTS-STARTPTS[a011];
[a100]atrim=0:10[a101];[a110]atrim=10:50[a111t];
[a111t]asetpts=PTS-STARTPTS[a111];
[a101][a011]acrossfade=d=10[outa];
[a001][outa][a111] concat=n=3:v=0:a=1:unsafe=1 [outa2]"

关于c - 如何对音频流使用混合和连接过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58703758/

相关文章:

ffmpeg - 如何提高由静态 PNG 图像制作的视频的质量?

c++ - 如何在 C++ 中使用 ffmpeg 从视频中提取音频?

PHP7哈希表内部结构

c - 原子 if(A && B)?

android - Media Player同步播放音频和视频

HTML5 getUserMedia() 媒体源

ffmpeg - 如何使用 ffmpeg 记录特定窗口?

c - 关系运算符 == 在 C 中如何工作?

c++ - 使 system() 产生的子进程在父进程收到终止信号并退出后继续运行

video - 从ffmpeg中的图像创建视频时设置比特率不起作用