我有2个视频(相同的分辨率,相同的编码)文件,我想连接,我想在它们之间插入一些文本3秒,作为分割器.我在Windows上用ffmpeg做这个.
我感兴趣的可选想法:
现在,我将文本作为图像(但我对其他建议持开放态度).比方说我有:
我尝试了一些东西,但我总是遇到同样的问题:视频是23:20(视频1 + 3秒+视频2),但3秒间隙只是最后一个视频1帧冻结而不是我的图像/文字...
任何想法我做错了什么或我应该如何做到这一点?
这是我到目前为止尝试的内容:
将图像转换为3秒mp4胶片,然后将其与其他胶片连接(分离器):
ffmpeg -loop 1 -f image2 -i splitter.png -r 30 -t 3 splitter.mp4
ffmpeg -f concat -i input.txt -codec copy output.mp4
Run Code Online (Sandbox Code Playgroud)
凡input.txt样子:
file 'E:\video1.mp4'
file 'E:\splitter.mp4'
file 'E:\video2.mp4'
Run Code Online (Sandbox Code Playgroud)
内容splitter.png是可见的splitter.mp4,但不是在output.mp4.此外,我不完全确定splitter.mp4尊重与2个视频完全相同的编码,我不知道如何验证.
直接在图像上运行concat(demuxer)90次(30fps - > 3秒)
ffmpeg -f concat -i input.txt -codec copy output.mp4
Run Code Online (Sandbox Code Playgroud)
凡input.txt样子:
file 'E:\video1.mp4'
file 'E:\splitter.png'
...
file 'E:\splitter.png'
file 'E:\video2.mp4'
Run Code Online (Sandbox Code Playgroud)
由于我所做的只是截屏,我不妨截取我的分割器图像.这样我就可以确定音频和视频编码,并且不会有任何问题合并,也不需要任何重新编码...我知道它可能听起来很愚蠢,但它可能会成功...
注意:我没有尝试过,因为我已经通过Openshot工作了.
我不明白为什么addEventListener只能在循环之外工作.使用以下代码,我在JsFiddle(http://jsfiddle.net/E7gaZ/1/)中创建了示例:
window.addEventListener('load', function (){
document.getElementById('myId').addEventListener(
'click', myHandler, false
);
var myClass = document.getElementsByClassName('myClass');
for(var i=0; i<myClass.length; i++) {
myClass[i].addEventListener("onclick", myHandler, false);
}
});
function myHandler(ev) {
alert(ev.target.innerHTML);
ev.preventDefault();
}
Run Code Online (Sandbox Code Playgroud)
在警告"myId"时单击"myId"链接并阻止页面重新加载,而其他链接将不会调用myHandler.
以下方法似乎运行良好(仍在window.load事件内部(http://jsfiddle.net/E7gaZ/2/):
document.getElementById('myId').onclick = myHandler;
var myClass = document.getElementsByClassName('myClass');
for(var i=0; i<myClass.length; i++) {
myClass[i].onclick = myHandler;
}
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?
编辑:我为什么要用addEventListener而不是.onclick =?因为我可以在同一个事件上添加多个侦听器.
编辑:谢谢你的解决方案,伙计们.作为结论,它正在研究myId因为我使用了正确的语法(click)而不是*myClass,因为语法错误(onclick).