ffmpeg用循环音频替换部分音频文件

时间:2015-12-01 11:33:36

标签: audio ffmpeg

我对ffmpeg很新,我试图用另一个第二个文件替换第一个音频文件的一部分。第二个文件可能太短,因此应该存在某种循环。

经过一些研究后,我想出了以下命令参数,只要我只做一次替换就会给出输出。但我想做多次更换。那么对我做错的任何帮助呢?对工作方式的任何建议/评论也非常欢迎。

(以下命令中的任何拼写错误都可以忽略,我通过脚本生成命令,为了便于使用,我简化了名称。)

作品(一次替换):

"ffmpeg.exe" -y -i "first.wav" -i "second.wav" -filter_complex "[1:a][1:a][1:a]concat=n=3:v=0:a=1,asetpts=PTS-STARTPTS[replaceBase];[0:a]atrim=0:3,asetpts=PTS-STARTPTS[partA];[replaceBase]atrim=0:2,asetpts=PTS-STARTPTS[replaceA];[0:a]atrim=start=5,asetpts=PTS-STARTPTS[partB];[partA][replaceA][partB]concat=n=3:v=0:a=1[aout]" -map "[aout]" Out.wav

不工作(多次替换):

"ffmpeg.exe" -y -i "first.wav" -i "second.wav" -filter_complex "[1:a][1:a][1:a]concat=n=3:v=0:a=1,asetpts=PTS-STARTPTS[replaceBase];[0:a]atrim=0:3,asetpts=PTS-STARTPTS[partA];[replaceBase]atrim=0:2,asetpts=PTS-STARTPTS[replaceA];[0:a]atrim=5:4,asetpts=PTS-STARTPTS[partB];[replaceBase]atrim=0:2,asetpts=PTS-STARTPTS[replaceB];[0:a]atrim=start=6,asetpts=PTS-STARTPTS[partC];[partA][replaceA][partB][replaceB][PartC]concat=n=4:v=0:a=1[aout]" -map "[aout]" Out.wav
  

ffmpeg版本N-76860-g72eaf72版权所有(c)2000-2015 FFmpeg开发人员     用gcc 5.2.0(GCC)构建     配置: - enable-gpl --enable-version3 --disable -w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable -libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable -libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable- libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib     libavutil 55. 9.100 / 55. 9.100     libavcodec 57. 16.100 / 57. 16.100     libavformat 57. 19.100 / 57. 19.100     libavdevice 57. 0.100 / 57. 0.100     libavfilter 6. 15.100 / 6. 15.100     libswscale 4. 0.100 / 4. 0.100     libswresample 2. 0.101 / 2. 0.101     libpostproc 54. 0.100 / 54. 0.100   输入流#0.0的猜测通道布局:立体声   输入#0,wav,来自' 3897583stereo.wav':     持续时间:00:00:12.07,比特率:256 kb / s       流#0:0:音频:pcm_s16le([1] [0] [0] [0] / 0x0001),8000 Hz,2个通道,s16,256 kb / s   输入流#1.0的猜测通道布局:立体声   输入#1,wav,来自' beep-021.wav':     元数据:       编码器:Lavf57.19.100     持续时间:00:00:00.30,比特率:1413 kb / s       流#1:0:音频:pcm_s16le([1] [0] [0] [0] / 0x0001),44100 Hz,2个通道,s16,1411 kb / s   [wav @ 057242c0]无效的流说明符:replaceBase。       最后一条消息重复了1次   流指定符' STREAM CUT 不匹配任何流。

提前致谢!

1 个答案:

答案 0 :(得分:1)

我设法通过使用asplit分割循环流来找到解决方法(或者可能只是应该如何完成)。关于加工方式的评论仍然受欢迎......

    NSString *thumbnail_url = [tempObject objectForKey:@"image"];
    NSURL  *url = [NSURL URLWithString:thumbnail_url];
    NSURLSession *session = [NSURLSession sharedSession];

    NSURLSessionDownloadTask *downloadPhotoTask = [session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
            NSData *imageData = [[NSData alloc] initWithContentsOfURL:location];
            dispatch_async(dispatch_get_main_queue(), ^{
                cell.tableImageView.image = [UIImage imageWithData:imageData];
        });
    }];

    [downloadPhotoTask resume];

此致