Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion. Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules. |
29th January 2010, 09:10 | #1 | Link |
Registered User
Join Date: Apr 2008
Posts: 1,181
|
New tool to change SAR in H264 bitstream
I write a bitstream filter for ffmpeg. It can modify sps in H264 bitstream. So far it can change sar, fps, crop information, level, ref frames, cfr/vfr flag, fullrange flag, colorprim, transfer and colormatrix. Since the length of bitstream may be changed, I cannot make an in-place modifier.
ffmpeg git 29946 Download from sf (win32 only) Patches can be found on svn. Note this is a demuxer/muxer only ffmpeg build. cmdline: ffmpeg -i infile -vcodec copy -acodec copy -vbsf h264_changesps=arg1[/arg2[/arg3]] outfile args can be: sar=x:y ---- Set sar to x:y, 0:0 will remove sar info fps=x:y ---- Set fps to x/y in cfr mode or set timebase to y/x in vfr mode level=x ---- Set level to x. (e.g. 30 for L3.0, 41 for L4.1) crop=x:y ---- Crop x pixels from right and y pixels from bottom (e.g. 1920x1080 should use crop=0:8) ref=x ---- Set number of reference frames to x cfr ---- Set fps mode to cfr vfr ---- Set fps mode to vfr fullrange ---- Use full range (0~255) limitedrange ---- Use limited range (16~235) colorprim=x ---- Set color primary to x (integer) 1="bt709", 2="undef", 4="bt470m", 5="bt470bg", 6="smpte170m", 7="smpte240m", 8="film" transfer=x ---- Set transfer to x (integer) 1="bt709", 2="undef", 4="bt470m", 5="bt470bg", 6="smpte170m", 7="smpte240m", 8="linear", 9="log100", 10="log316" colormatrix=x ---- Set color matrix to x (integer) 0="GBR", 1="bt709", 2="undef", 4="fcc", 5="bt470bg", 6="smpte170m", 7="smpte240m", 8="YCgCo" removesei ---- Remove SEI from bitstream. This can be used to remove user data and HRD timing info. removeaud ---- Remove access unit delimiters, which is useless outside BD player. removedupheader ---- Remove duplicated sps/pps. In some AnnexB bitstreams sps/pps appear in every I frame. We can safely remove them. multiple args should be separated by / Output format is determined by extension. Supported input and output containers: ts,mp4,mkv,flv --> mp4,mkv,flv ts,mp4,mkv,flv --> raw,avi(with -vbsf h264_mp4toannexb) raw,avi --> raw,avi It also supports remuxing aac from adts/rm/mp4/mkv/avi to adts/mp4/mkv/avi, and you don't need -absf aac_adts2asc. Two optional args are added to h264_mp4toannexb: norepeatheader ---- Write sps/pps only in the first frame avihack ---- Hack on nal start code, saving ~1 byte per frame on avi. It has no effect on raw output. Avihack implies norepeatheader A new option -muxerfps is added to ffmpeg. Use this to set container fps for avi or default duration for mkv. This is useful for vfr video (e.g. 120000/1001 for 24/30/60 fps mixed content) or mp4/mkv/flv -> avi muxing. Example: convert avc in mkv to raw: ffmpeg -i input.mkv -vcodec copy -an -vbsf h264_mp4toannexb=norepeatheader output.h264 convert avc in mp4 to avi, set container fps to 29.97: ffmpeg -i input.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb=avihack -muxerfps 30000/1001 -vtag H264 output.avi Another new option -bom can be used to add BOM to extracted text files(e.g. ass subtitles). Example: extract ass subtitle from mkv ffmpeg -i input.mkv -vn -an -scodec copy -bom utf-8 output.ass Last edited by roozhou; 15th August 2011 at 12:32. |
Thread Tools | Search this Thread |
Display Modes | |
|
|