Bumping this? I'd like to request a review because I think being able to
set the input framerate on streamcopy is worthwhile. In case of
formatting issues with the reply email, I've attached the patch file as
well.
In terms of testing, I've tested this with various input formats
(matroska, mp4, avi, nut) and various output formats as well, both
shrinking and growing the framerate.
On 1/9/19 5:26 PM, Leo Izen wrote:
---
fftools/ffmpeg.c | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index 544f1a1cef..f4bd5d97b7 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -2038,12 +2038,14 @@ static void do_streamcopy(InputStream *ist,
OutputStream *ost, const AVPacket *p
if (ost->enc_ctx->codec_type == AVMEDIA_TYPE_VIDEO)
ost->sync_opts++;
- if (pkt->pts != AV_NOPTS_VALUE)
+ if (ist->framerate.num)
+ opkt.pts = av_rescale_q(ist->pts, AV_TIME_BASE_Q, ost->mux_timebase) -
ost_tb_start_time;
+ else if (pkt->pts != AV_NOPTS_VALUE)
opkt.pts = av_rescale_q(pkt->pts, ist->st->time_base,
ost->mux_timebase) - ost_tb_start_time;
else
opkt.pts = AV_NOPTS_VALUE;
- if (pkt->dts == AV_NOPTS_VALUE)
+ if (pkt->dts == AV_NOPTS_VALUE || ist->framerate.num)
opkt.dts = av_rescale_q(ist->dts, AV_TIME_BASE_Q, ost->mux_timebase);
else
opkt.dts = av_rescale_q(pkt->dts, ist->st->time_base,
ost->mux_timebase);
@@ -2597,7 +2599,7 @@ static int process_input_packet(InputStream *ist, const
AVPacket *pkt, int no_eo
avpkt = *pkt;
}
- if (pkt && pkt->dts != AV_NOPTS_VALUE) {
+ if (pkt && pkt->dts != AV_NOPTS_VALUE && !ist->framerate.num) {
ist->next_dts = ist->dts = av_rescale_q(pkt->dts, ist->st->time_base,
AV_TIME_BASE_Q);
if (ist->dec_ctx->codec_type != AVMEDIA_TYPE_VIDEO ||
!ist->decoding_needed)
ist->next_pts = ist->pts = ist->dts;
@@ -3153,8 +3155,15 @@ static int init_output_stream_streamcopy(OutputStream
*ost)
else
sar = par_src->sample_aspect_ratio;
ost->st->sample_aspect_ratio = par_dst->sample_aspect_ratio = sar;
- ost->st->avg_frame_rate = ist->st->avg_frame_rate;
- ost->st->r_frame_rate = ist->st->r_frame_rate;
+
+ if (ist->framerate.num) {
+ ost->st->avg_frame_rate = ist->framerate;
+ ost->st->r_frame_rate = ist->framerate;
+ } else {
+ ost->st->avg_frame_rate = ist->st->avg_frame_rate;
+ ost->st->r_frame_rate = ist->st->r_frame_rate;
+ }
+
break;
}
>From 8338eb06ceb8e8f954a5e0740751106fb1f9ab44 Mon Sep 17 00:00:00 2001
From: Leo Izen <leo.i...@gmail.com>
Date: Fri, 19 Oct 2018 19:26:41 -0400
Subject: [PATCH] fftools/ffmpeg.c: allow forcing input framerate on streamcopy
---
fftools/ffmpeg.c | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index 544f1a1cef..f4bd5d97b7 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -2038,12 +2038,14 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p
if (ost->enc_ctx->codec_type == AVMEDIA_TYPE_VIDEO)
ost->sync_opts++;
- if (pkt->pts != AV_NOPTS_VALUE)
+ if (ist->framerate.num)
+ opkt.pts = av_rescale_q(ist->pts, AV_TIME_BASE_Q, ost->mux_timebase) - ost_tb_start_time;
+ else if (pkt->pts != AV_NOPTS_VALUE)
opkt.pts = av_rescale_q(pkt->pts, ist->st->time_base, ost->mux_timebase) - ost_tb_start_time;
else
opkt.pts = AV_NOPTS_VALUE;
- if (pkt->dts == AV_NOPTS_VALUE)
+ if (pkt->dts == AV_NOPTS_VALUE || ist->framerate.num)
opkt.dts = av_rescale_q(ist->dts, AV_TIME_BASE_Q, ost->mux_timebase);
else
opkt.dts = av_rescale_q(pkt->dts, ist->st->time_base, ost->mux_timebase);
@@ -2597,7 +2599,7 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo
avpkt = *pkt;
}
- if (pkt && pkt->dts != AV_NOPTS_VALUE) {
+ if (pkt && pkt->dts != AV_NOPTS_VALUE && !ist->framerate.num) {
ist->next_dts = ist->dts = av_rescale_q(pkt->dts, ist->st->time_base, AV_TIME_BASE_Q);
if (ist->dec_ctx->codec_type != AVMEDIA_TYPE_VIDEO || !ist->decoding_needed)
ist->next_pts = ist->pts = ist->dts;
@@ -3153,8 +3155,15 @@ static int init_output_stream_streamcopy(OutputStream *ost)
else
sar = par_src->sample_aspect_ratio;
ost->st->sample_aspect_ratio = par_dst->sample_aspect_ratio = sar;
- ost->st->avg_frame_rate = ist->st->avg_frame_rate;
- ost->st->r_frame_rate = ist->st->r_frame_rate;
+
+ if (ist->framerate.num) {
+ ost->st->avg_frame_rate = ist->framerate;
+ ost->st->r_frame_rate = ist->framerate;
+ } else {
+ ost->st->avg_frame_rate = ist->st->avg_frame_rate;
+ ost->st->r_frame_rate = ist->st->r_frame_rate;
+ }
+
break;
}
--
2.20.1
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".