孙悟空 发表于 2018-8-22 19:32:44

设置SEI自定义信息

API调用版:
用ffmpeg向H264中添加SEI自定义信息
http://bbs.chinaffmpeg.com/forum.php?mod=viewthread&tid=590&fromuid=3
(出处: ChinaFFmpeg)


在ffmpeg中设置SEI自定义信息是通过bsf来操作的,类似于mp4toannexb这样的bitstream filter;

在最新版本的ffmpeg中是可以看到已经添加了相关的滤镜:
bogon:xxx StevenLiu$ ./ffmpeg -bsfs
ffmpeg version bbs.chinaffmpeg.com孙悟空专用版 2018 the FFmpeg developers
built with Apple LLVM version 9.1.0 (clang-902.0.39.2)
configuration: --enable-libass --enable-opengl --enable-libx264 --enable-libmp3lame --enable-gpl --enable-nonfree --prefix=/usr/local --enable-libtesseract --enable-libspeex --enable-libfreetype --enable-libfontconfig --enable-libfdk-aac --enable-videotoolbox --enable-libxml2
libavutil      56. 19.100 / 56. 19.100
libavcodec   58. 22.101 / 58. 22.101
libavformat    58. 17.101 / 58. 17.101
libavdevice    58.4.101 / 58.4.101
libavfilter   7. 26.100 /7. 26.100
libswscale      5.2.100 /5.2.100
libswresample   3.2.100 /3.2.100
libpostproc    55.2.100 / 55.2.100
Bitstream filters:
aac_adtstoasc
chomp
dump_extra
dca_core
eac3_core
extract_extradata
filter_units
h264_metadata
h264_mp4toannexb
h264_redundant_pps
hapqa_extract
hevc_metadata
hevc_mp4toannexb
imxdump
mjpeg2jpeg
mjpegadump
mp3decomp
mpeg2_metadata
mpeg4_unpack_bframes
mov2textsub
noise
null
remove_extra
text2movsub
trace_headers
vp9_metadata
vp9_raw_reorder
vp9_superframe
vp9_superframe_split

可以看到,多了很多bsf滤镜,其中h264_metadata就是对h264的metadata进行操作的,下面看一下对应的帮助:
bogon:xxx StevenLiu$ ./ffmpeg -h bsf=h264_metadata
ffmpeg version bbs.chinaffmpeg.com孙悟空专用版 Copyright (c) 2000-2018 the FFmpeg developers
built with Apple LLVM version 9.1.0 (clang-902.0.39.2)
configuration: --enable-libass --enable-opengl --enable-libx264 --enable-libmp3lame --enable-gpl --enable-nonfree --prefix=/usr/local --enable-libtesseract --enable-libspeex --enable-libfreetype --enable-libfontconfig --enable-libfdk-aac --enable-videotoolbox --enable-libxml2
libavutil      56. 19.100 / 56. 19.100
libavcodec   58. 22.101 / 58. 22.101
libavformat    58. 17.101 / 58. 17.101
libavdevice    58.4.101 / 58.4.101
libavfilter   7. 26.100 /7. 26.100
libswscale      5.2.100 /5.2.100
libswresample   3.2.100 /3.2.100
libpostproc    55.2.100 / 55.2.100
Bit stream filter h264_metadata
    Supported codecs: h264
h264_metadata_bsf AVOptions:
-aud               <int>      ...V....B Access Unit Delimiter NAL units (from 0 to 2) (default pass)
   pass                         ...V....B
   insert                     ...V....B
   remove                     ...V....B
