2

我编写了一个 c++ 程序,它需要将一些(比如:10)mp4 视频转换为 flv 视频。我在我的程序中为每个视频使用 ffmpeg,如下所示:

system("ffmpeg -i video -filter:v yadif -ar 44100 -sameq -y -f flv temp.flv")

然而,事实证明:只有第一个视频会成功转换,其他视频会失败。
这意味着:
当我更改要转换的视频的输入顺序并重新执行程序时,它的行为相同:只有第一个视频(每次更改输入视频顺序时都会有所不同)将被成功转换。

错误消息如下:

[h264 @ 0xaee0740] 隐藏 45 DC、45 AC、45 MV 错误
[h264 @ 0xaee0ce0] AVC:最终大小 305665
最后消息重复 1 次
[h264 @ 0xaee0ce0] 无帧!
[h264 @ 0xaee1280] AVC:最终大小 572993
最后一条消息重复了 1 次
[h264 @ 0xaee1280] 无帧!
[aac @ 0xad9ccc0] 未分配通道元素 0.13
解码流 #0:1 时出错
[aac @ 0xad9ccc0] 未分配通道元素 0.13
解码流 #0:1 时出错
[aac @ 0xad9ccc0] 未分配通道元素 0.13
错误whiledecode stream #0:1
......
最奇怪的是:当我在 bash shell 中运行 ffmpeg 命令时,所有视频都会成功转换.

谷歌之后,我尝试了这些(当然失败了):

  1. 去掉 -sameq 选项,结果是一样的;
  2. 在 shell 脚本 ConvertToFlv.sh 中编写 ffmpeg commod,例如:

    /usr/local/bin/ffmpeg -i "$dir/$1" -filter:v yadif -ar 44100 -sameq -y -f flv "$dir/temp.fiv"
    

    然后在程序中调用这个脚本

    system("ConvertToFlv.sh"+video)
    

    或者

    system("sh ConvertToFlv.sh"+video)
    

    结果是一样的。

ffmpeg 配置为:

  ffmpeg version 0.9.1.git Copyright (c) 2000-2012 the FFmpeg developers
  built on Dec 17 2012 16:17:30 with gcc 4.1.2 20080704 (Red Hat 4.1.2-48)
  configuration: --enable-gpl --enable-postproc --enable-nonfree --enable-postproc --enable-swscale --enable-avfilter --enable-pthreads --enable-libxvid --enable-libx264 --enable-libmp3lame --enable-libfaac --disable-ffserver --disable-ffplay
  libavutil      51. 41.100 / 51. 41.100
  libavcodec     54.  4.100 / 54.  4.100
  libavformat    54.  1.100 / 54.  1.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 62.101 /  2. 62.101
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  7.100 /  0.  7.100
  libpostproc    52.  0.100 / 52.  0.100

我的机器环境是:

Linux master 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

我现在很烦躁,希望有人能给我一些建议,真的很感激。

4

0 回答 0