ffmpeg 向视频添加两个音频流

ffmpeg 向视频添加两个音频流

我尝试了这个:

ffmpeg -i /sdcard/video/transcode/video.avi -map 0:0,0 -i /sdcard/video/transcode/first.mp3 -map 1:0,1  -i /sdcard/video/transcode/second.mp3 -map 2:0,2 -acodec copy -vcodec py /sdcard/video/transcode/Output.avi

将两个音频流添加到一个视频文件。但 ffmpeg 说映射的数量应该与输出流的数量相匹配。这里有什么问题?


我正在尝试使用 FFmepg 的 Android 版本“Android 版 ffmpeg 测试版”。“不起作用”意味着此不具通信功能的 FFmpeg Android 版本会停止运行,而不会给出任何错误消息。该-codec copy选项不适用于此版本。

现在我尝试使用 Ubuntu 10 附带的名为 FFmpeg 的命令行工具来运行同一组文件。有些东西(不能说它来自哪里)。该-codec copy选项不适用于此 FFmpeg。

完整的输出如下:

m30x:~/movie/Film$ ffmpeg -i input.avi -i first.mp3 -i second.mp3 -map 0 -map 1 -map 2 -acodec copy -vcodec copy output.avi
FFmpeg version SVN-r0.5.9-4:0.5.9-0ubuntu0.10.04.1, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --extra-version=4:0.5.9-0ubuntu0.10.04.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --disable-stripping --disable-vhook --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 1 / 52.20. 1
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libavfilter    0. 4. 0 /  0. 4. 0
  libswscale     0. 7. 1 /  0. 7. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Jun 12 2012 16:27:34, gcc: 4.4.3
[NULL @ 0x93cfd10]looks like this file was encoded with (divx4/(old)xvid/opendivx) -> forcing low_delay flag

Seems stream 0 codec frame rate differs from container frame rate: 30000.00 (30000/1) -> 25.00 (25/1)
Input #0, avi, from 'input.avi':
  Duration: 01:30:33.00, start: 0.000000, bitrate: 901 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 576x432, 25 tbr, 25 tbn, 30k tbc
Input #1, mp3, from 'first.mp3':
  Duration: 01:30:32.84, start: 0.000000, bitrate: 63 kb/s
    Stream #1.0: Audio: mp3, 22050 Hz, stereo, s16, 64 kb/s
Input #2, mp3, from 'second.mp3':
  Duration: 01:30:32.84, start: 0.000000, bitrate: 63 kb/s
    Stream #2.0: Audio: mp3, 22050 Hz, stereo, s16, 64 kb/s
Number of stream maps must match number of output streams

仅将一个音频流与视频流合并适用于 Ubuntu 和 Android 版本的 FFmpeg。以下是完整输出:

ffmpeg -i input.avi -i first.mp3 -map 0 -map 1 -acodec copy -vcodec copy output.avi
FFmpeg version SVN-r0.5.9-4:0.5.9-0ubuntu0.10.04.1, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --extra-version=4:0.5.9-0ubuntu0.10.04.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --disable-stripping --disable-vhook --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 1 / 52.20. 1
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libavfilter    0. 4. 0 /  0. 4. 0
  libswscale     0. 7. 1 /  0. 7. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Jun 12 2012 16:27:34, gcc: 4.4.3
[NULL @ 0x9bfad10]looks like this file was encoded with (divx4/(old)xvid/opendivx) -> forcing low_delay flag

Seems stream 0 codec frame rate differs from container frame rate: 30000.00 (30000/1) -> 25.00 (25/1)
Input #0, avi, from 'input.avi':
  Duration: 01:30:33.00, start: 0.000000, bitrate: 901 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 576x432, 25 tbr, 25 tbn, 30k tbc
Input #1, mp3, from 'first.mp3':
  Duration: 01:30:32.84, start: 0.000000, bitrate: 63 kb/s
    Stream #1.0: Audio: mp3, 22050 Hz, stereo, s16, 64 kb/s
Output #0, avi, to 'output.avi':
    Stream #0.0: Video: mpeg4, yuv420p, 576x432, q=2-31, 90k tbn, 25 tbc
    Stream #0.1: Audio: libmp3lame, 22050 Hz, stereo, s16, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #1.0 -> #0.1
Press [q] to stop encoding
frame= 6157 fps=6156 q=-1.0 size=   31667kB time=246.28 bitrate=1053.3kbits/s   

您知道为什么它不能与两个音频流一起工作吗?

顺便一提,

ffmpeg -i input_with_first_audio_stream.avi -i second.mp3 -acodec copy -vcodec copy output_two_audio_streams.avi -newaudio

适用于我使用的两个版本的 ffmpeg,但第一个音频流播放得太快(x10 或更多),而第二个音频流播放正确。

提前致谢,并对我的非常规问题和过时的 ffmpeg 版本表示抱歉。但我是个跛脚的人,从源代码编译对我来说并不容易(尤其是对于 Android 版本)。我会尝试使用 Ubuntu 编译最新版本的 ffmpeg,但我没有太多空闲时间。

答案1

请参阅文档中的-map和选项。例如:-codec

ffmpeg -i video.avi -i audio1.mp3 -i audio2.mp3 -map 0 -map 1 -map 2 -codec copy output

另请参阅:

答案2

看来确实有人使用了过时的版本来编译在 Android 市场中找到的 Android 版 ffmpeg。由于输出减少,我无法找出哪个版本。使用 Jon Severinsson 的 FFmpeg PPA(LordNeckbeard 建议),一切都运行正常,正如实际 ffmpeg 文档中所述。-newaudio 在第二次运行中起作用,但损坏了第一个音轨。我将尝试在 ubuntu 下为 Android 构建一个最新版本。我会在有时间的时候这样做,并在论坛上报告。非常感谢您的帮助 LordNeckbeard!tossin

相关内容