马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一、错误的命令
通过FFmpeg命令可以将mp4文件转换为ps文件,PS文件中包罗PS流数据。
由于PS流/PS文件对应的FFInputFormat布局为:
- const FFInputFormat ff_mpegps_demuxer = {
- .p.name = "mpeg",
- .p.long_name = NULL_IF_CONFIG_SMALL("MPEG-PS (MPEG-2 Program Stream)"),
- .p.flags = AVFMT_SHOW_IDS | AVFMT_TS_DISCONT,
- .priv_data_size = sizeof(MpegDemuxContext),
- .read_probe = mpegps_probe,
- .read_header = mpegps_read_header,
- .read_packet = mpegps_read_packet,
- .read_timestamp = mpegps_read_dts,
- };
复制代码
可以看到上述.p.name = "mpeg",所以理论上通过FFmpeg将mp4文件转换为ps文件的命令为:
- ./ffmpeg -i input.mp4 -vcodec libx264 -f mpeg video1.ps
复制代码
通过命令:./ffmpeg -i XXX.ps可以查看天生的媒体文件的信息:
通过vlc也可以直接播放天生的媒体文件,并查看其信息:
通过上述命令好像天生了一个MPEG2-PS文件,但实际上天生的是一个MPEG-1 系统容器。用Elecard Stream Analyzer工具可以查看到其内部包罗的并不是PES流:
二、正确的命令
查阅FFmpeg的在线官方文档:FFmpeg Formats Documentation
可以看到“mpeg”是MPEG1-PS的多路复用器,“vob”才是MPEG2-PS的多路复用器。所以将别的格式的媒体文件转换为MPEG2-PS文件,需要加上“-f vob”选项:
所以将FFmpeg命令修改为:
- ./ffmpeg -i input.mp4 -vcodec libx264 -acodec pcm_s16be -f vob video2.ps
复制代码
注意,音频编码器不能指定为AAC,即不能选择参数“-acodec aac”,因为FFmpeg(FFmpeg7.0.1)不支持天生音频压缩编码格式为AAC的MPEG-PS文件。如果指定为AAC,会报错:Unsupported audio codec. Must be one of mp1, mp2, mp3, 16-bit pcm_dvd, pcm_s16be, ac3 or dts:
通过命令:./ffmpeg -i XXX.ps可以查看天生的ps文件的信息:
用Elecard Stream Analyzer工具可以查看到其内部包罗MPEG2-PS的Program Pack、System Header、PES Packet,证明这就是MPEG2-PS文件:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |