我正在使用管道提供输入并发送 FFmpeg 的输出
我使用的命令基本上是
ffmpeg -i 管道:0 -f flv 管道:1
我正在使用一个 Java 程序,它基本上提供输入流作为标准输入(管道:0),FFmpeg 将视频转换为所需的格式并发送到标准输出(管道:1),从那里我将视频流式传输到远程位置。
我的 java 程序围绕这段代码展开,提供输入并将输出作为输出流发送。
本质上我的程序完成了它应该做的事情,但是我发现最终输出的视频文件的持续时间不完整。大概是 10 秒长,我的样本视频是 21 分钟!
当我用输入文件和输出文件替换管道时,输出正确生成,没有任何问题,当我使用管道时,文件的大小仍然比原始文件大。以防万一它有助于诊断。
我需要转换各种编解码器,但目前我正在测试将 h264 mp4 视频转换为 flv 格式。事实上,即使我提供 -vcodec copy -acodec copy,它仍然不会输出完整长度的视频
我看到很多帖子的答案都是,这基本上是因为管道不可查找,有时视频信息会保留在文件末尾。但是,即使我尝试对 flv 等输入文件格式进行转换,我仍然会遇到同样的问题。即使输出也指定为 FLV 并提供 -vcodec copy -acodec copy
我是否需要向 FFmpeg 提供更多信息?有人成功完成基于管道的视频转换吗?即使对于媒体信息位于文件开头的文件?
FFmpeg 版本 SVN-r23418,版权所有 (c) 2000-2010 FFmpeg 开发人员
于 2010 年 6 月 2 日 04:12:01 使用 gcc 4.4.2
配置构建:--target-os=mingw32 --enable-runtime-cpudetect --enable-avisynth --enable-gpl --enable-version3 --enable-bzlib --enable-libgsm --enable-libfaad --enable-pthreads --enable-libvorbis --enable-libtheora --enable-libspeex --enable-libmp3lame --enable-libopenjpeg --enable-libxvid --enable-libschroedinger --enable-libx264 --extra-libs='-lx264 -lpthread' --enable-libopencore_amrwb --enable-libopencore_amrnb --enable-librtmp --extra-libs='-lrtmp -lssl -lcrypto -lws2_32 -lgdi32 -lwinmm -lcrypt32 -lz' --arch=x86 --cross-prefix=i686-mingw32- --cc='ccache i686-mingw32-gcc' --enable-memalign-hack
libavutil 50.16. 0 / 50.16. 0
libavcodec 52.72. 1 / 52.72. 1
libavformat 52.67. 0 / 52.67. 0
libavdevice 52. 2. 0 / 52. 2. 0
libavfilter 1.20. 0 / 1.20. 0
libswscale 0.11. 0 / 0.11. 0
输入 #0,mov、mp4、m4a、3gp、3g2、mj2,来自'pipe:0':
元数据:
major_brand:isom
minor_version:
1compatible_brands:isom
标题:
艺术家:
日期:
专辑:
评论:
反馈:
流派:
持续时间:00:21:46.63,开始:0.000000,比特率:N/A
流 #0.0(und):视频:h264,yuv420p,512x288 [PAR 1:1 DAR 16:9],403 kb/s,25 fps,25 tbr,25 tbn,50 tbc
流 #0.1(und):音频:aac,44100 Hz,单声道,s16,47 kb/s
输出 #0,flv,到'pipe:1':
元数据:
编码器:Lavf52.67.0
流#0.0(und):视频:flv,yuv420p,512x288 [PAR 1:1 DAR 16:9],q=2-31,200 kb/s,1k tbn,25 tbc
流#0.1(und):音频:libmp3lame,44100 Hz,单声道,s16,64 kb/s
流映射:
流#0.0 -> #0.0
流#0.1 -> #0.1