Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
9d3009c6
Commit
9d3009c6
authored
Feb 20, 2013
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avconv: print an error on applying options of the wrong type.
I.e. input options to output files or vice versa.
parent
e460aa32
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
119 additions
and
63 deletions
+119
-63
avconv_opt.c
avconv_opt.c
+102
-63
cmdutils.c
cmdutils.c
+10
-0
cmdutils.h
cmdutils.h
+7
-0
No files found.
avconv_opt.c
View file @
9d3009c6
...
...
@@ -1864,8 +1864,8 @@ enum OptGroup {
};
static
const
OptionGroupDef
groups
[]
=
{
[
GROUP_OUTFILE
]
=
{
"output file"
,
NULL
},
[
GROUP_INFILE
]
=
{
"input file"
,
"i"
},
[
GROUP_OUTFILE
]
=
{
"output file"
,
NULL
,
OPT_OUTPUT
},
[
GROUP_INFILE
]
=
{
"input file"
,
"i"
,
OPT_INPUT
},
};
static
int
open_files
(
OptionGroupList
*
l
,
const
char
*
inout
,
...
...
@@ -1951,38 +1951,49 @@ fail:
const
OptionDef
options
[]
=
{
/* main options */
#include "cmdutils_common_opts.h"
{
"f"
,
HAS_ARG
|
OPT_STRING
|
OPT_OFFSET
,
{
.
off
=
OFFSET
(
format
)
},
{
"f"
,
HAS_ARG
|
OPT_STRING
|
OPT_OFFSET
|
OPT_INPUT
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
format
)
},
"force format"
,
"fmt"
},
{
"y"
,
OPT_BOOL
,
{
&
file_overwrite
},
"overwrite output files"
},
{
"c"
,
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
codec_names
)
},
{
"c"
,
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
|
OPT_INPUT
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
codec_names
)
},
"codec name"
,
"codec"
},
{
"codec"
,
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
codec_names
)
},
{
"codec"
,
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
|
OPT_INPUT
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
codec_names
)
},
"codec name"
,
"codec"
},
{
"pre"
,
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
presets
)
},
{
"pre"
,
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
presets
)
},
"preset name"
,
"preset"
},
{
"map"
,
HAS_ARG
|
OPT_EXPERT
|
OPT_PERFILE
,
{
.
func_arg
=
opt_map
},
{
"map"
,
HAS_ARG
|
OPT_EXPERT
|
OPT_PERFILE
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_map
},
"set input stream mapping"
,
"[-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]]"
},
{
"map_metadata"
,
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
metadata_map
)
},
{
"map_metadata"
,
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
metadata_map
)
},
"set metadata information of outfile from infile"
,
"outfile[,metadata]:infile[,metadata]"
},
{
"map_chapters"
,
HAS_ARG
|
OPT_INT
|
OPT_EXPERT
|
OPT_OFFSET
,
{
.
off
=
OFFSET
(
chapters_input_file
)
},
{
"map_chapters"
,
HAS_ARG
|
OPT_INT
|
OPT_EXPERT
|
OPT_OFFSET
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
chapters_input_file
)
},
"set chapters mapping"
,
"input_file_index"
},
{
"t"
,
HAS_ARG
|
OPT_TIME
|
OPT_OFFSET
,
{
.
off
=
OFFSET
(
recording_time
)
},
{
"t"
,
HAS_ARG
|
OPT_TIME
|
OPT_OFFSET
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
recording_time
)
},
"record or transcode
\"
duration
\"
seconds of audio/video"
,
"duration"
},
{
"fs"
,
HAS_ARG
|
OPT_INT64
|
OPT_OFFSET
,
{
.
off
=
OFFSET
(
limit_filesize
)
},
{
"fs"
,
HAS_ARG
|
OPT_INT64
|
OPT_OFFSET
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
limit_filesize
)
},
"set the limit file size in bytes"
,
"limit_size"
},
{
"ss"
,
HAS_ARG
|
OPT_TIME
|
OPT_OFFSET
,
{
.
off
=
OFFSET
(
start_time
)
},
{
"ss"
,
HAS_ARG
|
OPT_TIME
|
OPT_OFFSET
|
OPT_INPUT
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
start_time
)
},
"set the start time offset"
,
"time_off"
},
{
"itsoffset"
,
HAS_ARG
|
OPT_TIME
|
OPT_OFFSET
|
OPT_EXPERT
,{
.
off
=
OFFSET
(
input_ts_offset
)
},
{
"itsoffset"
,
HAS_ARG
|
OPT_TIME
|
OPT_OFFSET
|
OPT_EXPERT
|
OPT_INPUT
,
{
.
off
=
OFFSET
(
input_ts_offset
)
},
"set the input ts offset"
,
"time_off"
},
{
"itsscale"
,
HAS_ARG
|
OPT_DOUBLE
|
OPT_SPEC
|
OPT_EXPERT
,{
.
off
=
OFFSET
(
ts_scale
)
},
{
"itsscale"
,
HAS_ARG
|
OPT_DOUBLE
|
OPT_SPEC
|
OPT_EXPERT
|
OPT_INPUT
,
{
.
off
=
OFFSET
(
ts_scale
)
},
"set the input ts scale"
,
"scale"
},
{
"metadata"
,
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
metadata
)
},
{
"metadata"
,
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
metadata
)
},
"add metadata"
,
"string=string"
},
{
"dframes"
,
HAS_ARG
|
OPT_PERFILE
|
OPT_EXPERT
,
{
.
func_arg
=
opt_data_frames
},
{
"dframes"
,
HAS_ARG
|
OPT_PERFILE
|
OPT_EXPERT
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_data_frames
},
"set the number of data frames to record"
,
"number"
},
{
"benchmark"
,
OPT_BOOL
|
OPT_EXPERT
,
{
&
do_benchmark
},
"add timings for benchmarking"
},
...
...
@@ -1992,9 +2003,10 @@ const OptionDef options[] = {
"dump each input packet"
},
{
"hex"
,
OPT_BOOL
|
OPT_EXPERT
,
{
&
do_hex_dump
},
"when dumping packets, also dump the payload"
},
{
"re"
,
OPT_BOOL
|
OPT_EXPERT
|
OPT_OFFSET
,
{
.
off
=
OFFSET
(
rate_emu
)
},
{
"re"
,
OPT_BOOL
|
OPT_EXPERT
|
OPT_OFFSET
|
OPT_INPUT
,
{
.
off
=
OFFSET
(
rate_emu
)
},
"read input at native frame rate"
,
""
},
{
"target"
,
HAS_ARG
|
OPT_PERFILE
,
{
.
func_arg
=
opt_target
},
{
"target"
,
HAS_ARG
|
OPT_PERFILE
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_target
},
"specify target file type (
\"
vcd
\"
,
\"
svcd
\"
,
\"
dvd
\"
,"
"
\"
dv
\"
,
\"
dv50
\"
,
\"
pal-vcd
\"
,
\"
ntsc-svcd
\"
, ...)"
,
"type"
},
{
"vsync"
,
HAS_ARG
|
OPT_EXPERT
,
{
opt_vsync
},
...
...
@@ -2007,57 +2019,71 @@ const OptionDef options[] = {
"copy timestamps"
},
{
"copytb"
,
OPT_BOOL
|
OPT_EXPERT
,
{
&
copy_tb
},
"copy input stream time base when stream copying"
},
{
"shortest"
,
OPT_BOOL
|
OPT_EXPERT
|
OPT_OFFSET
,
{
.
off
=
OFFSET
(
shortest
)
},
{
"shortest"
,
OPT_BOOL
|
OPT_EXPERT
|
OPT_OFFSET
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
shortest
)
},
"finish encoding within shortest input"
},
{
"dts_delta_threshold"
,
HAS_ARG
|
OPT_FLOAT
|
OPT_EXPERT
,
{
&
dts_delta_threshold
},
"timestamp discontinuity delta threshold"
,
"threshold"
},
{
"xerror"
,
OPT_BOOL
|
OPT_EXPERT
,
{
&
exit_on_error
},
"exit on error"
,
"error"
},
{
"copyinkf"
,
OPT_BOOL
|
OPT_EXPERT
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
copy_initial_nonkeyframes
)
},
{
"copyinkf"
,
OPT_BOOL
|
OPT_EXPERT
|
OPT_SPEC
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
copy_initial_nonkeyframes
)
},
"copy initial non-keyframes"
},
{
"frames"
,
OPT_INT64
|
HAS_ARG
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
max_frames
)
},
{
"frames"
,
OPT_INT64
|
HAS_ARG
|
OPT_SPEC
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
max_frames
)
},
"set the number of frames to record"
,
"number"
},
{
"tag"
,
OPT_STRING
|
HAS_ARG
|
OPT_SPEC
|
OPT_EXPERT
,{
.
off
=
OFFSET
(
codec_tags
)
},
{
"tag"
,
OPT_STRING
|
HAS_ARG
|
OPT_SPEC
|
OPT_EXPERT
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
codec_tags
)
},
"force codec tag/fourcc"
,
"fourcc/tag"
},
{
"q"
,
HAS_ARG
|
OPT_EXPERT
|
OPT_DOUBLE
|
OPT_SPEC
,{
.
off
=
OFFSET
(
qscale
)
},
{
"q"
,
HAS_ARG
|
OPT_EXPERT
|
OPT_DOUBLE
|
OPT_SPEC
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
qscale
)
},
"use fixed quality scale (VBR)"
,
"q"
},
{
"qscale"
,
HAS_ARG
|
OPT_EXPERT
|
OPT_DOUBLE
|
OPT_SPEC
,{
.
off
=
OFFSET
(
qscale
)
},
{
"qscale"
,
HAS_ARG
|
OPT_EXPERT
|
OPT_DOUBLE
|
OPT_SPEC
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
qscale
)
},
"use fixed quality scale (VBR)"
,
"q"
},
{
"filter"
,
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
filters
)
},
{
"filter"
,
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
filters
)
},
"set stream filterchain"
,
"filter_list"
},
{
"filter_complex"
,
HAS_ARG
|
OPT_EXPERT
,
{
.
func_arg
=
opt_filter_complex
},
"create a complex filtergraph"
,
"graph_description"
},
{
"stats"
,
OPT_BOOL
,
{
&
print_stats
},
"print progress report during encoding"
,
},
{
"attach"
,
HAS_ARG
|
OPT_PERFILE
|
OPT_EXPERT
,
{
.
func_arg
=
opt_attach
},
{
"attach"
,
HAS_ARG
|
OPT_PERFILE
|
OPT_EXPERT
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_attach
},
"add an attachment to the output file"
,
"filename"
},
{
"dump_attachment"
,
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
|
OPT_EXPERT
,{
.
off
=
OFFSET
(
dump_attachment
)
},
{
"dump_attachment"
,
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
|
OPT_EXPERT
|
OPT_INPUT
,
{
.
off
=
OFFSET
(
dump_attachment
)
},
"extract an attachment into a file"
,
"filename"
},
{
"cpuflags"
,
HAS_ARG
|
OPT_EXPERT
,
{
.
func_arg
=
opt_cpuflags
},
"set CPU flags mask"
,
"mask"
},
/* video options */
{
"vframes"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_PERFILE
,
{
.
func_arg
=
opt_video_frames
},
{
"vframes"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_PERFILE
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_video_frames
},
"set the number of video frames to record"
,
"number"
},
{
"r"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
frame_rates
)
},
{
"r"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
|
OPT_INPUT
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
frame_rates
)
},
"set frame rate (Hz value, fraction or abbreviation)"
,
"rate"
},
{
"s"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
frame_sizes
)
},
{
"s"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
|
OPT_INPUT
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
frame_sizes
)
},
"set frame size (WxH or abbreviation)"
,
"size"
},
{
"aspect"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
frame_aspect_ratios
)
},
{
"aspect"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
frame_aspect_ratios
)
},
"set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)"
,
"aspect"
},
{
"pix_fmt"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_STRING
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
frame_pix_fmts
)
},
{
"pix_fmt"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_STRING
|
OPT_SPEC
|
OPT_INPUT
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
frame_pix_fmts
)
},
"set pixel format"
,
"format"
},
{
"vn"
,
OPT_VIDEO
|
OPT_BOOL
|
OPT_OFFSET
,
{
.
off
=
OFFSET
(
video_disable
)
},
{
"vn"
,
OPT_VIDEO
|
OPT_BOOL
|
OPT_OFFSET
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
video_disable
)
},
"disable video"
},
{
"vdt"
,
OPT_VIDEO
|
OPT_INT
|
HAS_ARG
|
OPT_EXPERT
,
{
&
video_discard
},
"discard threshold"
,
"n"
},
{
"rc_override"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_STRING
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
rc_overrides
)
},
{
"rc_override"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_STRING
|
OPT_SPEC
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
rc_overrides
)
},
"rate control override for specific intervals"
,
"override"
},
{
"vcodec"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_PERFILE
,
{
.
func_arg
=
opt_video_codec
},
{
"vcodec"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_PERFILE
|
OPT_INPUT
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_video_codec
},
"force video codec ('copy' to copy stream)"
,
"codec"
},
{
"pass"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_SPEC
|
OPT_INT
,
{
.
off
=
OFFSET
(
pass
)
},
{
"pass"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_SPEC
|
OPT_INT
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
pass
)
},
"select the pass number (1 or 2)"
,
"n"
},
{
"passlogfile"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_STRING
|
OPT_EXPERT
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
passlogfiles
)
},
{
"passlogfile"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_STRING
|
OPT_EXPERT
|
OPT_SPEC
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
passlogfiles
)
},
"select two pass log file name prefix"
,
"prefix"
},
#if FF_API_DEINTERLACE
{
"deinterlace"
,
OPT_VIDEO
|
OPT_EXPERT
,
{
.
func_arg
=
opt_deinterlace
},
...
...
@@ -2067,73 +2093,86 @@ const OptionDef options[] = {
"dump video coding statistics to file"
},
{
"vstats_file"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_EXPERT
,
{
opt_vstats_file
},
"dump video coding statistics to file"
,
"file"
},
{
"vf"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_PERFILE
,
{
.
func_arg
=
opt_video_filters
},
{
"vf"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_PERFILE
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_video_filters
},
"video filters"
,
"filter list"
},
{
"intra_matrix"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_STRING
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
intra_matrices
)
},
{
"intra_matrix"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_STRING
|
OPT_SPEC
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
intra_matrices
)
},
"specify intra matrix coeffs"
,
"matrix"
},
{
"inter_matrix"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_STRING
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
inter_matrices
)
},
{
"inter_matrix"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_STRING
|
OPT_SPEC
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
inter_matrices
)
},
"specify inter matrix coeffs"
,
"matrix"
},
{
"top"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_INT
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
top_field_first
)
},
{
"top"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_INT
|
OPT_SPEC
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
top_field_first
)
},
"top=1/bottom=0/auto=-1 field first"
,
""
},
{
"dc"
,
OPT_VIDEO
|
OPT_INT
|
HAS_ARG
|
OPT_EXPERT
,
{
&
intra_dc_precision
},
"intra_dc_precision"
,
"precision"
},
{
"vtag"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_PERFILE
,
{
.
func_arg
=
opt_video_tag
},
{
"vtag"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_PERFILE
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_video_tag
},
"force video tag/fourcc"
,
"fourcc/tag"
},
{
"qphist"
,
OPT_VIDEO
|
OPT_BOOL
|
OPT_EXPERT
,
{
&
qp_hist
},
"show QP histogram"
},
{
"force_fps"
,
OPT_VIDEO
|
OPT_BOOL
|
OPT_EXPERT
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
force_fps
)
},
{
"force_fps"
,
OPT_VIDEO
|
OPT_BOOL
|
OPT_EXPERT
|
OPT_SPEC
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
force_fps
)
},
"force the selected framerate, disable the best supported framerate selection"
},
{
"streamid"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_PERFILE
,
{
.
func_arg
=
opt_streamid
},
{
"streamid"
,
OPT_VIDEO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_PERFILE
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_streamid
},
"set the value of an outfile streamid"
,
"streamIndex:value"
},
{
"force_key_frames"
,
OPT_VIDEO
|
OPT_STRING
|
HAS_ARG
|
OPT_EXPERT
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
forced_key_frames
)
},
"force key frames at specified timestamps"
,
"timestamps"
},
{
"force_key_frames"
,
OPT_VIDEO
|
OPT_STRING
|
HAS_ARG
|
OPT_EXPERT
|
OPT_SPEC
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
forced_key_frames
)
},
"force key frames at specified timestamps"
,
"timestamps"
},
/* audio options */
{
"aframes"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_PERFILE
,
{
.
func_arg
=
opt_audio_frames
},
{
"aframes"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_PERFILE
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_audio_frames
},
"set the number of audio frames to record"
,
"number"
},
{
"aq"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_PERFILE
,
{
.
func_arg
=
opt_audio_qscale
},
{
"aq"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_PERFILE
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_audio_qscale
},
"set audio quality (codec-specific)"
,
"quality"
,
},
{
"ar"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_INT
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
audio_sample_rate
)
},
{
"ar"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_INT
|
OPT_SPEC
|
OPT_INPUT
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
audio_sample_rate
)
},
"set audio sampling rate (in Hz)"
,
"rate"
},
{
"ac"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_INT
|
OPT_SPEC
,
{
.
off
=
OFFSET
(
audio_channels
)
},
{
"ac"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_INT
|
OPT_SPEC
|
OPT_INPUT
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
audio_channels
)
},
"set number of audio channels"
,
"channels"
},
{
"an"
,
OPT_AUDIO
|
OPT_BOOL
|
OPT_OFFSET
,
{
.
off
=
OFFSET
(
audio_disable
)
},
{
"an"
,
OPT_AUDIO
|
OPT_BOOL
|
OPT_OFFSET
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
audio_disable
)
},
"disable audio"
},
{
"acodec"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_PERFILE
,
{
.
func_arg
=
opt_audio_codec
},
{
"acodec"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_PERFILE
|
OPT_INPUT
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_audio_codec
},
"force audio codec ('copy' to copy stream)"
,
"codec"
},
{
"atag"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_PERFILE
,
{
.
func_arg
=
opt_audio_tag
},
{
"atag"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_PERFILE
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_audio_tag
},
"force audio tag/fourcc"
,
"fourcc/tag"
},
{
"vol"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_INT
,
{
&
audio_volume
},
"change audio volume (256=normal)"
,
"volume"
},
{
"sample_fmt"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_SPEC
|
OPT_STRING
,
{
.
off
=
OFFSET
(
sample_fmts
)
},
{
"sample_fmt"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_SPEC
|
OPT_STRING
|
OPT_INPUT
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
sample_fmts
)
},
"set sample format"
,
"format"
},
{
"channel_layout"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_PERFILE
,
{
.
func_arg
=
opt_channel_layout
},
{
"channel_layout"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_EXPERT
|
OPT_PERFILE
|
OPT_INPUT
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_channel_layout
},
"set channel layout"
,
"layout"
},
{
"af"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_PERFILE
,
{
.
func_arg
=
opt_audio_filters
},
{
"af"
,
OPT_AUDIO
|
HAS_ARG
|
OPT_PERFILE
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_audio_filters
},
"audio filters"
,
"filter list"
},
/* subtitle options */
{
"sn"
,
OPT_SUBTITLE
|
OPT_BOOL
|
OPT_OFFSET
,
{
.
off
=
OFFSET
(
subtitle_disable
)
},
{
"sn"
,
OPT_SUBTITLE
|
OPT_BOOL
|
OPT_OFFSET
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
subtitle_disable
)
},
"disable subtitle"
},
{
"scodec"
,
OPT_SUBTITLE
|
HAS_ARG
|
OPT_PERFILE
,
{
.
func_arg
=
opt_subtitle_codec
},
{
"scodec"
,
OPT_SUBTITLE
|
HAS_ARG
|
OPT_PERFILE
|
OPT_INPUT
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_subtitle_codec
},
"force subtitle codec ('copy' to copy stream)"
,
"codec"
},
{
"stag"
,
OPT_SUBTITLE
|
HAS_ARG
|
OPT_EXPERT
|
OPT_PERFILE
,
{
.
func_arg
=
opt_subtitle_tag
}
{
"stag"
,
OPT_SUBTITLE
|
HAS_ARG
|
OPT_EXPERT
|
OPT_PERFILE
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_subtitle_tag
}
,
"force subtitle tag/fourcc"
,
"fourcc/tag"
},
/* grab options */
{
"isync"
,
OPT_BOOL
|
OPT_EXPERT
,
{
&
input_sync
},
"this option is deprecated and does nothing"
,
""
},
/* muxer options */
{
"muxdelay"
,
OPT_FLOAT
|
HAS_ARG
|
OPT_EXPERT
|
OPT_OFFSET
,
{
.
off
=
OFFSET
(
mux_max_delay
)
},
{
"muxdelay"
,
OPT_FLOAT
|
HAS_ARG
|
OPT_EXPERT
|
OPT_OFFSET
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
mux_max_delay
)
},
"set the maximum demux-decode delay"
,
"seconds"
},
{
"muxpreload"
,
OPT_FLOAT
|
HAS_ARG
|
OPT_EXPERT
|
OPT_OFFSET
,
{
.
off
=
OFFSET
(
mux_preload
)
},
{
"muxpreload"
,
OPT_FLOAT
|
HAS_ARG
|
OPT_EXPERT
|
OPT_OFFSET
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
mux_preload
)
},
"set the initial demux-decode delay"
,
"seconds"
},
{
"bsf"
,
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
|
OPT_EXPERT
,
{
.
off
=
OFFSET
(
bitstream_filters
)
},
{
"bsf"
,
HAS_ARG
|
OPT_STRING
|
OPT_SPEC
|
OPT_EXPERT
|
OPT_OUTPUT
,
{
.
off
=
OFFSET
(
bitstream_filters
)
},
"A comma-separated list of bitstream filters"
,
"bitstream_filters"
},
/* data codec support */
{
"dcodec"
,
HAS_ARG
|
OPT_DATA
|
OPT_PERFILE
|
OPT_EXPERT
,
{
.
func_arg
=
opt_data_codec
},
{
"dcodec"
,
HAS_ARG
|
OPT_DATA
|
OPT_PERFILE
|
OPT_EXPERT
|
OPT_INPUT
|
OPT_OUTPUT
,
{
.
func_arg
=
opt_data_codec
},
"force data codec ('copy' to copy stream)"
,
"codec"
},
{
NULL
,
},
...
...
cmdutils.c
View file @
9d3009c6
...
...
@@ -351,6 +351,16 @@ int parse_optgroup(void *optctx, OptionGroup *g)
for
(
i
=
0
;
i
<
g
->
nb_opts
;
i
++
)
{
Option
*
o
=
&
g
->
opts
[
i
];
if
(
g
->
group_def
->
flags
&&
!
(
g
->
group_def
->
flags
&
o
->
opt
->
flags
))
{
av_log
(
NULL
,
AV_LOG_ERROR
,
"Option %s (%s) cannot be applied to "
"%s %s -- you are trying to apply an input option to an "
"output file or vice versa. Move this option before the "
"file it belongs to.
\n
"
,
o
->
key
,
o
->
opt
->
help
,
g
->
group_def
->
name
,
g
->
arg
);
return
AVERROR
(
EINVAL
);
}
av_log
(
NULL
,
AV_LOG_DEBUG
,
"Applying option %s (%s) with argument %s.
\n
"
,
o
->
key
,
o
->
opt
->
help
,
o
->
val
);
...
...
cmdutils.h
View file @
9d3009c6
...
...
@@ -144,6 +144,8 @@ typedef struct OptionDef {
an int containing element count in the array. */
#define OPT_TIME 0x10000
#define OPT_DOUBLE 0x20000
#define OPT_INPUT 0x40000
#define OPT_OUTPUT 0x80000
union
{
void
*
dst_ptr
;
int
(
*
func_arg
)(
void
*
,
const
char
*
,
const
char
*
);
...
...
@@ -224,6 +226,11 @@ typedef struct OptionGroupDef {
* are terminated by a non-option argument (e.g. avconv output files)
*/
const
char
*
sep
;
/**
* Option flags that must be set on each option that is
* applied to this group
*/
int
flags
;
}
OptionGroupDef
;
typedef
struct
OptionGroup
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment