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
47543450
Commit
47543450
authored
Mar 17, 2014
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avconv: print verbose per-stream transcoding statistics
parent
a220b07b
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
104 additions
and
4 deletions
+104
-4
avconv.c
avconv.c
+90
-1
avconv.h
avconv.h
+14
-3
No files found.
avconv.c
View file @
47543450
...
...
@@ -368,6 +368,7 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
ost
->
last_mux_dts
=
pkt
->
dts
;
ost
->
data_size
+=
pkt
->
size
;
ost
->
packets_written
++
;
pkt
->
stream_index
=
ost
->
index
;
ret
=
av_interleaved_write_frame
(
s
,
pkt
);
...
...
@@ -405,6 +406,9 @@ static void do_audio_out(AVFormatContext *s, OutputStream *ost,
frame
->
pts
=
ost
->
sync_opts
;
ost
->
sync_opts
=
frame
->
pts
+
frame
->
nb_samples
;
ost
->
samples_encoded
+=
frame
->
nb_samples
;
ost
->
frames_encoded
++
;
if
(
avcodec_encode_audio2
(
enc
,
&
pkt
,
frame
,
&
got_packet
)
<
0
)
{
av_log
(
NULL
,
AV_LOG_FATAL
,
"Audio encoding failed
\n
"
);
exit_program
(
1
);
...
...
@@ -465,6 +469,9 @@ static void do_subtitle_out(AVFormatContext *s,
sub
->
pts
+=
av_rescale_q
(
sub
->
start_display_time
,
(
AVRational
){
1
,
1000
},
AV_TIME_BASE_Q
);
sub
->
end_display_time
-=
sub
->
start_display_time
;
sub
->
start_display_time
=
0
;
ost
->
frames_encoded
++
;
subtitle_out_size
=
avcodec_encode_subtitle
(
enc
,
subtitle_out
,
subtitle_out_max_size
,
sub
);
if
(
subtitle_out_size
<
0
)
{
...
...
@@ -555,6 +562,9 @@ static void do_video_out(AVFormatContext *s,
in_picture
->
pict_type
=
AV_PICTURE_TYPE_I
;
ost
->
forced_kf_index
++
;
}
ost
->
frames_encoded
++
;
ret
=
avcodec_encode_video2
(
enc
,
&
pkt
,
in_picture
,
&
got_packet
);
if
(
ret
<
0
)
{
av_log
(
NULL
,
AV_LOG_FATAL
,
"Video encoding failed
\n
"
);
...
...
@@ -741,7 +751,7 @@ static void print_final_stats(int64_t total_size)
uint64_t
video_size
=
0
,
audio_size
=
0
,
extra_size
=
0
,
other_size
=
0
;
uint64_t
data_size
=
0
;
float
percent
=
-
1
.
0
;
int
i
;
int
i
,
j
;
for
(
i
=
0
;
i
<
nb_output_streams
;
i
++
)
{
OutputStream
*
ost
=
output_streams
[
i
];
...
...
@@ -768,6 +778,75 @@ static void print_final_stats(int64_t total_size)
else
av_log
(
NULL
,
AV_LOG_INFO
,
"unknown"
);
av_log
(
NULL
,
AV_LOG_INFO
,
"
\n
"
);
/* print verbose per-stream stats */
for
(
i
=
0
;
i
<
nb_input_files
;
i
++
)
{
InputFile
*
f
=
input_files
[
i
];
uint64_t
total_packets
=
0
,
total_size
=
0
;
av_log
(
NULL
,
AV_LOG_VERBOSE
,
"Input file #%d (%s):
\n
"
,
i
,
f
->
ctx
->
filename
);
for
(
j
=
0
;
j
<
f
->
nb_streams
;
j
++
)
{
InputStream
*
ist
=
input_streams
[
f
->
ist_index
+
j
];
enum
AVMediaType
type
=
ist
->
st
->
codec
->
codec_type
;
total_size
+=
ist
->
data_size
;
total_packets
+=
ist
->
nb_packets
;
av_log
(
NULL
,
AV_LOG_VERBOSE
,
" Input stream #%d:%d (%s): "
,
i
,
j
,
media_type_string
(
type
));
av_log
(
NULL
,
AV_LOG_VERBOSE
,
"%"
PRIu64
" packets read (%"
PRIu64
" bytes); "
,
ist
->
nb_packets
,
ist
->
data_size
);
if
(
ist
->
decoding_needed
)
{
av_log
(
NULL
,
AV_LOG_VERBOSE
,
"%"
PRIu64
" frames decoded"
,
ist
->
frames_decoded
);
if
(
type
==
AVMEDIA_TYPE_AUDIO
)
av_log
(
NULL
,
AV_LOG_VERBOSE
,
" (%"
PRIu64
" samples)"
,
ist
->
samples_decoded
);
av_log
(
NULL
,
AV_LOG_VERBOSE
,
"; "
);
}
av_log
(
NULL
,
AV_LOG_VERBOSE
,
"
\n
"
);
}
av_log
(
NULL
,
AV_LOG_VERBOSE
,
" Total: %"
PRIu64
" packets (%"
PRIu64
" bytes) demuxed
\n
"
,
total_packets
,
total_size
);
}
for
(
i
=
0
;
i
<
nb_output_files
;
i
++
)
{
OutputFile
*
of
=
output_files
[
i
];
uint64_t
total_packets
=
0
,
total_size
=
0
;
av_log
(
NULL
,
AV_LOG_VERBOSE
,
"Output file #%d (%s):
\n
"
,
i
,
of
->
ctx
->
filename
);
for
(
j
=
0
;
j
<
of
->
ctx
->
nb_streams
;
j
++
)
{
OutputStream
*
ost
=
output_streams
[
of
->
ost_index
+
j
];
enum
AVMediaType
type
=
ost
->
st
->
codec
->
codec_type
;
total_size
+=
ost
->
data_size
;
total_packets
+=
ost
->
packets_written
;
av_log
(
NULL
,
AV_LOG_VERBOSE
,
" Output stream #%d:%d (%s): "
,
i
,
j
,
media_type_string
(
type
));
if
(
ost
->
encoding_needed
)
{
av_log
(
NULL
,
AV_LOG_VERBOSE
,
"%"
PRIu64
" frames encoded"
,
ost
->
frames_encoded
);
if
(
type
==
AVMEDIA_TYPE_AUDIO
)
av_log
(
NULL
,
AV_LOG_VERBOSE
,
" (%"
PRIu64
" samples)"
,
ost
->
samples_encoded
);
av_log
(
NULL
,
AV_LOG_VERBOSE
,
"; "
);
}
av_log
(
NULL
,
AV_LOG_VERBOSE
,
"%"
PRIu64
" packets muxed (%"
PRIu64
" bytes); "
,
ost
->
packets_written
,
ost
->
data_size
);
av_log
(
NULL
,
AV_LOG_VERBOSE
,
"
\n
"
);
}
av_log
(
NULL
,
AV_LOG_VERBOSE
,
" Total: %"
PRIu64
" packets (%"
PRIu64
" bytes) muxed
\n
"
,
total_packets
,
total_size
);
}
}
static
void
print_report
(
int
is_last_report
,
int64_t
timer_start
)
...
...
@@ -1087,6 +1166,9 @@ static int decode_audio(InputStream *ist, AVPacket *pkt, int *got_output)
return
ret
;
}
ist
->
samples_decoded
+=
decoded_frame
->
nb_samples
;
ist
->
frames_decoded
++
;
/* if the decoder provides a pts, use it instead of the last packet pts.
the decoder could be delaying output by a packet or more. */
if
(
decoded_frame
->
pts
!=
AV_NOPTS_VALUE
)
...
...
@@ -1181,6 +1263,8 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output)
return
ret
;
}
ist
->
frames_decoded
++
;
if
(
ist
->
hwaccel_retrieve_data
&&
decoded_frame
->
format
==
ist
->
hwaccel_pix_fmt
)
{
err
=
ist
->
hwaccel_retrieve_data
(
ist
->
st
->
codec
,
decoded_frame
);
if
(
err
<
0
)
...
...
@@ -1251,6 +1335,8 @@ static int transcode_subtitles(InputStream *ist, AVPacket *pkt, int *got_output)
if
(
!*
got_output
)
return
ret
;
ist
->
frames_decoded
++
;
for
(
i
=
0
;
i
<
nb_output_streams
;
i
++
)
{
OutputStream
*
ost
=
output_streams
[
i
];
...
...
@@ -2232,7 +2318,10 @@ static int process_input(void)
goto
discard_packet
;
ist
=
input_streams
[
ifile
->
ist_index
+
pkt
.
stream_index
];
ist
->
data_size
+=
pkt
.
size
;
ist
->
nb_packets
++
;
if
(
ist
->
discard
)
goto
discard_packet
;
...
...
avconv.h
View file @
47543450
...
...
@@ -233,9 +233,6 @@ typedef struct InputStream {
AVDictionary
*
opts
;
AVRational
framerate
;
/* framerate forced with -r */
/* number of packets successfully read for this stream */
uint64_t
nb_packets
;
int
resample_height
;
int
resample_width
;
int
resample_pix_fmt
;
...
...
@@ -262,6 +259,15 @@ typedef struct InputStream {
int
(
*
hwaccel_retrieve_data
)(
AVCodecContext
*
s
,
AVFrame
*
frame
);
enum
AVPixelFormat
hwaccel_pix_fmt
;
enum
AVPixelFormat
hwaccel_retrieved_pix_fmt
;
/* stats */
// combined size of all the packets read
uint64_t
data_size
;
/* number of packets successfully read for this stream */
uint64_t
nb_packets
;
// number of frames/samples retrieved from the decoder
uint64_t
frames_decoded
;
uint64_t
samples_decoded
;
}
InputStream
;
typedef
struct
InputFile
{
...
...
@@ -343,6 +349,11 @@ typedef struct OutputStream {
/* stats */
// combined size of all the packets written
uint64_t
data_size
;
// number of packets send to the muxer
uint64_t
packets_written
;
// number of frames/samples sent to the encoder
uint64_t
frames_encoded
;
uint64_t
samples_encoded
;
}
OutputStream
;
typedef
struct
OutputFile
{
...
...
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