java在linux上调用ffmpeg命令行组合图片为视频时无法加入音频!

e国阳光 发布于 2016/10/15 23:49
阅读 659
收藏 0

在window上本地测试时,音频时可以加入视频中的;当上载到Linux上后,居然加不进音频;用putty直接执行又没问题,不知何故?运行时代码:

命令行:  ffmpeg/bin/ffmpeg  -y -r 1.28  -f image2 -I /ffmpeg/temp/fftp_5_%02d.jpg  -I ffmpeg/temp/4_.mp3, -acodec, copy, -t, 7, /avs/538332189203.avi]
ffmpeg>>ffmpeg version 2.4.3 Copyright (c) 2000-2014 the FFmpeg developers
ffmpeg>>  built on Nov 26 2014 19:29:58 with gcc 4.1.2 (GCC) 20080704 (Red Hat 4.1.2-46)
ffmpeg>>  configuration: --disable-yasm --prefix=/ffmpeg
ffmpeg>>  libavutil      54.  7.100 / 54.  7.100
ffmpeg>>  libavcodec     56.  1.100 / 56.  1.100
ffmpeg>>  libavformat    56.  4.101 / 56.  4.101
ffmpeg>>  libavdevice    56.  0.100 / 56.  0.100
ffmpeg>>  libavfilter     5.  1.100 /  5.  1.100
ffmpeg>>  libswscale      3.  0.100 /  3.  0.100
ffmpeg>>  libswresample   1.  1.100 /  1.  1.100
ffmpeg>>Input #0, image2, from '/ffmpeg/temp/fftp_5_%02d.jpg':
ffmpeg>>  Duration: 00:00:07.03, start: 0.000000, bitrate: N/A
ffmpeg>>    Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg), 950x950, 1.28 fps, 1.28 tbr, 1.28 tbn, 1.28 tbc
ffmpeg>>[mp3 @ 0x14a98220] Format mp3 detected only with low score of 1, misdetection possible!
ffmpeg>>[mp3 @ 0x14a98220] Could not find codec parameters for stream 0 (Audio: mp3, 0 channels, s16p): unspecified frame size
ffmpeg>>Consider increasing the value for the 'analyzeduration' and 'probesize' options
ffmpeg>>/ffmpeg/temp/4_.mp3: could not find codec parameters
ffmpeg>>Input #1, mp3, from '/ffmpeg/temp/4_.mp3':
ffmpeg>>  Duration: N/A, start: 0.000000, bitrate: N/A
ffmpeg>>    Stream #1:0: Audio: mp3, 0 channels, s16p
ffmpeg>>[swscaler @ 0x14a730c0] deprecated pixel format used, make sure you did set range correctly
ffmpeg>>Output #0, avi, to '/avs/538332189203.avi':
ffmpeg>>  Metadata:
ffmpeg>>    ISFT            : Lavf56.4.101
ffmpeg>>    Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 950x950, q=2-31, 200 kb/s, 1.28 fps, 1.28 tbn, 1.28 tbc
ffmpeg>>    Metadata:
ffmpeg>>      encoder         : Lavc56.1.100 mpeg4
ffmpeg>>Stream mapping:
ffmpeg>>  Stream #0:0 -> #0:0 (mjpeg (native) -> mpeg4 (native))
ffmpeg>>Press [q] to stop, [?] for help
ffmpeg>>frame=    9 fps=0.0 q=10.1 Lsize=     724kB time=00:00:07.03 bitrate= 843.2kbits/s   
ffmpeg>>video:718kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.802779%

加载中
0
Feng_Yu
Feng_Yu
这不都告诉你不能解码了吗?你看看原始视频的mediaonfo,再看看你使用的ffmpeg所支持的编码ffmpeg -codecs。这种问题一般最通用的解决方案是喂喂管道。比如通过其他解码方式如mplayer解码后raw流丢给编码器处理,如ffmpeg,x264等
0
Feng_Yu
Feng_Yu
另外你也可以考虑自己编译ffmpeg,加入所需编码支持
0
e国阳光
e国阳光
本人对媒体技术是门外汉,估计问题确实是媒体的编码问题,这位老兄非常专业。原来是我在打包音频到视频中之前,测试了音频的时长,但测试时长时重写了音频文件,我把这个测试时改为不重写音频文件后,问题就解决了!谢谢!
Feng_Yu
Feng_Yu
回复 @e国阳光 : 严格来讲,ffmpeg -i media.file 并不是一个用于获取多媒体文件信息的命令。仔细观察你会发现最后实际报错了,而且退出码也不是0.所以我不建议你的代码逻辑中用这种方式去处理。ffmpeg的包里面带有一个ffprobe命令,才是干这个的。另外,也可以考虑mediainfo这个工具,更加专业和全面,并且提供多种输出格式,如xml,html等。
Feng_Yu
Feng_Yu
回复 @e国阳光 : 至于windows下没有问题,猜测是因为此时ffmpeg占用了这个文件,windows对于这种情况是不允许直接覆盖这个文件的,所以文件并没有真正被覆盖掉。但是Linux可以。一旦你的文件是大文件的话,超出了ffmpeg的缓存,那么这个文件铁定被破坏掉。这种转码建议你输出到一个新文件中,不要直接写回原始文件。
Feng_Yu
Feng_Yu
回复 @e国阳光 : 不要用这个命令,几乎有90%的可能性会破坏原有文件。ffmpeg -i a.mp3 a.mp3代表直接从a.mp3读取文件,经过lame编码器后输出到a.mp3文件中。ffmpeg遇到这种问题会问你是否强制覆盖(y/N),可以加上-y参数强制确认。但是注意,强制覆盖这里几乎必然会破坏文件
e国阳光
e国阳光
回复 @Feng_Yu : 只是把测试时长的命令行改了,原来是 ffmpeg -i au.mp3 au.mp3 ,本地window测试没问题,上载到linux服务器后就发生了那个错误,但用putty命令行用原音频文件和重写的文件都没问题,这简直要使人发疯。由于对媒体技术不了解,百思不得其解,后台想起测试时长时重写了音频文件,把测试时长命令行改为 ffmpeg -i au.mp3 后就行了。
Feng_Yu
Feng_Yu
那你得确认下你的重写算法了,是不是破坏了多媒体文件的元数据。
返回顶部
顶部