mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Revert "avconv: use stream copy by default when possible."
This reverts commit 4f4f33844a
.
This commit has some ugly corner cases and needs to be discussed
further.
This commit is contained in:
parent
ad42126abc
commit
6cd9d0f77d
52
avconv.c
52
avconv.c
@ -2831,7 +2831,10 @@ static AVCodec *choose_codec(AVFormatContext *s, AVStream *st, enum AVMediaType
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!codec_name) {
|
if (!codec_name) {
|
||||||
return NULL;
|
if (s->oformat) {
|
||||||
|
st->codec->codec_id = av_guess_codec(s->oformat, NULL, s->filename, NULL, type);
|
||||||
|
return avcodec_find_encoder(st->codec->codec_id);
|
||||||
|
}
|
||||||
} else if (!strcmp(codec_name, "copy"))
|
} else if (!strcmp(codec_name, "copy"))
|
||||||
st->stream_copy = 1;
|
st->stream_copy = 1;
|
||||||
else {
|
else {
|
||||||
@ -3074,7 +3077,7 @@ static void parse_forced_key_frames(char *kf, OutputStream *ost,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static OutputStream *new_output_stream(AVFormatContext *oc, enum AVMediaType type, int source_idx)
|
static OutputStream *new_output_stream(AVFormatContext *oc, enum AVMediaType type)
|
||||||
{
|
{
|
||||||
OutputStream *ost;
|
OutputStream *ost;
|
||||||
AVStream *st = av_new_stream(oc, oc->nb_streams < nb_streamid_map ? streamid_map[oc->nb_streams] : 0);
|
AVStream *st = av_new_stream(oc, oc->nb_streams < nb_streamid_map ? streamid_map[oc->nb_streams] : 0);
|
||||||
@ -3101,18 +3104,6 @@ static OutputStream *new_output_stream(AVFormatContext *oc, enum AVMediaType typ
|
|||||||
ost->st = st;
|
ost->st = st;
|
||||||
st->codec->codec_type = type;
|
st->codec->codec_type = type;
|
||||||
ost->enc = choose_codec(oc, st, type, codec_names);
|
ost->enc = choose_codec(oc, st, type, codec_names);
|
||||||
if (!ost->enc) {
|
|
||||||
/* no codec specified, try copy if possible or fallback to format default */
|
|
||||||
if (source_idx >= 0 && avformat_query_codec(oc->oformat, input_streams[source_idx].st->codec->codec_id,
|
|
||||||
FF_COMPLIANCE_NORMAL) == 1) {
|
|
||||||
st->codec->codec_id = input_streams[source_idx].st->codec->codec_id;
|
|
||||||
st->stream_copy = 1;
|
|
||||||
} else {
|
|
||||||
st->codec->codec_id = av_guess_codec(oc->oformat, NULL, oc->filename, NULL, type);
|
|
||||||
ost->enc = avcodec_find_encoder(st->codec->codec_id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ost->enc) {
|
if (ost->enc) {
|
||||||
ost->opts = filter_codec_opts(codec_opts, ost->enc->id, oc, st);
|
ost->opts = filter_codec_opts(codec_opts, ost->enc->id, oc, st);
|
||||||
}
|
}
|
||||||
@ -3124,13 +3115,13 @@ static OutputStream *new_output_stream(AVFormatContext *oc, enum AVMediaType typ
|
|||||||
return ost;
|
return ost;
|
||||||
}
|
}
|
||||||
|
|
||||||
static OutputStream *new_video_stream(AVFormatContext *oc, int source_idx)
|
static OutputStream *new_video_stream(AVFormatContext *oc)
|
||||||
{
|
{
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
OutputStream *ost;
|
OutputStream *ost;
|
||||||
AVCodecContext *video_enc;
|
AVCodecContext *video_enc;
|
||||||
|
|
||||||
ost = new_output_stream(oc, AVMEDIA_TYPE_VIDEO, source_idx);
|
ost = new_output_stream(oc, AVMEDIA_TYPE_VIDEO);
|
||||||
st = ost->st;
|
st = ost->st;
|
||||||
if (!st->stream_copy) {
|
if (!st->stream_copy) {
|
||||||
ost->frame_aspect_ratio = frame_aspect_ratio;
|
ost->frame_aspect_ratio = frame_aspect_ratio;
|
||||||
@ -3239,13 +3230,13 @@ static OutputStream *new_video_stream(AVFormatContext *oc, int source_idx)
|
|||||||
return ost;
|
return ost;
|
||||||
}
|
}
|
||||||
|
|
||||||
static OutputStream *new_audio_stream(AVFormatContext *oc, int source_idx)
|
static OutputStream *new_audio_stream(AVFormatContext *oc)
|
||||||
{
|
{
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
OutputStream *ost;
|
OutputStream *ost;
|
||||||
AVCodecContext *audio_enc;
|
AVCodecContext *audio_enc;
|
||||||
|
|
||||||
ost = new_output_stream(oc, AVMEDIA_TYPE_AUDIO, source_idx);
|
ost = new_output_stream(oc, AVMEDIA_TYPE_AUDIO);
|
||||||
st = ost->st;
|
st = ost->st;
|
||||||
|
|
||||||
ost->bitstream_filters = audio_bitstream_filters;
|
ost->bitstream_filters = audio_bitstream_filters;
|
||||||
@ -3285,13 +3276,13 @@ static OutputStream *new_audio_stream(AVFormatContext *oc, int source_idx)
|
|||||||
return ost;
|
return ost;
|
||||||
}
|
}
|
||||||
|
|
||||||
static OutputStream *new_data_stream(AVFormatContext *oc, int source_idx)
|
static OutputStream *new_data_stream(AVFormatContext *oc)
|
||||||
{
|
{
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
OutputStream *ost;
|
OutputStream *ost;
|
||||||
AVCodecContext *data_enc;
|
AVCodecContext *data_enc;
|
||||||
|
|
||||||
ost = new_output_stream(oc, AVMEDIA_TYPE_DATA, source_idx);
|
ost = new_output_stream(oc, AVMEDIA_TYPE_DATA);
|
||||||
st = ost->st;
|
st = ost->st;
|
||||||
data_enc = st->codec;
|
data_enc = st->codec;
|
||||||
if (!st->stream_copy) {
|
if (!st->stream_copy) {
|
||||||
@ -3310,13 +3301,13 @@ static OutputStream *new_data_stream(AVFormatContext *oc, int source_idx)
|
|||||||
return ost;
|
return ost;
|
||||||
}
|
}
|
||||||
|
|
||||||
static OutputStream *new_subtitle_stream(AVFormatContext *oc, int source_idx)
|
static OutputStream *new_subtitle_stream(AVFormatContext *oc)
|
||||||
{
|
{
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
OutputStream *ost;
|
OutputStream *ost;
|
||||||
AVCodecContext *subtitle_enc;
|
AVCodecContext *subtitle_enc;
|
||||||
|
|
||||||
ost = new_output_stream(oc, AVMEDIA_TYPE_SUBTITLE, source_idx);
|
ost = new_output_stream(oc, AVMEDIA_TYPE_SUBTITLE);
|
||||||
st = ost->st;
|
st = ost->st;
|
||||||
subtitle_enc = st->codec;
|
subtitle_enc = st->codec;
|
||||||
|
|
||||||
@ -3418,7 +3409,7 @@ static int read_avserver_streams(AVFormatContext *s, const char *filename)
|
|||||||
AVCodec *codec;
|
AVCodec *codec;
|
||||||
|
|
||||||
codec = avcodec_find_encoder(ic->streams[i]->codec->codec_id);
|
codec = avcodec_find_encoder(ic->streams[i]->codec->codec_id);
|
||||||
ost = new_output_stream(s, codec->type, -1);
|
ost = new_output_stream(s, codec->type);
|
||||||
st = ost->st;
|
st = ost->st;
|
||||||
|
|
||||||
// FIXME: a more elegant solution is needed
|
// FIXME: a more elegant solution is needed
|
||||||
@ -3485,7 +3476,7 @@ static void opt_output_file(const char *filename)
|
|||||||
/* pick the "best" stream of each type */
|
/* pick the "best" stream of each type */
|
||||||
#define NEW_STREAM(type, index)\
|
#define NEW_STREAM(type, index)\
|
||||||
if (index >= 0) {\
|
if (index >= 0) {\
|
||||||
ost = new_ ## type ## _stream(oc, index);\
|
ost = new_ ## type ## _stream(oc);\
|
||||||
ost->source_index = index;\
|
ost->source_index = index;\
|
||||||
ost->sync_ist = &input_streams[index];\
|
ost->sync_ist = &input_streams[index];\
|
||||||
input_streams[index].discard = 0;\
|
input_streams[index].discard = 0;\
|
||||||
@ -3531,24 +3522,23 @@ static void opt_output_file(const char *filename)
|
|||||||
} else {
|
} else {
|
||||||
for (i = 0; i < nb_stream_maps; i++) {
|
for (i = 0; i < nb_stream_maps; i++) {
|
||||||
StreamMap *map = &stream_maps[i];
|
StreamMap *map = &stream_maps[i];
|
||||||
int source_idx = input_files[map->file_index].ist_index + map->stream_index;
|
|
||||||
|
|
||||||
if (map->disabled)
|
if (map->disabled)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ist = &input_streams[source_idx];
|
ist = &input_streams[input_files[map->file_index].ist_index + map->stream_index];
|
||||||
switch (ist->st->codec->codec_type) {
|
switch (ist->st->codec->codec_type) {
|
||||||
case AVMEDIA_TYPE_VIDEO: ost = new_video_stream(oc, source_idx); break;
|
case AVMEDIA_TYPE_VIDEO: ost = new_video_stream(oc); break;
|
||||||
case AVMEDIA_TYPE_AUDIO: ost = new_audio_stream(oc, source_idx); break;
|
case AVMEDIA_TYPE_AUDIO: ost = new_audio_stream(oc); break;
|
||||||
case AVMEDIA_TYPE_SUBTITLE: ost = new_subtitle_stream(oc, source_idx); break;
|
case AVMEDIA_TYPE_SUBTITLE: ost = new_subtitle_stream(oc); break;
|
||||||
case AVMEDIA_TYPE_DATA: ost = new_data_stream(oc, source_idx); break;
|
case AVMEDIA_TYPE_DATA: ost = new_data_stream(oc); break;
|
||||||
default:
|
default:
|
||||||
av_log(NULL, AV_LOG_ERROR, "Cannot map stream #%d.%d - unsupported type.\n",
|
av_log(NULL, AV_LOG_ERROR, "Cannot map stream #%d.%d - unsupported type.\n",
|
||||||
map->file_index, map->stream_index);
|
map->file_index, map->stream_index);
|
||||||
exit_program(1);
|
exit_program(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
ost->source_index = source_idx;
|
ost->source_index = input_files[map->file_index].ist_index + map->stream_index;
|
||||||
ost->sync_ist = &input_streams[input_files[map->sync_file_index].ist_index +
|
ost->sync_ist = &input_streams[input_files[map->sync_file_index].ist_index +
|
||||||
map->sync_stream_index];
|
map->sync_stream_index];
|
||||||
ist->discard = 0;
|
ist->discard = 0;
|
||||||
|
@ -320,12 +320,12 @@ fi
|
|||||||
|
|
||||||
if [ -n "$do_wmav1" ] ; then
|
if [ -n "$do_wmav1" ] ; then
|
||||||
do_audio_encoding wmav1.asf "-acodec wmav1"
|
do_audio_encoding wmav1.asf "-acodec wmav1"
|
||||||
do_avconv_nomd5 $pcm_dst $DEC_OPTS -i $target_path/$file -f wav -acodec pcm_s16le
|
do_avconv_nomd5 $pcm_dst $DEC_OPTS -i $target_path/$file -f wav
|
||||||
$tiny_psnr $pcm_dst $pcm_ref 2 8192
|
$tiny_psnr $pcm_dst $pcm_ref 2 8192
|
||||||
fi
|
fi
|
||||||
if [ -n "$do_wmav2" ] ; then
|
if [ -n "$do_wmav2" ] ; then
|
||||||
do_audio_encoding wmav2.asf "-acodec wmav2"
|
do_audio_encoding wmav2.asf "-acodec wmav2"
|
||||||
do_avconv_nomd5 $pcm_dst $DEC_OPTS -i $target_path/$file -f wav -acodec pcm_s16le
|
do_avconv_nomd5 $pcm_dst $DEC_OPTS -i $target_path/$file -f wav
|
||||||
$tiny_psnr $pcm_dst $pcm_ref 2 8192
|
$tiny_psnr $pcm_dst $pcm_ref 2 8192
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -189,7 +189,7 @@ fate-msvideo1-8bit: CMD = framecrc -i $(SAMPLES)/cram/skating.avi -t 1 -pix_fmt
|
|||||||
FATE_TESTS += fate-mszh
|
FATE_TESTS += fate-mszh
|
||||||
fate-mszh: CMD = framecrc -i $(SAMPLES)/lcl/mszh-1frame.avi
|
fate-mszh: CMD = framecrc -i $(SAMPLES)/lcl/mszh-1frame.avi
|
||||||
FATE_TESTS += fate-mtv
|
FATE_TESTS += fate-mtv
|
||||||
fate-mtv: CMD = framecrc -i $(SAMPLES)/mtv/comedian_auto-partial.mtv -vcodec rawvideo -acodec copy -pix_fmt rgb24
|
fate-mtv: CMD = framecrc -i $(SAMPLES)/mtv/comedian_auto-partial.mtv -acodec copy -pix_fmt rgb24
|
||||||
FATE_TESTS += fate-mxf-demux
|
FATE_TESTS += fate-mxf-demux
|
||||||
fate-mxf-demux: CMD = framecrc -i $(SAMPLES)/mxf/C0023S01.mxf -acodec copy -vcodec copy
|
fate-mxf-demux: CMD = framecrc -i $(SAMPLES)/mxf/C0023S01.mxf -acodec copy -vcodec copy
|
||||||
FATE_TESTS += fate-nc-demux
|
FATE_TESTS += fate-nc-demux
|
||||||
@ -197,7 +197,7 @@ fate-nc-demux: CMD = framecrc -i $(SAMPLES)/nc-camera/nc-sample-partial -vcodec
|
|||||||
FATE_TESTS += fate-nsv-demux
|
FATE_TESTS += fate-nsv-demux
|
||||||
fate-nsv-demux: CMD = framecrc -i $(SAMPLES)/nsv/witchblade-51kbps.nsv -t 6 -vcodec copy -acodec copy
|
fate-nsv-demux: CMD = framecrc -i $(SAMPLES)/nsv/witchblade-51kbps.nsv -t 6 -vcodec copy -acodec copy
|
||||||
FATE_TESTS += fate-nuv
|
FATE_TESTS += fate-nuv
|
||||||
fate-nuv: CMD = framecrc -idct simple -i $(SAMPLES)/nuv/Today.nuv -acodec pcm_s16le
|
fate-nuv: CMD = framecrc -idct simple -i $(SAMPLES)/nuv/Today.nuv
|
||||||
FATE_TESTS += fate-oma-demux
|
FATE_TESTS += fate-oma-demux
|
||||||
fate-oma-demux: CMD = crc -i $(SAMPLES)/oma/01-Untitled-partial.oma -acodec copy
|
fate-oma-demux: CMD = crc -i $(SAMPLES)/oma/01-Untitled-partial.oma -acodec copy
|
||||||
FATE_TESTS += fate-pcm_dvd
|
FATE_TESTS += fate-pcm_dvd
|
||||||
|
@ -44,7 +44,7 @@ do_audio_only()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if [ -n "$do_avi" ] ; then
|
if [ -n "$do_avi" ] ; then
|
||||||
do_lavf avi "-acodec mp2"
|
do_lavf avi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$do_asf" ] ; then
|
if [ -n "$do_asf" ] ; then
|
||||||
@ -63,11 +63,11 @@ do_lavf mpg
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$do_mxf" ] ; then
|
if [ -n "$do_mxf" ] ; then
|
||||||
do_lavf mxf "-acodec pcm_s16le -ar 48000 -bf 2 -timecode_frame_start 264363"
|
do_lavf mxf "-ar 48000 -bf 2 -timecode_frame_start 264363"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$do_mxf_d10" ]; then
|
if [ -n "$do_mxf_d10" ]; then
|
||||||
do_lavf mxf_d10 "-acodec pcm_s16le -ar 48000 -ac 2 -r 25 -s 720x576 -vf pad=720:608:0:32 -vcodec mpeg2video -intra -flags +ildct+low_delay -dc 10 -flags2 +ivlc+non_linear_q -qscale 1 -ps 1 -qmin 1 -rc_max_vbv_use 1 -rc_min_vbv_use 1 -pix_fmt yuv422p -minrate 30000k -maxrate 30000k -b 30000k -bufsize 1200000 -top 1 -rc_init_occupancy 1200000 -qmax 12 -f mxf_d10"
|
do_lavf mxf_d10 "-ar 48000 -ac 2 -r 25 -s 720x576 -vf pad=720:608:0:32 -vcodec mpeg2video -intra -flags +ildct+low_delay -dc 10 -flags2 +ivlc+non_linear_q -qscale 1 -ps 1 -qmin 1 -rc_max_vbv_use 1 -rc_min_vbv_use 1 -pix_fmt yuv422p -minrate 30000k -maxrate 30000k -b 30000k -bufsize 1200000 -top 1 -rc_init_occupancy 1200000 -qmax 12 -f mxf_d10"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$do_ts" ] ; then
|
if [ -n "$do_ts" ] ; then
|
||||||
@ -91,11 +91,11 @@ do_lavf mov "-acodec pcm_alaw"
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$do_dv_fmt" ] ; then
|
if [ -n "$do_dv_fmt" ] ; then
|
||||||
do_lavf dv "-acodec pcm_s16le -ar 48000 -r 25 -s pal -ac 2"
|
do_lavf dv "-ar 48000 -r 25 -s pal -ac 2"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$do_gxf" ] ; then
|
if [ -n "$do_gxf" ] ; then
|
||||||
do_lavf gxf "-acodec pcm_s16le -ar 48000 -r 25 -s pal -ac 1"
|
do_lavf gxf "-ar 48000 -r 25 -s pal -ac 1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$do_nut" ] ; then
|
if [ -n "$do_nut" ] ; then
|
||||||
@ -103,7 +103,7 @@ do_lavf nut "-acodec mp2"
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$do_mkv" ] ; then
|
if [ -n "$do_mkv" ] ; then
|
||||||
do_lavf mkv "-acodec mp2"
|
do_lavf mkv
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
@ -198,11 +198,11 @@ do_audio_only mmf
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$do_aiff" ] ; then
|
if [ -n "$do_aiff" ] ; then
|
||||||
do_audio_only aif "" "-acodec pcm_s16be"
|
do_audio_only aif
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$do_voc" ] ; then
|
if [ -n "$do_voc" ] ; then
|
||||||
do_audio_only voc "" "-acodec pcm_u8"
|
do_audio_only voc
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$do_voc_s16" ] ; then
|
if [ -n "$do_voc_s16" ] ; then
|
||||||
@ -228,8 +228,8 @@ conversions="yuv420p yuv422p yuv444p yuyv422 yuv410p yuv411p yuvj420p \
|
|||||||
for pix_fmt in $conversions ; do
|
for pix_fmt in $conversions ; do
|
||||||
file=${outfile}${pix_fmt}.yuv
|
file=${outfile}${pix_fmt}.yuv
|
||||||
run_avconv $DEC_OPTS -r 1 -t 1 -f image2 -vcodec pgmyuv -i $raw_src \
|
run_avconv $DEC_OPTS -r 1 -t 1 -f image2 -vcodec pgmyuv -i $raw_src \
|
||||||
$ENC_OPTS -f rawvideo -vcodec rawvideo -s 352x288 -pix_fmt $pix_fmt $target_path/$raw_dst
|
$ENC_OPTS -f rawvideo -s 352x288 -pix_fmt $pix_fmt $target_path/$raw_dst
|
||||||
do_avconv $file $DEC_OPTS -f rawvideo -s 352x288 -pix_fmt $pix_fmt -i $target_path/$raw_dst \
|
do_avconv $file $DEC_OPTS -f rawvideo -s 352x288 -pix_fmt $pix_fmt -i $target_path/$raw_dst \
|
||||||
$ENC_OPTS -f rawvideo -vcodec rawvideo -s 352x288 -pix_fmt yuv444p
|
$ENC_OPTS -f rawvideo -s 352x288 -pix_fmt yuv444p
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
@ -95,7 +95,7 @@ do_avconv_crc()
|
|||||||
|
|
||||||
do_video_decoding()
|
do_video_decoding()
|
||||||
{
|
{
|
||||||
do_avconv $raw_dst $DEC_OPTS $1 -i $target_path/$file -f rawvideo -vcodec rawvideo $ENC_OPTS -vsync 0 $2
|
do_avconv $raw_dst $DEC_OPTS $1 -i $target_path/$file -f rawvideo $ENC_OPTS -vsync 0 $2
|
||||||
}
|
}
|
||||||
|
|
||||||
do_video_encoding()
|
do_video_encoding()
|
||||||
@ -112,5 +112,5 @@ do_audio_encoding()
|
|||||||
|
|
||||||
do_audio_decoding()
|
do_audio_decoding()
|
||||||
{
|
{
|
||||||
do_avconv $pcm_dst $DEC_OPTS -i $target_path/$file -sample_fmt s16 -f wav -acodec pcm_s16le
|
do_avconv $pcm_dst $DEC_OPTS -i $target_path/$file -sample_fmt s16 -f wav
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user