当前位置: 首页 > article >正文

音视频入门基础:MPEG2-PS专题(2)——使用FFmpeg命令生成ps文件

一、错误的命令

通过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文件:


http://www.kler.cn/a/464753.html

相关文章:

  • 【机器学习:二、线性回归模型】
  • c-动态内存管理 (动态内存管理比较深入的分析和理解博客总结)
  • CSS学习记录21
  • Linux系统在任意目录运行py脚本
  • Linux Red Hat 7.9 Server安装GitLab
  • Kafka3.x KRaft 模式 (没有zookeeper) 常用命令
  • docker compose模式下,volumes中的${HOSTNAME}识别不了
  • (ICLR-2023)ADALORA:自适应预算分配,实现参数高效微调
  • ReconFusion: 3D Reconstruction with Diffusion Priors 论文解读
  • 2025年01月01日Github流行趋势
  • 事务隔离机制(超详细)
  • [微服务]RestClient客户端
  • 破解密码
  • C# 实现串口通信
  • re:Invent 2024: Blueshift 和 VidMob 谈广告和营销中的生成性人工智能应用
  • JavaWeb开发(一)IDEA工具下载、配置、项目创建、Tomcat配置
  • 阿里云人工智能工程师ACA认证免费课程学习笔记
  • 【C#】校验和计算
  • Unreal虚幻引擎使用遇到的问题记录
  • 4.为什么java不支持多重继承?
  • STM32-笔记21-脉冲计数
  • 鸿蒙OS的API进行交互
  • Science Robotics让软机器人“活”得更久的3D打印!
  • XSS讲解
  • AndroidStudio运行报错Invalid keystore format解决办法
  • PHP框架+gatewayworker实现在线1对1聊天--聊天界面布局+创建websocket连接(5)