关于Android中的交叉淡化有很多问题,但它们都包含动画.我的问题是关于使用ViewPager的OnPageChangeListener进行交叉淡化.
我有一个ViewPager可以有无限数量的视图,但实际上使用大约6或7个视图.没那么多.
ViewPager中的每个视图都有一个背景位图,应该固定并与下一个(或上一个)视图的背景交叉淡入淡出,而不是与视图的其余部分一起滚动.
为了实现这一点,我将背景分离并添加到ArrayList并稍后将它们分配给ImageViews.但是因为我不想冒险让我的Activity最终有大量的ImageViews,我想到了以下结构:
<FrameLayout
android:id="@+id/backgroundContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/bottomImage"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:scaleType="center" />
<ImageView
android:id="@+id/middleImage"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:scaleType="center" />
<ImageView
android:id="@+id/topImage"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:scaleType="center" />
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
然后将a OnPageChangeListener
分配给ViewPager,以将背景分配给ImageView.
@Override
public void onPageSelected(int position) {
MyLog.i(TAG, "PAGE SELECTED: " + position);
if(position == 0) {
_bottomBackground.setImageBitmap(null);
_topBackground.setImageBitmap(_backgroundStack.get(position+1));
} else if (position == NUM_ITEMS-1) {
_bottomBackground.setImageBitmap(_backgroundStack.get(position-1));
_topBackground.setImageBitmap(null);
} else {
_bottomBackground.setImageBitmap(_backgroundStack.get(position-1));
_topBackground.setImageBitmap(_backgroundStack.get(position+1));
}
_middleBackground.setImageBitmap(_backgroundStack.get(position));
// Make the top front background transparent
_topBackground.setAlpha(0f);
_currentBackgroundPosition = position;
}
Run Code Online (Sandbox Code Playgroud)
如果我想要交换背景,这样可以正常工作.当用户滑动ViewPager时,我希望背景交叉淡入淡出.我有一个前进滚动工作的淡入淡出,但我不明白为什么向后滚动的淡入某种方式不会给出一个好的结果.在向后滚动期间,中间背景应淡入底部背景.
我怕我错过了什么.我永远不会更改底部背景的alpha,但Log结果始终显示getAlpha()
与中间背景完全相同的值. …
我目前可以将一系列图像转换为视频,但我还需要在它们之间添加过渡/动画。
String[] ffmpegCommand = {"/data/data/mypackage/app_bin/ffmpeg", "-y",
"-qscale", "1", "-r", "" + framerate, "-i", "/data/data/mypackage/app_ipImg/image%3d.jpg",
"-t", "" + (((total_images) * delay_of_each_frame_in_seconds) + 4), //"-s",heightwidth,
"-vcodec", "libx264", "-s", "640x480",
Environment.getExternalStorageDirectory() + "/photo_directory/myVideo.mp4"};
Run Code Online (Sandbox Code Playgroud)
上面的命令适用于我从图像系列创建视频
但
现在,我确实想在每个帧之前添加要在最终视频中显示的淡入淡出或其他过渡/动画。
我用谷歌搜索了很多,但还没有找到解决这个问题的方法。
请给我建议方法。
提前致谢。
我想使用ffmpeg无限播放动态播放列表。这个想法是,执行外部命令/脚本来请求下一个文件的路径(使用文件的预测开始时间作为参数)并继续无限播放文件。
从“使用 FFMPEG 将连续视频文件流式传输到 RTMP 服务器”的答案中,我了解到,我需要编写一个自定义解复用器,类似于解concat
复用器。问题源于这样一个事实,即我想在音频文件之间进行交叉淡入淡出,并且根据我对解复用器的理解,我必须将该功能实现到解复用器本身才能做到这一点,因为解复用器只能产生一个(或有限数量)音频输出流,并且您需要两个才能使用acrossfade
-filter。
所以我必须像这样设置过滤器图:
file1 --------------------------------*-->| cross | ---->more filters ---> Output
file2 -----------------*-->| cross |----->| fade |
file3 --*-->| cross |----->| fade |
... ->| fade |
Run Code Online (Sandbox Code Playgroud)
使用无限数量的交叉淡入淡出滤镜。
另外,我真的很想silenceremove
在交叉淡入淡出之前对音频文件进行预过滤(*,例如),这使得它变得更加复杂,并且“在解复用器中实现所有内容”方法甚至更糟。
我当前的解决方案是实现一个自定义解复用器,该解复用器在两个输出流之间交替,并在内部进行预过滤,以及输入交替交叉淡入淡出过滤器,如下所示:
files -> | alternating |----->| alternating | ----> more filters--->
| demuxer* |----->| crossfade |
Run Code Online (Sandbox Code Playgroud)
我看到这种方法的问题是,我需要将多个 EOF 终止的文件从解复用器发送到交叉淡入淡出过滤器,并且我不知道在使用标准 ffmpeg 函数(例如ff_request_frame
.
您能告诉我这种方法是否可行,或者您是否有更好的解决方案来解决这个问题,或者有什么想法可以让这个问题变得更容易?
我正在制作一个带有一些视差图像的响应式网站,第一个图像是一个循环图像,就像一个图像滑块.我正在使用jquery Cool小猫的响应能力.
我加载的相关jquery插件是:
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="js/jquery-ui.js"></script>
Run Code Online (Sandbox Code Playgroud)
div的css是:
#slide2 {
background-image:url(../images/darkmap.png);
height:700px;
}
Run Code Online (Sandbox Code Playgroud)
我发现使用这种布局将HTML图像用于背景可能会有问题,这就是为什么我通过使用数组来避免这种情况:
var imageIndex = 0;
var imagesArray = [
"images/photo1.png",
"images/photo2.png",
"images/photo3.png"
];
Run Code Online (Sandbox Code Playgroud)
我有一个包含在$(document).ready()
函数中的代码,它将css背景更改为数组,然后循环遍历数组,我添加fadeIn()
了平滑过渡:
function changeImage(){
var index = imageIndex++ % imagesArray.length;
$("#slide2").css("background","url('"+ imagesArray[index] +"')");
}
setInterval(changeImage, 5000);
changeImage.fadeIn();
Run Code Online (Sandbox Code Playgroud)
图像循环工作正常,但由于某种原因fadeIn()
,它不起作用,它只是从一个图像闪烁到另一个图像.有人可以告诉我我错过了什么吗?
我正在尝试将多个音频文件与 3 秒交叉淡入淡出一起交叉淡入淡出,然后使用 sox 将它们合并到一个文件中。
我可以通过以下命令将多个文件连接在一起,但不确定如何在每个文件之间交叉淡入淡出:
sox $(ls /tmp/a*.wav | sort -n) /tmp/out/out.wav
Run Code Online (Sandbox Code Playgroud)
我可以使用下面的命令交叉淡入淡出两个文件,但不确定如何将连接多个文件的第一行与拼接/交叉淡入淡出的第二行组合在一起
sox 100hz.wav 440hz.wav out.wav splice $(soxi -D 100hz.wav),3
Run Code Online (Sandbox Code Playgroud)
我发现了这个问题,但答案对我不起作用。 使用 sox splice 淡入淡出一组音频文件
我想将交叉渐变应用于具有前x帧的视频的最后x帧,以便获得无缝循环.
我怎样才能做到这一点?
我有两个 mp3 文件,想将它们连接成一个新文件。但是,我只想要每个文件的一部分,我想在两者之间创建一个交叉淡入淡出。
例如,我想要 a.mp3 的前 3 分钟,然后在 5 秒内从 1:20 分钟标记(在 b.mp3 内)开始淡入到 b.mp3。
这是我想要的时间线插图:
因此,生成的文件的总长度将是 3:05 分钟加上 b.mp3 的长度减去 1:25 分钟,这归结为 b.mp3 的长度加上 1:40 分钟。
我对 ffmpeg 的源选择、映射和过滤器语法太缺乏经验,无法获得我想要的结果。例如,我可以对一个 mp3 文件应用淡入或淡出,但我不知道如何使这两个文件重叠,从而导致两个音频源之间出现淡入淡出。
只是为了清楚起见:我正在寻找一个命令行来执行此操作,即使用独立版本的 ffmpeg,我没有将 ffmpeg 用作应用程序或任何内容中的库。
我需要将多个视频文件(包含音频)合并到一个视频中。我注意到最近发布并使用了 xfade,但我遇到了音频同步问题。
所有视频的视频和音频都采用相同的格式/分辨率/声望和比特率/等。
这是我使用 0.5 交叉淡入淡出过渡合并 5 个不同持续时间的视频的方法:
ffmpeg \
-i v0.mp4 \
-i v1.mp4 \
-i v2.mp4 \
-i v3.mp4 \
-i v4.mp4 \
-filter_complex \
"[0][1]xfade=transition=fade:duration=0.5:offset=3.5[V01]; \
[V01][2]xfade=transition=fade:duration=0.5:offset=32.75[V02]; \
[V02][3]xfade=transition=fade:duration=0.5:offset=67.75[V03]; \
[V03][4]xfade=transition=fade:duration=0.5:offset=98.75[video]; \
[0:a][1:a]acrossfade=d=0.5:c1=tri:c2=tri[A01]; \
[A01][2:a]acrossfade=d=0.5:c1=tri:c2=tri[A02]; \
[A02][3:a]acrossfade=d=0.5:c1=tri:c2=tri[A03]; \
[A03][4:a]acrossfade=d=0.5:c1=tri:c2=tri[audio]" \
-vsync 0 -map "[video]" -map "[audio]" out.mp4
Run Code Online (Sandbox Code Playgroud)
上面的代码生成一个带音频的视频。第一段和第二段与音频对齐,但从第二个过渡开始,声音未对齐。
我在网站上有一个多步骤的网络表单.当一个人点击下一个时,div会逐渐消失,因为div二渐渐淡入.我看到的问题是当div一个淡出div二衰落在div一个下面然后跳跃一旦div一个淡出.
我如何防止这种情况并让它们实际交叉淡入淡出?
HTML
<div class="step-1">
<!-- CODE -->
</div >
<div class="step-2">
<!-- THIS DIV IS HIDDEN TO BEGIN WITH -->
</div >
Run Code Online (Sandbox Code Playgroud)
JS
$( ".step-1-next" ).on( "click", function() {
$( ".step-1" ).fadeOut( "slow" );
$( ".step-2" ).fadeIn( "slow" );
return false;
});
Run Code Online (Sandbox Code Playgroud) 我使用 CSS 创建了一个交叉淡入淡出,但我在时间方面遇到了困难。我希望每个图像之间延迟 4 秒或 4 秒,但它不起作用。
#cf {
position:absolute;
margin:0 auto;
width: 100%;
height: 100%;
top: 0;
}
#cf img {
position:absolute;
left:0;
-webkit-transition: opacity 1s ease-in-out;
-moz-transition: opacity 1s ease-in-out;
-o-transition: opacity 1s ease-in-out;
transition: opacity 1s ease-in-out;
z-index: -1;
}
@-webkit-keyframes cf4FadeInOut {
0% {
opacity:1;
}
15% {
opacity:1;
}
55% {
opacity:0;
}
100% {
opacity:0;
}
}
@-moz-keyframes cf4FadeInOut {
0% {
opacity:1;
}
15% {
opacity:1;
}
55% {
opacity:0;
}
100% { …
Run Code Online (Sandbox Code Playgroud)关于UIImage
使用动画的交叉渐变有很多帖子.但我找不到如何在没有动画的情况下控制交叉渐变,而是由我自己控制; 例如,在0.0
和之间的参数1.0
控制交叉淡入淡出量.
我可以把两个UIImageView
s放在一起并控制alpha
(顶部一个从底部1.0
开始0.0
,底部一个在1.0
),但这不是一个正确的交叉淡化AFAIK.
为了使它更加图形化:在屏幕上有一个滑块,它给出一个介于0.0
和之间的值1.0
,在它上面是一个图像.我想要的是在最初显示的图像(当滑块是0.0
)和另一个图像(如果滑块是完全可见的)之间交叉淡入淡出1.0
.因此,当您慢慢移动滑块时,您会看到另一个图像慢慢显示.