作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 AVMutableComposition 混合音频和视频文件。下面是我的代码:
enter code here
AVMutableComposition* mixComposition = [AVMutableComposition composition];
NSString *bundleDirectory = [[NSBundle mainBundle] bundlePath];
NSString *audio_inputFilePath = [bundleDirectory stringByAppendingPathComponent:@"xyz.mp3"];//audio of 35 seconds
NSURL *audio_inputFileUrl = [NSURL fileURLWithPath:audio_inputFilePath];
NSURL *video_inputFileUrl = [NSURL fileURLWithPath:videoOutputPath];
NSString *outputFilePath = [documentsDirectory stringByAppendingPathComponent:@"video.mp4"];//video of 60 seconds
NSURL *outputFileUrl = [NSURL fileURLWithPath:outputFilePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:outputFilePath])
[[NSFileManager defaultManager] removeItemAtPath:outputFilePath error:nil];
CMTime nextClipStartTime = kCMTimeZero;
AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:video_inputFileUrl options:nil];
CMTimeRange video_timeRange = CMTimeRangeMake(kCMTimeZero,videoAsset.duration);
AVMutableCompositionTrack *a_compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
[a_compositionVideoTrack insertTimeRange:video_timeRange ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:nextClipStartTime error:nil];
AVURLAsset* audioAsset = [[AVURLAsset alloc]initWithURL:audio_inputFileUrl options:nil];
enter code here
CMTimeRange audio_timeRange = CMTimeRangeMake(kCMTimeZero, audioAsset.duration);
enter code here
AVMutableCompositionTrack *b_compositionAudioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[b_compositionAudioTrack insertTimeRange:audio_timeRange ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:nextClipStartTime error:nil];
enter code here
AVAssetExportSession* _assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPreset640x480];
我面临的问题是我的音频文件持续时间比视频持续时间短。所以我想做的是循环播放音频文件直到视频结束。就像我的视频是 60 秒,音频是 35 秒,所以音频应该重复 25 秒。
谁能帮我解决这个问题。
最佳答案
解决方案 1:在 AVMutableCompositionTrack
中创建新的 CMTimeRange
和 insertTimeRange
if (videoAsset.duration>audioAsset.duration)
{
//new time range
CMTime duration = CMTimeMakeWithSeconds(CMTimeGetSeconds(videoAsset.duration)-CMTimeGetSeconds(audioAsset.duration), audioAsset.duration.timescale);
if (CMTIME_IS_VALID(duration))
{
CMTimeRange video_timeRange2 = CMTimeRangeMake(audioAsset.duration,duration);
//start from where left
CMTime nextClipStartTime2 = audioAsset.duration;
//add in AVMutableCompositionTrack
[b_compositionVideoTrack insertTimeRange:video_timeRange2 ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:nextClipStartTime2 error:nil];
}
else
NSLog(@"time is invalid");
}
注意:未经测试,但应该可以工作。
编辑:
解决方案 2:试试这个。不要使用我的代码并将下面的这一行替换为您的代码
[b_compositionAudioTrack insertTimeRange:audio_timeRange ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:kCMTimeInvalid error:nil];
关于iphone - 如果视频持续时间比音频持续时间长,如何重复音轨,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16229484/
我现在正在查看一些代码: User.includes([:profile => :schedule]).where('...') 这会加载所有配置文件及其时间表。因此由此产生的查询是选择 * 用户字段
在我的 PgSQL 数据库中,我的列之一是“字符变化”。当我将 excel 文件中的数字保存到其中时,它会将 .0 添加到末尾。我该如何修剪它? 我试过 row[1].to_s.strip 但这并没有
我是一名优秀的程序员,十分优秀!