#compdef ffmpeg local curcontext="$curcontext" state line expl typeset -A opt_args (( $+functions[_ffmpeg_presets] )) || _ffmpeg_presets() { local presets presets=(~/.ffmpeg/*.ffpreset(:t:r) "$FFMPEG_DATADIR"/*.ffpreset(:t:r)) _wanted ffmpeg-presets expl 'preset' compadd -a presets } (( $+functions[_ffmpeg_acodecs] )) || _ffmpeg_acodecs() { local -a acodecs acodecs=(copy ${(f)"$(_call_program audio-codecs \ $words[1] -encoders 2>/dev/null | awk 'NR>10 && /^ A/{print $2}')"}) _wanted ffmpeg-audio-codecs expl \ 'force audio codec (''copy'' to copy stream)' compadd -a acodecs } (( $+functions[_ffmpeg_vcodecs] )) || _ffmpeg_vcodecs() { local -a vcodecs vcodecs=(copy ${(f)"$(_call_program video-codecs \ $words[1] -encoders 2>/dev/null | awk 'NR>10 && /^ V/{print $2}')"}) _wanted ffmpeg-video-codecs expl \ 'force video codec (''copy'' to copy stream)' compadd -a vcodecs } (( $+functions[_ffmpeg_scodecs] )) || _ffmpeg_scodecs() { local -a scodecs scodecs=(copy ${(f)"$(_call_program subtitle-codecs \ $words[1] -encoders 2>/dev/null | awk 'NR>10 && /^ S/{print $2}')"}) _wanted ffmpeg-subtitle-codecs expl \ 'force subtitle codec (''copy'' to copy stream)' compadd -a scodecs } (( $+functions[_ffmpeg_formats] )) || _ffmpeg_formats() { local _out _out=$(_call_program formats $words[1] -formats 2>/dev/null | \ awk 'NR>4 {name=($2=="d")?$3:$2; n=split(name,a,","); for(i=1;i<=n;i++) if(a[i]~/^[a-z0-9]/) print a[i]}') local -a formats formats=(${(ou)${(f)_out}}) _wanted ffmpeg-formats expl 'force format' compadd -a formats } (( $+functions[_ffmpeg_pix_fmts] )) || _ffmpeg_pix_fmts() { _wanted ffmpeg-pix-fmts expl 'pixel format' compadd "$@" - \ ${${${(M)${(f)"$(_call_program formats $words[1] -pix_fmts 2>/dev/null)"}:#[I.][O.][H.][P.][B.] [^=[:space:]]*}#* }%% *} } (( $+functions[_ffmpeg_bsfs] )) || _ffmpeg_bsfs() { local bsfs bsfs=(${${(f)"$(_call_program bsfs $words[1] -bsfs 2>/dev/null)"}:#*:}) _wanted ffmpeg-bsfs expl 'set bitstream filter' compadd -a bsfs } _arguments -C -S \ '(-y -n)-y[overwrite output files without asking]' \ '(-y -n)-n[never overwrite output files]' \ '-v[set logging level]:level:(quiet panic fatal error warning info verbose debug trace)' \ '-loglevel[set logging level]:level:(quiet panic fatal error warning info verbose debug trace)' \ '-report[generate a report]' \ '-hide_banner[suppress printing banner]' \ '-cpuflags[force specific cpu flags]:flags' \ '-stats[print encoding progress and statistics]' \ '-nostats[suppress encoding progress and statistics]' \ '-progress[write program-readable progress information]:URL' \ '-benchmark[add benchmarking information to the report]' \ '-timelimit[exit after specified number of seconds of CPU time]:seconds' \ '-dump[dump each input packet to stderr]' \ '-hex[dump each input packet in hexadecimal]' \ '-re[read input at native frame rate]' \ '-stream_loop[set number of times to loop the input]:count' \ '-i[input file or URL]:input file:_files' \ '*-f[force container format]:format:_ffmpeg_formats' \ '-c[select encoder or decoder]:codec' \ '-codec[select encoder or decoder]:codec' \ '-t[stop transcoding after duration]:duration' \ '-to[stop transcoding at time]:time' \ '-fs[set output file size limit in bytes]:bytes' \ '-ss[start at time offset]:time' \ '-sseof[start at time offset relative to EOF]:time' \ '-seek_timestamp[seek by timestamp with -ss when set to 1]:flag' \ '-itsoffset[set input time offset]:time' \ '-timestamp[set the recording timestamp]:time' \ '-metadata[add metadata to the output file]:key=value' \ '-program[add a program with specified streams]:title=outfile,key=value,...' \ '-target[specify target file type]:type:(vcd svcd dvd dv dv50)' \ '-apad[pad audio output with silence]' \ '-frames[stop writing after specified number of frames]:count' \ '-filter[set filtergraph for a stream]:filtergraph' \ '-filter_script[read filtergraph from file]:file:_files' \ '-reinit_filter[reinit filtergraph on input parameter changes]:flag' \ '-discard[discard matching stream packets]:type' \ '-disposition[set disposition flags for a stream]:flags' \ '-map[set input stream mapping]:stream_specifier' \ '-map_metadata[set metadata information of outfile]:outfile_spec' \ '-map_chapters[read chapters from input file]:input_file_index' \ '-copyts[copy timestamps from input to output]' \ '-start_at_zero[shift timestamps to start at 0 with -copyts]' \ '-copytb[copy input stream time base when stream copying]:mode' \ '-shortest[finish encoding when the shortest input stream ends]' \ '-dts_delta_threshold[timestamp discontinuity delta threshold]:threshold' \ '-muxdelay[set the maximum demux-decode delay in seconds]:seconds' \ '-muxpreload[set the initial demux-decode delay in seconds]:seconds' \ '-streamid[force a stream identifier]:ost_index:newval' \ '-bitexact[enable bitexact mode]' \ '-xerror[exit on error]' \ '-strict[how strictly to follow standards]:level:(very strict normal unofficial experimental)' \ '-max_muxing_queue_size[maximum packets in the muxing queue]:count' \ '-threads[number of threads to use]:count' \ '-vn[disable video]' \ '-vcodec[force video codec]:codec:_ffmpeg_vcodecs' \ '-vf[set video filtergraph]:filtergraph' \ '-b[set video bitrate]:bitrate' \ '-r[set video frame rate]:rate' \ '-s[set video frame size]:WxH' \ '-aspect[set video aspect ratio]:ratio' \ '*-pix_fmt[set pixel format]:format:_ffmpeg_pix_fmts' \ '-vframes[set number of video frames to output]:count' \ '-g[set group of picture size]:size' \ '*-vpre[set video preset options]:preset:_ffmpeg_presets' \ '-an[disable audio]' \ '-acodec[force audio codec]:codec:_ffmpeg_acodecs' \ '-af[set audio filtergraph]:filtergraph' \ '-ab[set audio bitrate]:bitrate' \ '-ar[set audio sampling rate in Hz]:rate' \ '-ac[set number of audio channels]:channels' \ '-aq[set audio quality]:quality' \ '-aframes[set number of audio frames to output]:count' \ '-atag[force audio tag or fourcc]:fourcc' \ '*-apre[set audio preset options]:preset:_ffmpeg_presets' \ '-sn[disable subtitle]' \ '-scodec[force subtitle codec]:codec:_ffmpeg_scodecs' \ '-stag[force subtitle tag or fourcc]:fourcc' \ '-fix_sub_duration[fix subtitle duration]' \ '-canvas_size[set canvas size]:WxH' \ '*-spre[set subtitle preset options]:preset:_ffmpeg_presets' \ '-bsf[set bitstream filter]:bitstream filter:_ffmpeg_bsfs' \ '-dn[disable data streams]' \ '*:output file:_files'