ffmpeg/ffprobe 获取 video/audio 流的 HLS 'codecs' 字符串

ffmpeg/ffprobe get HLS 'codecs' string for a video/audio stream

我正在使用 ffmpeg 创建 HLS 子播放列表。我使用 ffmpeg 为演绎创建它们。现在我需要创建 master 播放列表 .m3u8.

出于某些原因,我需要手动执行此操作。除了 'CODECS' 值外,我拥有我需要的一切。

如何获取文件中视频和音频流的 CODECS 值?

当我使用ffprobe 获取有关流的所有元数据时,我看不到相关数据。

带有 CODECS 的示例主清单:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=540863,RESOLUTION=640x360,CODECS="avc1.64001e,mp4a.40.2"
v0/prog_index.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=2339363,RESOLUTION=960x540,CODECS="avc1.64001f,mp4a.40.2"
v1/prog_index.m3u8

我可以使用 ffprobe 获得的元数据示例:

{'avg_frame_rate': '24000/1001',
 'bit_rate': '35956',
 'bits_per_raw_sample': '8',
 'chroma_location': 'left',
 'closed_captions': 0,
 'codec_long_name': 'H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10',
 'codec_name': 'h264',
 'codec_tag': '0x31637661',
 'codec_tag_string': 'avc1',
 'codec_time_base': '1001/48000',
 'codec_type': 'video',
 'coded_height': 368,
 'coded_width': 640,
 'display_aspect_ratio': '16:9',
 'disposition': {'attached_pic': 0,
                 'clean_effects': 0,
                 'comment': 0,
                 'default': 1,
                 'dub': 0,
                 'forced': 0,
                 'hearing_impaired': 0,
                 'karaoke': 0,
                 'lyrics': 0,
                 'original': 0,
                 'timed_thumbnails': 0,
                 'visual_impaired': 0},
 'duration': '5.005000',
 'duration_ts': 120120,
 'has_b_frames': 2,
 'height': 360,
 'index': 0,
 'is_avc': 'true',
 'level': 30,
 'nal_length_size': '4',
 'nb_frames': '120',
 'pix_fmt': 'yuv420p',
 'profile': 'High',
 'r_frame_rate': '24000/1001',
 'refs': 1,
 'sample_aspect_ratio': '1:1',
 'start_pts': 0,
 'start_time': '0.000000',
 'tags': {'handler_name': 'VideoHandler',
          'language': 'eng',
          'timecode': '01:00:00:00'},
 'time_base': '1/24000',
 'width': 640}
{'avg_frame_rate': '0/0',
 'bit_rate': '138375',
 'bits_per_sample': 0,
 'channel_layout': 'stereo',
 'channels': 2,
 'codec_long_name': 'AAC (Advanced Audio Coding)',
 'codec_name': 'aac',
 'codec_tag': '0x6134706d',
 'codec_tag_string': 'mp4a',
 'codec_time_base': '1/48000',
 'codec_type': 'audio',
 'disposition': {'attached_pic': 0,
                 'clean_effects': 0,
                 'comment': 0,
                 'default': 1,
                 'dub': 0,
                 'forced': 0,
                 'hearing_impaired': 0,
                 'karaoke': 0,
                 'lyrics': 0,
                 'original': 0,
                 'timed_thumbnails': 0,
                 'visual_impaired': 0},
 'duration': '5.005000',
 'duration_ts': 240240,
 'index': 1,
 'max_bit_rate': '138375',
 'nb_frames': '236',
 'profile': 'LC',
 'r_frame_rate': '0/0',
 'sample_fmt': 'fltp',
 'sample_rate': '48000',
 'start_pts': 0,
 'start_time': '0.000000',
 'tags': {'handler_name': 'SoundHandler', 'language': 'eng'},
 'time_base': '1/48000'}

ffprobe 将不会提供 HLS CODECS 信息。

虽然您是手动制作自己的主播放列表,但请将 -master_pl_name playlist.m3u8 添加到您的命令中并从结果文件 (playlist.m3u8) 中获取 CODECS 值。