使用ffmpeg
从 .flv 视频中解复用 h264 流总是会得到一个无法重新复用到 .mp4 容器中的流(使用MP4Box from package *gpac),
或ffmpeg
)。
这是产生“无效”流的解复用命令..(未知格式)
ffmpeg -i "(h264-aac).flv" # get stream info
# Stream #0.0: Video: h264, yuv420p, 320x240 [PAR 1:1 DAR 4:3], 259 kb/s, 29.97 tbr, 1k tbn, 59.94 tbc
ffmpeg -y -map "0.0" -vcodec copy -an -i "(h264-aac).flv" \
"(h264-aac).flv.h264"
我也尝试过:-f h264,但得到了同样的错误。
上面的命令在针对容器中的视频运行时有效.mp4
,所以这可能是特定于flv
(?)的东西。
我最接近隔离 h264 视频流的是使用以下命令;但它将流包装在一个flv
失去了纵横比的容器中......
ffmpeg -y -map "0.0" -vcodec copy -an -i "(h264-aac).flv" \
"(h264-aac).flv.NEW.flv"
有什么办法可以抓取这个视频流吗?
附言。我已经尝试了几个不同的输入 .flv 视频,...同样的错误。
答案1
中间步骤的目的是什么在最终将原始 H.264 流混合到 .mp4 容器之前,将其存储为非容器文件?
当然,原始 mpeg2 视频流或 .aac 音轨可以在没有容器开销的情况下进行存储,但正如您所意识到的,应用程序友好的文件扩展名的明显候选者 - .avc、.h264、.ts - 不可以。似乎使 FFmpeg 或 VLC 更容易操作原始 H.264 流。
如果您的 H.264 流注定要存放在 .mp4 容器中,为什么不将视频流直接从 .flv 文件复制到 .mp4 文件中并将其存储在那里,直到您准备好将音频复用到最终产品中?
命令行看起来像这样:
ffmpeg -i infile.flv -an -vcodec copy outfile.mp4
如果 FFmpeg 响应这个简单的命令行而抛出错误消息,则您实际上可能有一个损坏的文件。