我写了一个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:nal size 305665
最后一条消息重复1次
[h264 @ 0xaee0ce0]没有框架!
[h264 @ 0xaee1280] AVC:nal size 572993
最后一条消息重复1次
[h264 @ 0xaee1280]没有框架!
[aac @ 0xad9ccc0]通道元素0.13未分配
解码流#0时出错:1
[aac @ 0xad9ccc0]通道元素0.13未分配
解码流#0时出错:1
[aac @ 0xad9ccc0]通道元素0.13未分配
解码流#0时出错:1
......
最奇怪的是:当我在bash shell中运行ffmpeg命令时,所有视频都将成功转换。
google之后,我尝试了这些(当然失败了):
在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
我现在很烦躁,我希望有人可以给我一些建议,真的很感激。