}
if (!codec_name) {
- 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);
- }
+ return NULL;
} else if (!strcmp(codec_name, "copy"))
st->stream_copy = 1;
else {
}
}
-static OutputStream *new_output_stream(AVFormatContext *oc, enum AVMediaType type)
+static OutputStream *new_output_stream(AVFormatContext *oc, enum AVMediaType type, int source_idx)
{
OutputStream *ost;
AVStream *st = av_new_stream(oc, oc->nb_streams < nb_streamid_map ? streamid_map[oc->nb_streams] : 0);
ost->st = st;
st->codec->codec_type = type;
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) {
ost->opts = filter_codec_opts(codec_opts, ost->enc->id, oc, st);
}
return ost;
}
-static OutputStream *new_video_stream(AVFormatContext *oc)
+static OutputStream *new_video_stream(AVFormatContext *oc, int source_idx)
{
AVStream *st;
OutputStream *ost;
AVCodecContext *video_enc;
- ost = new_output_stream(oc, AVMEDIA_TYPE_VIDEO);
+ ost = new_output_stream(oc, AVMEDIA_TYPE_VIDEO, source_idx);
st = ost->st;
if (!st->stream_copy) {
ost->frame_aspect_ratio = frame_aspect_ratio;
return ost;
}
-static OutputStream *new_audio_stream(AVFormatContext *oc)
+static OutputStream *new_audio_stream(AVFormatContext *oc, int source_idx)
{
AVStream *st;
OutputStream *ost;
AVCodecContext *audio_enc;
- ost = new_output_stream(oc, AVMEDIA_TYPE_AUDIO);
+ ost = new_output_stream(oc, AVMEDIA_TYPE_AUDIO, source_idx);
st = ost->st;
ost->bitstream_filters = audio_bitstream_filters;
return ost;
}
-static OutputStream *new_data_stream(AVFormatContext *oc)
+static OutputStream *new_data_stream(AVFormatContext *oc, int source_idx)
{
AVStream *st;
OutputStream *ost;
AVCodecContext *data_enc;
- ost = new_output_stream(oc, AVMEDIA_TYPE_DATA);
+ ost = new_output_stream(oc, AVMEDIA_TYPE_DATA, source_idx);
st = ost->st;
data_enc = st->codec;
if (!st->stream_copy) {
return ost;
}
-static OutputStream *new_subtitle_stream(AVFormatContext *oc)
+static OutputStream *new_subtitle_stream(AVFormatContext *oc, int source_idx)
{
AVStream *st;
OutputStream *ost;
AVCodecContext *subtitle_enc;
- ost = new_output_stream(oc, AVMEDIA_TYPE_SUBTITLE);
+ ost = new_output_stream(oc, AVMEDIA_TYPE_SUBTITLE, source_idx);
st = ost->st;
subtitle_enc = st->codec;
AVCodec *codec;
codec = avcodec_find_encoder(ic->streams[i]->codec->codec_id);
- ost = new_output_stream(s, codec->type);
+ ost = new_output_stream(s, codec->type, -1);
st = ost->st;
// FIXME: a more elegant solution is needed
/* pick the "best" stream of each type */
#define NEW_STREAM(type, index)\
if (index >= 0) {\
- ost = new_ ## type ## _stream(oc);\
+ ost = new_ ## type ## _stream(oc, index);\
ost->source_index = index;\
ost->sync_ist = &input_streams[index];\
input_streams[index].discard = 0;\
} else {
for (i = 0; i < nb_stream_maps; i++) {
StreamMap *map = &stream_maps[i];
+ int source_idx = input_files[map->file_index].ist_index + map->stream_index;
if (map->disabled)
continue;
- ist = &input_streams[input_files[map->file_index].ist_index + map->stream_index];
+ ist = &input_streams[source_idx];
switch (ist->st->codec->codec_type) {
- case AVMEDIA_TYPE_VIDEO: ost = new_video_stream(oc); break;
- case AVMEDIA_TYPE_AUDIO: ost = new_audio_stream(oc); break;
- case AVMEDIA_TYPE_SUBTITLE: ost = new_subtitle_stream(oc); break;
- case AVMEDIA_TYPE_DATA: ost = new_data_stream(oc); break;
+ case AVMEDIA_TYPE_VIDEO: ost = new_video_stream(oc, source_idx); break;
+ case AVMEDIA_TYPE_AUDIO: ost = new_audio_stream(oc, source_idx); break;
+ case AVMEDIA_TYPE_SUBTITLE: ost = new_subtitle_stream(oc, source_idx); break;
+ case AVMEDIA_TYPE_DATA: ost = new_data_stream(oc, source_idx); break;
default:
av_log(NULL, AV_LOG_ERROR, "Cannot map stream #%d.%d - unsupported type.\n",
map->file_index, map->stream_index);
exit_program(1);
}
- ost->source_index = input_files[map->file_index].ist_index + map->stream_index;
+ ost->source_index = source_idx;
ost->sync_ist = &input_streams[input_files[map->sync_file_index].ist_index +
map->sync_stream_index];
ist->discard = 0;
}
if [ -n "$do_avi" ] ; then
-do_lavf avi
+do_lavf avi "-acodec mp2"
fi
if [ -n "$do_asf" ] ; then
fi
if [ -n "$do_mxf" ] ; then
-do_lavf mxf "-ar 48000 -bf 2 -timecode_frame_start 264363"
+do_lavf mxf "-acodec pcm_s16le -ar 48000 -bf 2 -timecode_frame_start 264363"
fi
if [ -n "$do_mxf_d10" ]; then
-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"
+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"
fi
if [ -n "$do_ts" ] ; then
fi
if [ -n "$do_dv_fmt" ] ; then
-do_lavf dv "-ar 48000 -r 25 -s pal -ac 2"
+do_lavf dv "-acodec pcm_s16le -ar 48000 -r 25 -s pal -ac 2"
fi
if [ -n "$do_gxf" ] ; then
-do_lavf gxf "-ar 48000 -r 25 -s pal -ac 1"
+do_lavf gxf "-acodec pcm_s16le -ar 48000 -r 25 -s pal -ac 1"
fi
if [ -n "$do_nut" ] ; then
fi
if [ -n "$do_mkv" ] ; then
-do_lavf mkv
+do_lavf mkv "-acodec mp2"
fi
fi
if [ -n "$do_aiff" ] ; then
-do_audio_only aif
+do_audio_only aif "" "-acodec pcm_s16be"
fi
if [ -n "$do_voc" ] ; then
-do_audio_only voc
+do_audio_only voc "" "-acodec pcm_u8"
fi
if [ -n "$do_voc_s16" ] ; then
for pix_fmt in $conversions ; do
file=${outfile}${pix_fmt}.yuv
run_avconv $DEC_OPTS -r 1 -t 1 -f image2 -vcodec pgmyuv -i $raw_src \
- $ENC_OPTS -f rawvideo -s 352x288 -pix_fmt $pix_fmt $target_path/$raw_dst
+ $ENC_OPTS -f rawvideo -vcodec 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 \
- $ENC_OPTS -f rawvideo -s 352x288 -pix_fmt yuv444p
+ $ENC_OPTS -f rawvideo -vcodec rawvideo -s 352x288 -pix_fmt yuv444p
done
fi