mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-07 11:41:16 +02:00
Haakon Riiser: 29100: clean up of _ffmpeg
This commit is contained in:
parent
fe8a106850
commit
5cd5510eba
2 changed files with 114 additions and 110 deletions
|
@ -1,5 +1,8 @@
|
||||||
2011-04-30 Peter Stephenson <p.w.stephenson@ntlworld.com>
|
2011-04-30 Peter Stephenson <p.w.stephenson@ntlworld.com>
|
||||||
|
|
||||||
|
* Haakon Riiser: 29100: Completion/Unix/Command/_ffmpeg: Clean
|
||||||
|
up and add dependencies.
|
||||||
|
|
||||||
* 29114: Doc/Makefile.in, Doc/Zsh/.distfiles,
|
* 29114: Doc/Makefile.in, Doc/Zsh/.distfiles,
|
||||||
Doc/Zsh/ftp_sites.yo, Doc/Zsh/metafaq.yo, Etc/FAQ.yo: Use same
|
Doc/Zsh/ftp_sites.yo, Doc/Zsh/metafaq.yo, Etc/FAQ.yo: Use same
|
||||||
FTP sites list in META-FAQ as FAQ.
|
FTP sites list in META-FAQ as FAQ.
|
||||||
|
@ -14547,5 +14550,5 @@
|
||||||
|
|
||||||
*****************************************************
|
*****************************************************
|
||||||
* This is used by the shell to define $ZSH_PATCHLEVEL
|
* This is used by the shell to define $ZSH_PATCHLEVEL
|
||||||
* $Revision: 1.5268 $
|
* $Revision: 1.5269 $
|
||||||
*****************************************************
|
*****************************************************
|
||||||
|
|
|
@ -3,161 +3,162 @@
|
||||||
local context state line
|
local context state line
|
||||||
typeset -A opt_args
|
typeset -A opt_args
|
||||||
|
|
||||||
|
local -a _ffmpeg_argspecs
|
||||||
|
|
||||||
local BOLD=$'\e[1m'
|
local BOLD=$'\e[1m'
|
||||||
local NORM=$'\e[m'
|
local NORM=$'\e[m'
|
||||||
|
|
||||||
_ffmpeg_compadd() {
|
(( $+functions[_ffmpeg_compadd] )) || _ffmpeg_compadd() {
|
||||||
compadd -X "${BOLD}$1${NORM}" -q -S "$3" -a $2
|
compadd -X "${BOLD}$1${NORM}" -q -S "$3" -a $2
|
||||||
}
|
}
|
||||||
|
|
||||||
_ffmpeg_presets() {
|
(( $+functions[_ffmpeg_presets] )) || _ffmpeg_presets() {
|
||||||
local presets
|
local presets
|
||||||
presets=(~/.ffmpeg/*.ffpreset(:t:r) "$FFMPEG_DATADIR"/*.ffpreset(:t:r))
|
presets=(~/.ffmpeg/*.ffpreset(:t:r) "$FFMPEG_DATADIR"/*.ffpreset(:t:r))
|
||||||
_ffmpeg_compadd 'select preset' presets ''
|
_ffmpeg_compadd 'select preset' presets ''
|
||||||
}
|
}
|
||||||
|
|
||||||
_ffmpeg_acodecs() {
|
(( $+functions[_ffmpeg_acodecs] )) || _ffmpeg_acodecs() {
|
||||||
local acodecs
|
local acodecs
|
||||||
acodecs=(${${(M)${(f)"$(ffmpeg -codecs 2>/dev/null)"}:#[[:space:]][D[:space:]][E[:space:]]A[S[:space:]][D[:space:]][T[:space:]][[:space:]][^[:space:]]##*}//(#b)????????([^[:space:]]##)*/$match[1]})
|
acodecs=(copy ${${(M)${(f)"$(_call_program audio-codecs $words[1] -codecs 2>/dev/null)"}:#[[:space:]][D[:space:]][E[:space:]]A[S[:space:]][D[:space:]][T[:space:]][[:space:]][^[:space:]]##*}//(#b)????????([^[:space:]]##)*/$match[1]})
|
||||||
_ffmpeg_compadd 'force audio codec (''copy'' to copy stream)' acodecs ''
|
_ffmpeg_compadd 'force audio codec (''copy'' to copy stream)' acodecs ''
|
||||||
}
|
}
|
||||||
|
|
||||||
_ffmpeg_vcodecs() {
|
(( $+functions[_ffmpeg_vcodecs] )) || _ffmpeg_vcodecs() {
|
||||||
local vcodecs
|
local vcodecs
|
||||||
vcodecs=(${${(M)${(f)"$(ffmpeg -codecs 2>/dev/null)"}:#[[:space:]][D[:space:]][E[:space:]]V[S[:space:]][D[:space:]][T[:space:]][[:space:]][^[:space:]]##*}//(#b)????????([^[:space:]]##)*/$match[1]})
|
vcodecs=(copy ${${(M)${(f)"$(_call_program video-codecs $words[1] -codecs 2>/dev/null)"}:#[[:space:]][D[:space:]][E[:space:]]V[S[:space:]][D[:space:]][T[:space:]][[:space:]][^[:space:]]##*}//(#b)????????([^[:space:]]##)*/$match[1]})
|
||||||
_ffmpeg_compadd 'force video codec (''copy'' to copy stream)' vcodecs ''
|
_ffmpeg_compadd 'force video codec (''copy'' to copy stream)' vcodecs ''
|
||||||
}
|
}
|
||||||
|
|
||||||
_ffmpeg_formats() {
|
(( $+functions[_ffmpeg_formats] )) || _ffmpeg_formats() {
|
||||||
local formats
|
local formats
|
||||||
formats=(${(ou)${=${(s:,:)${${(M)${(f)"$(ffmpeg -formats 2>/dev/null)"}:#[[:space:]][D[:space:]][E[:space:]][[:space:]][^[:space:]]##*}//(#b)????([^[:space:]]##)*/$match[1]}}}})
|
formats=(${(ou)${=${(s:,:)${${(M)${(f)"$(_call_program formats $words[1] -formats 2>/dev/null)"}:#[[:space:]][D[:space:]][E[:space:]][[:space:]][^[:space:]]##*}//(#b)????([^[:space:]]##)*/$match[1]}}}})
|
||||||
_ffmpeg_compadd 'force format' formats ''
|
_ffmpeg_compadd 'force format' formats ''
|
||||||
}
|
}
|
||||||
|
|
||||||
_ffmpeg_list_pix_fmts() {
|
(( $+functions[_ffmpeg_list_pix_fmts] )) || _ffmpeg_list_pix_fmts() {
|
||||||
print -l ${${(M)${(f)"$(ffmpeg -pix_fmts 2>/dev/null)"}:#[I.]*}//(#b)??????([^[:space:]]##)*/$match[1]}
|
print -l ${${(M)${(f)"$(_call_program pix-fmts $words[1] -pix_fmts 2>/dev/null)"}:#[I.]*}//(#b)??????([^[:space:]]##)*/$match[1]}
|
||||||
}
|
}
|
||||||
|
|
||||||
_ffmpeg_pix_fmts() {
|
(( $+functions[_ffmpeg_pix_fmts] )) || _ffmpeg_pix_fmts() {
|
||||||
local pix_fmts
|
local pix_fmts
|
||||||
pix_fmts=($(_ffmpeg_list_pix_fmts))
|
pix_fmts=($(_ffmpeg_list_pix_fmts))
|
||||||
_ffmpeg_compadd 'set pixel format' pix_fmts ''
|
_ffmpeg_compadd 'set pixel format' pix_fmts ''
|
||||||
}
|
}
|
||||||
|
|
||||||
_ffmpeg_bsfs() {
|
(( $+functions[_ffmpeg_bsfs] )) || _ffmpeg_bsfs() {
|
||||||
local bsfs
|
local bsfs
|
||||||
bsfs=(${${(f)"$(ffmpeg -bsfs 2>/dev/null)"}:#*:})
|
bsfs=(${${(f)"$(_call_program bsfs $words[1] -bsfs 2>/dev/null)"}:#*:})
|
||||||
_ffmpeg_compadd 'set bitstream filter' bsfs ''
|
_ffmpeg_compadd 'set bitstream filter' bsfs ''
|
||||||
}
|
}
|
||||||
|
|
||||||
_ffmpeg_argspecs="$(ffmpeg -h 2>/dev/null | perl -e '
|
{
|
||||||
my $lastopt;
|
local lastopt
|
||||||
my $lastopt_description;
|
local lastopt_description
|
||||||
my $lastopt_takesargs;
|
local lastopt_takesargs
|
||||||
my @lastopt_values;
|
local -a lastopt_values
|
||||||
while (<>) {
|
|
||||||
if (/^(-\S+)\s+(\S.+)$/) {
|
|
||||||
print_opt();
|
|
||||||
$lastopt = $1;
|
|
||||||
$lastopt_description = $2;
|
|
||||||
if ($lastopt_description =~ /<\w+>/) {
|
|
||||||
$lastopt_description =~ s/<.*?>\s+//;
|
|
||||||
$lastopt_description =~ s/\S{5} ?//;
|
|
||||||
$lastopt_description = $lastopt if not $lastopt_description;
|
|
||||||
escape_str($lastopt_description);
|
|
||||||
} elsif ($lastopt_description =~ /^(\S+)\s\s+/) {
|
|
||||||
my $example = $1;
|
|
||||||
$lastopt_description =~ s/^\S+\s\s+//;
|
|
||||||
escape_str($example);
|
|
||||||
escape_str($lastopt_description);
|
|
||||||
if ($example eq q(filename)) {
|
|
||||||
$lastopt_takesargs = 0;
|
|
||||||
$lastopt .= qq(:$lastopt_description:_files);
|
|
||||||
} elsif ($lastopt =~ /^-[asv]pre$/) {
|
|
||||||
$lastopt_takesargs = 0;
|
|
||||||
$lastopt .= qq(: :_ffmpeg_presets);
|
|
||||||
} elsif ($lastopt eq q(-acodec)) {
|
|
||||||
$lastopt_takesargs = 0;
|
|
||||||
$lastopt .= qq(: :_ffmpeg_acodecs);
|
|
||||||
} elsif ($lastopt eq q(-vcodec)) {
|
|
||||||
$lastopt_takesargs = 0;
|
|
||||||
$lastopt .= qq(: :_ffmpeg_vcodecs);
|
|
||||||
} elsif ($lastopt eq q(-f)) {
|
|
||||||
$lastopt_takesargs = 0;
|
|
||||||
$lastopt .= qq(: :_ffmpeg_formats);
|
|
||||||
} elsif ($lastopt eq q(-pix_fmt)) {
|
|
||||||
$lastopt_takesargs = 0;
|
|
||||||
$lastopt .= qq(: :_ffmpeg_pix_fmts);
|
|
||||||
} elsif ($example eq q(bitstream_filter)) {
|
|
||||||
$lastopt_takesargs = 0;
|
|
||||||
$lastopt .= qq(: :_ffmpeg_bsfs);
|
|
||||||
} else {
|
|
||||||
$lastopt_takesargs = 1;
|
|
||||||
$lastopt_description .= qq{ ($example)};
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$lastopt_takesargs = 0;
|
|
||||||
if ($lastopt eq q(-vfilters)) {
|
|
||||||
$lastopt .= qq(: :->vfilters);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@lastopt_values = ();
|
|
||||||
} elsif (/^ (\S+)/) {
|
|
||||||
$lastopt_takesargs = 1;
|
|
||||||
push @lastopt_values, $1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print_opt();
|
|
||||||
exit;
|
|
||||||
|
|
||||||
sub escape_str {
|
_call_program options $words[1] -h 2>/dev/null | while IFS=$'\n' read -r; do
|
||||||
$_[0] =~ s/:/\\:/g;
|
if [[ $REPLY == -* ]]; then
|
||||||
|
if [[ -n $lastopt ]]; then
|
||||||
|
if (( lastopt_takesargs )); then
|
||||||
|
lastopt+=":$lastopt_description:"
|
||||||
|
if (( $#lastopt_values )); then
|
||||||
|
lastopt+="(${lastopt_values[*]})"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
_ffmpeg_argspecs+=$lastopt
|
||||||
|
fi
|
||||||
|
lastopt=${REPLY%%[[:space:]]*}
|
||||||
|
lastopt_description=${REPLY##-[^[:space:]]##[[:space:]]##}
|
||||||
|
if [[ $lastopt_description == '<'* ]]; then
|
||||||
|
lastopt_description=${lastopt_description##<[^[:space:]]##>[[:space:]]##[^[:space:]]##[[:space:]]#}
|
||||||
|
if [[ -z $lastopt_description ]]; then
|
||||||
|
lastopt_description=$lastopt
|
||||||
|
fi
|
||||||
|
lastopt_description=${lastopt_description//:/\\:}
|
||||||
|
elif [[ $lastopt_description == [^[:space:]]##[[:space:]][[:space:]]* ]]; then
|
||||||
|
local example=${lastopt_description%% *}
|
||||||
|
example=${example//:/\\:}
|
||||||
|
lastopt_description=${lastopt_description##[^[:space:]]##[[:space:]]##}
|
||||||
|
lastopt_description=${lastopt_description//:/\\:}
|
||||||
|
if [[ $example == filename ]]; then
|
||||||
|
lastopt_takesargs=0
|
||||||
|
lastopt+=":$lastopt_description:_files"
|
||||||
|
elif [[ $lastopt == -[asv]pre ]]; then
|
||||||
|
lastopt_takesargs=0
|
||||||
|
lastopt+=": :_ffmpeg_presets"
|
||||||
|
elif [[ $lastopt == -acodec ]]; then
|
||||||
|
lastopt_takesargs=0
|
||||||
|
lastopt+=": :_ffmpeg_acodecs"
|
||||||
|
elif [[ $lastopt == -vcodec ]]; then
|
||||||
|
lastopt_takesargs=0
|
||||||
|
lastopt+=": :_ffmpeg_vcodecs"
|
||||||
|
elif [[ $lastopt == -f ]]; then
|
||||||
|
lastopt_takesargs=0
|
||||||
|
lastopt+=": :_ffmpeg_formats"
|
||||||
|
elif [[ $lastopt == -pix_fmt ]]; then
|
||||||
|
lastopt_takesargs=0
|
||||||
|
lastopt+=": :_ffmpeg_pix_fmts"
|
||||||
|
elif [[ $example == bitstream_filter ]]; then
|
||||||
|
lastopt_takesargs=0
|
||||||
|
lastopt+=": :_ffmpeg_bsfs"
|
||||||
|
else
|
||||||
|
lastopt_takesargs=1
|
||||||
|
lastopt_description+=" ($example)"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
lastopt_takesargs=0
|
||||||
|
if [[ $lastopt == -vfilters ]]; then
|
||||||
|
lastopt+=": :->vfilters"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
lastopt_values=()
|
||||||
|
elif [[ $REPLY == ' '* ]]; then
|
||||||
|
REPLY=${REPLY##[[:space:]]##}
|
||||||
|
REPLY=${REPLY%%[[:space:]]##*}
|
||||||
|
lastopt_takesargs=1
|
||||||
|
lastopt_values+=$REPLY
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [[ -n $lastopt ]]; then
|
||||||
|
if (( lastopt_takesargs )); then
|
||||||
|
lastopt+=":$lastopt_description:"
|
||||||
|
if (( $#lastopt_values )); then
|
||||||
|
lastopt+="(${lastopt_values[*]})"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
_ffmpeg_argspecs+=$lastopt
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
sub print_opt {
|
|
||||||
return if not $lastopt;
|
|
||||||
|
|
||||||
print qq($lastopt);
|
|
||||||
if (!$lastopt_takesargs) {
|
|
||||||
print qq(\n);
|
|
||||||
} else {
|
|
||||||
print qq(:$lastopt_description:);
|
|
||||||
if (@lastopt_values) {
|
|
||||||
printf qq{(%s)}, join(q( ), @lastopt_values);
|
|
||||||
}
|
|
||||||
print qq(\n);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
')"
|
|
||||||
_ffmpeg_argspecs=(${(f)_ffmpeg_argspecs})
|
|
||||||
|
|
||||||
_arguments -S \
|
_arguments -S \
|
||||||
"${_ffmpeg_argspecs[@]}" \
|
"${_ffmpeg_argspecs[@]}" \
|
||||||
'*:output file:_files' \
|
'*:output file:_files' \
|
||||||
&& return 0
|
&& return 0
|
||||||
|
|
||||||
[[ "$state" == "vfilters" ]] &&
|
[[ "$state" == "vfilters" ]] &&
|
||||||
_values -s , -S = 'video filters' \
|
_values -s , -S = 'video filters' \
|
||||||
'aspect:set aspect ratio (rational number X\:Y or decimal number):' \
|
'aspect:set aspect ratio (rational number X\:Y or decimal number):' \
|
||||||
'crop:crop input video (x\:y\:width\:height):' \
|
'crop:crop input video (x\:y\:width\:height):' \
|
||||||
'format: :->format' \
|
'format: :->format' \
|
||||||
'noformat: :->noformat' \
|
'noformat: :->noformat' \
|
||||||
'null' \
|
'null' \
|
||||||
'pad:add pads to the input image (width\:height\:x\:y\:color_string):' \
|
'pad:add pads to the input image (width\:height\:x\:y\:color_string):' \
|
||||||
'pixelaspect:set pixel aspect ratio (rational number X\:Y or decimal number):' \
|
'pixelaspect:set pixel aspect ratio (rational number X\:Y or decimal number):' \
|
||||||
'scale:scale input video (width\:height):' \
|
'scale:scale input video (width\:height):' \
|
||||||
'slicify:output slice height ("random" or a number of pixels):' \
|
'slicify:output slice height ("random" or a number of pixels):' \
|
||||||
'unsharp:luma_x\:luma_y\:luma_amount\:chroma_x\:chroma_y\:chroma_amount:' \
|
'unsharp:luma_x\:luma_y\:luma_amount\:chroma_x\:chroma_y\:chroma_amount:' \
|
||||||
'vflip' \
|
'vflip' \
|
||||||
'buffer' \
|
'buffer' \
|
||||||
'nullsrc' \
|
'nullsrc' \
|
||||||
'nullsink' \
|
'nullsink' \
|
||||||
&& return 0
|
&& return 0
|
||||||
|
|
||||||
[[ "$state" == "format" ]] &&
|
[[ "$state" == "format" ]] &&
|
||||||
_values -s : -S = 'convert input video to one of the specified pixel formats' $(_ffmpeg_list_pix_fmts) && return 0
|
_values -s : -S = 'convert input video to one of the specified pixel formats' $(_ffmpeg_list_pix_fmts) && return 0
|
||||||
|
|
||||||
[[ "$state" == "noformat" ]] &&
|
[[ "$state" == "noformat" ]] &&
|
||||||
_values -s : -S = 'disable specified pixel formats by force' $(_ffmpeg_list_pix_fmts) && return 0
|
_values -s : -S = 'disable specified pixel formats by force' $(_ffmpeg_list_pix_fmts) && return 0
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
Loading…
Reference in a new issue