-sample_aspect_ratio <rational>   ...V....B Set sample aspect ratio (table E-1) (from 0 to 65535) (default 0/1)
-video_format      <int>      ...V....B Set video format (table E-2) (from -1 to 7) (default -1)
-video_full_range_flag <int>      ...V....B Set video full range flag (from -1 to 1) (default -1)
-colour_primaries<int>      ...V....B Set colour primaries (table E-3) (from -1 to 255) (default -1)
-transfer_characteristics <int>      ...V....B Set transfer characteristics (table E-4) (from -1 to 255) (default -1)
-matrix_coefficients <int>      ...V....B Set matrix coefficients (table E-5) (from -1 to 255) (default -1)
-chroma_sample_loc_type <int>      ...V....B Set chroma sample location type (figure E-1) (from -1 to 6) (default -1)
-tick_rate         <rational>   ...V....B Set VUI tick rate (num_units_in_tick / time_scale) (from 0 to UINT32_MAX) (default 0/1)
-fixed_frame_rate_flag <int>      ...V....B Set VUI fixed frame rate flag (from -1 to 1) (default -1)
-crop_left         <int>      ...V....B Set left border crop offset (from -1 to 16880) (default -1)
-crop_right      <int>      ...V....B Set right border crop offset (from -1 to 16880) (default -1)
-crop_top          <int>      ...V....B Set top border crop offset (from -1 to 16880) (default -1)
-crop_bottom       <int>      ...V....B Set bottom border crop offset (from -1 to 16880) (default -1)
-sei_user_data   <string>   ...V....B Insert SEI user data (UUID+string)
-delete_filler   <int>      ...V....B Delete all filler (both NAL and SEI) (from 0 to 1) (default 0)
-display_orientation <int>      ...V....B Display orientation SEI (from 0 to 3) (default pass)
   pass                         ...V....B
   insert                     ...V....B
   remove                     ...V....B
   extract                      ...V....B
-rotate            <double>   ...V....B Set rotation in display orientation SEI (anticlockwise angle in degrees) (from -360 to 360) (default nan)
-flip            <flags>      ...V....B Set flip in display orientation SEI (default 0)
   horizontal                   ...V....B Set hor_flip
   vertical                     ...V....B Set ver_flip



如果要添加自定义信息的话,可以用sei_user_data
下面举个例子:

bogon:xxx StevenLiu$ ./ffmpeg -i ~/Movies/objectC/facebook.mp4 -c copy -bsf:v h264_metadata=sei_user_data=086f3693-b7b3-4f2c-9653-21492feee5b8+hello -an -t 2 -y a.h264
ffmpeg version N-91602-g03fc3a68e7 Copyright (c) 2000-2018 the FFmpeg developers
built with Apple LLVM version 9.1.0 (clang-902.0.39.2)
configuration: --enable-libass --enable-opengl --enable-libx264 --enable-libmp3lame --enable-gpl --enable-nonfree --prefix=/usr/local --enable-libtesseract --enable-libspeex --enable-libfreetype --enable-libfontconfig --enable-libfdk-aac --enable-videotoolbox --enable-libxml2
libavutil      56. 19.100 / 56. 19.100
libavcodec   58. 22.101 / 58. 22.101
libavformat    58. 17.101 / 58. 17.101
libavdevice    58.4.101 / 58.4.101
libavfilter   7. 26.100 /7. 26.100
libswscale      5.2.100 /5.2.100
libswresample   3.2.100 /3.2.100
libpostproc    55.2.100 / 55.2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/StevenLiu/Movies/objectC/facebook.mp4':
Metadata:
    major_brand   : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.22.102
    description   : This File is Created by Easy RealMedia Tools@!
Duration: 02:00:27.85, start: 0.000000, bitrate: 893 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x480, 797 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 87 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Output #0, h264, to 'a.h264':
Metadata:
    major_brand   : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    description   : This File is Created by Easy RealMedia Tools@!
    encoder         : Lavf58.17.101
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x480, q=2-31, 797 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc (default)
    Metadata:
      handler_name    : VideoHandler
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press to stop, [?] for help
frame=   52 fps=0.0 q=-1.0 Lsize=   210kB time=00:00:02.00 bitrate= 859.6kbits/s speed= 100x
video:210kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%


执行完成后,会生成一个a.h264,那么就看一下a.h264里面相关的信息:


maxwell 发表于 2018-8-24 10:16:44

顶一个

maxwell 发表于 2018-8-24 16:18:03

大师兄,不知道您那边这样生成后的a.h264用elecard能否正常播放,我这边执行上述命令后,在原有的sei末尾追加了sei_user_data信息,但是原本视频流sei后跟的sps,pps被覆盖了。导致elecard无法正常播放。看您的码流貌似也是一样的情况
页: [1]
查看完整版本: 设置SEI自定义信息