在FFMPEG的GitHub上,我使用encode_video.c
生成1秒的视频。这是有问题的示例:https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/encode_video.c
我使用以下语言进行编译:{{1}}
干净编译,零警告。
我通过运行gcc -Wall -o ffencode encode_video.c -lavcodec -lavutil -lz -lm
打印出许多统计信息(根据源代码预期)以及ffmpeg日志,但最终没有错误或警告。
但是,生成的输出./ffencode video.mp4 libx264
仅可以由video.mp4
播放,并且VLC Player(以及Google Chrome)无法播放视频。
通过ffplay
命令行播放它实际上会打印:
vlc
查看[00007ffd3550fec0] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
TagLib: MP4: Invalid atom size
TagLib: MP4: Invalid atom size
TagLib: MP4: Invalid atom size
的输出,比特率和持续时间字段为空:
ffprobe
我使用具有以下配置的ffmpeg 4.1:
Input #0, h264, from 'video.mp4':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: h264 (High), yuv420p(progressive), 352x288, 25 fps, 25 tbr, 1200k tbn, 50 tbc
有什么办法解决此问题吗?看到API的官方示例缺少此类基本信息,这真令人惊讶。
答案 0 :(得分:0)
该示例生成原始比特流-它不是MP4。该示例仅用于说明编码,而不用于混合(用于将一个或多个流打包为MP4等容器文件格式的术语)。
将扩展名重命名为.h264并使用VLC进行测试。不知道Chrome是否支持原始.h264文件。
要从此输出生成MP4,请运行
ffmpeg -i video.mp4 -c copy actually.mp4
答案 1 :(得分:0)
您需要将视频流混合到视频容器中,例如.mp4
。木星的东西保存在libavformat中。算法应该像这样:
av_register_all
或手动注册感兴趣的格式来初始化格式库。avformat_alloc_context
avformat_new_stream
avformat_write_header
av_write_frame
av_write_trailer
avformat_free_context
破坏混合环境答案 2 :(得分:-1)
只能由ffplay播放,并且VLC Player(以及Google Chrome)无法播放视频。 由于ffplay可以播放视频,因此其他媒体播放器可以播放它。您需要将vlc配置为读取X264编码的视频。转到首选项,全选并将多路分配器更改为视频H264