From: Anton Khirnov <anton@khirnov.net>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] [PATCH 01/35] fftools/ffmpeg_mux: add private muxer context
Date: Wed, 13 Jul 2022 12:58:54 +0200
Message-ID: <165770993479.25016.10678999447718569031@lain.khirnov.net> (raw)
In-Reply-To: <20220708165811.GX396728@pb2>
Quoting Michael Niedermayer (2022-07-08 18:58:11)
> On Fri, Jun 17, 2022 at 12:27:18PM +0200, Anton Khirnov wrote:
> > The current version of this set can also be found in my tree
> > git://git.khirnov.net/libav
> > branch ffmpeg_mt/mux
>
> There are really many files changing, its hard to say for sure that all are the
> same issue, but basically it all seems more or less frames in some streams
> including cases where there are hugely more or 0
>
> Here are some examples:
>
>
> ffmpeg -i matrixbench_mpeg2.mpg -vcodec rawvideo -pix_fmt rgb555 -allow_raw_vfw 1 -vframes 1 -bitexact file-rgb555.mkv
>
> the new file is much bigger (due to the audio track)
>
> -rw-r----- 1 michael michael 2765813 Jul 8 16:57 file-rgb555.mkv
> -rw-r----- 1 michael michael 834643 Jul 8 17:02 file-rgb555-ref.mkv
Where can I find this file?
> another one:
> ./ffmpeg -y -i vlcticket/8344/DVR_NVR_IP\ Camera01_20130321162325_20130321162358_576877.mp4 -vframes 1 -aframes 1 -bitexact -f framecrc -
>
> This appears to loose the video stream
>
> #channel_layout_name 1: mono
> -0, 0, 0, 1, 2880000, 0x4136bc92
> 1, 112, 112, 320, 640, 0x2cd73b36
>
> sample in https://samples.ffmpeg.org/camera-dvr/hikvision/
The sync queue got confused by stale frame durations, which are now
overwritten in the updated version of 22/35.
But do note that there may be valid situations where a stream will
"disappear" when you specify -frames constraints on multiple streams,
because -frames is supposed to cut the whole file once the constraint is
reached, not just the stream it applies to. If you want a specific
number of frames in each stream, you should rather use the trim/atrim
filters.
See also my discussion with Andreas under 24/35 in this thread.
> This one fails a bit worse than before (ffmpeg succeeds before besides producing errors as well)
> my notes say this worked better only before 04aa09c4bcf2d5a634a35da3a3ae3fc1abe30ef8
> the file is a little big and i havnt found it anywhere online, i will try to
> send it privately to you
>
> ffmpeg -i 2014-10-17\ 11.31\ i95Dev\ -\ Carlo\ Pazolini\ _\ KWI\ -\ Meeting.g2m -bitexact -max_muxing_queue_size 8000 -vframes 2 file-g2m5.avi
>
> Metadata:
> DeviceConformanceTemplate: L2
> WMFSDKNeeded : 0.0.0.0000
> WMFSDKVersion : 12.0.7601.17514
> IsVBR : 1
> WM/ToolVersion : 6.4.3 Build 1767
> WM/ToolName : GoToMeeting
> BitRateFrom the writer: 97087
> Audio samples : 34341
> Video samples : 3740
> recording time : Fri, 17 Oct 2014 12:28:16 Eastern Daylight Time
> Duration: 00:57:13.86, start: 0.000000, bitrate: 100 kb/s
> Stream #0:0: Audio: wmav2 (a[1][0][0] / 0x0161), 44100 Hz, mono, fltp, 48 kb/s
> Stream #0:1: Data: none, 2 kb/s
> Stream #0:2: Video: g2m (G2M5 / 0x354D3247), rgb24, 1440x900, 49 kb/s, 1k tbr, 1k tbn
> Stream mapping:
> Stream #0:2 -> #0:0 (g2m (native) -> mpeg4 (native))
> Stream #0:0 -> #0:1 (wmav2 (native) -> mp3 (libmp3lame))
> Press [q] to stop, [?] for help
> [libmp3lame @ 0x55c17cf03140] Queue input is backward in time
> Output #0, avi, to 'file-g2m5.avi':
> Metadata:
> DeviceConformanceTemplate: L2
> WMFSDKNeeded : 0.0.0.0000
> WMFSDKVersion : 12.0.7601.17514
> IsVBR : 1
> WM/ToolVersion : 6.4.3 Build 1767
> WM/ToolName : GoToMeeting
> BitRateFrom the writer: 97087
> Audio samples : 34341
> Video samples : 3740
> recording time : Fri, 17 Oct 2014 12:28:16 Eastern Daylight Time
> Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p(tv, progressive), 1440x900, q=2-31, 200 kb/s, 1k fps, 1k tbn
> Metadata:
> encoder : Lavc mpeg4
> Side data:
> cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
> Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 44100 Hz, mono, fltp
> Metadata:
> encoder : Lavc libmp3lame
> [avi @ 0x55c17cf31340] Too large number of skipped frames 194184 > 600000kbits/s speed= 140x
> av_interleaved_write_frame(): Invalid argument
> Error muxing a packet for output file #0
> [avi @ 0x55c17cf31340] Too large number of skipped frames 194085 > 60000
> frame= 2 fps=1.3 q=2.0 Lsize= 1855kB time=00:03:14.18 bitrate= 78.3kbits/s speed= 129x
> video:149kB audio:1517kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 11.381945%
> Conversion failed!
The new code ends up sending a few more audio packets to the muxer, so
av_interleaved_write_frame() returns an error, which results in a
non-zero exit status.
In the current code, the same error appears during flushing the muxing
queue in av_write_trailer() and is actually returned from
av_write_trailer(), but ffmpeg for some reason does not treat
av_write_trailer() errors the same way. I do not know why that is, seems
like a bug to me.
In any case, conversion is quite broken both before and after my patches,
so I would say it is not a problem with my code.
> ./ffmpeg -i tickets/1666/avc-intra-panasonic-AG-HPX301E.mov -vframes 3 -aframes 2 -bitexact -f framecrc -
> duplicate behavior of the a/vframe issue above, one stream disappears
>
> sample in https://samples.ffmpeg.org/ffmpeg-bugs/trac/ticket1666/
Again, should be resolved by the updated patch.
--
Anton Khirnov
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2022-07-13 10:59 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-16 19:55 Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 02/35] fftools/ffmpeg: add a helper function to access output file size Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 03/35] fftools/ffmpeg: fix the type of limit_filesize Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 04/35] fftools/ffmpeg: refactor limiting output file size with -fs Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 05/35] fftools/ffmpeg: set want_sdp when initializing the muxer Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 06/35] fftools/ffmpeg: write the header for stream-less outputs " Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 07/35] fftools/ffmpeg: move closing the file into of_write_trailer() Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 08/35] fftools/ffmpeg: refactor the code checking for bitexact output Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 09/35] fftools/ffmpeg: access output file chapters through a wrapper Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 10/35] fftools/ffmpeg: do not log to the muxer context Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 11/35] fftools/ffmpeg: move the mux queue into muxer private data Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 12/35] fftools/ffmpeg_mux: split queuing packets into a separate function Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 13/35] fftools/ffmpeg_mux: split of_write_packet() Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 14/35] fftools/ffmpeg: move output file opts into private context Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 15/35] fftools/ffmpeg: move freeing 2pass input stats to a better place Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 16/35] fftools/ffmpeg: use refcounted packets for encoded subtitles Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 17/35] fftools/ffmpeg: do not send spurious EOF for streamcopy when looping Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 18/35] fate/ffmpeg: add a test for interleaving video+subs Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 19/35] fftools/ffmpeg: use last filter output pts to choose next output stream Anton Khirnov
2022-06-17 18:45 ` Michael Niedermayer
2022-06-23 15:32 ` [FFmpeg-devel] [PATCH] " Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 20/35] fftools/ffmpeg: use pre-BSF DTS for choosing next output Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 21/35] fftools: add an object pool Anton Khirnov
2022-06-16 21:41 ` Andreas Rheinhardt
2022-07-22 15:39 ` [FFmpeg-devel] [PATCH 22/35] " Anton Khirnov
2022-07-22 17:58 ` Andreas Rheinhardt
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 22/35] fftools/ffmpeg: rework -shortest implementation Anton Khirnov
2022-06-16 21:05 ` Andreas Rheinhardt
2022-06-17 10:25 ` Anton Khirnov
2022-06-23 10:04 ` [FFmpeg-devel] [PATCH] " Anton Khirnov
2022-07-13 10:50 ` Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 23/35] fftools/ffmpeg_mux: reindent Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 24/35] fftools/ffmpeg: use the sync queues to handle -frames Anton Khirnov
2022-06-16 20:33 ` Andreas Rheinhardt
2022-06-17 10:46 ` Anton Khirnov
2022-06-22 8:27 ` Andreas Rheinhardt
2022-06-22 17:26 ` Anton Khirnov
2022-06-23 22:12 ` Michael Niedermayer
2022-07-04 16:11 ` [FFmpeg-devel] [PATCH] " Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 25/35] fftools/ffmpeg: stop using OutputStream.frame_number in print_report() Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 26/35] fftools/ffmpeg: only set OutputStream.frame_number for video encoding Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 27/35] fftools/ffmpeg: make the muxer AVFormatContext private to ffmpeg_mux.c Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 28/35] fftools/ffmpeg_mux: return errors from of_submit_packet() Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 29/35] fftools/ffmpeg_mux: return errors from submit_packet() Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 30/35] fftools/ffmpeg_mux: return errors from write_packet() Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 31/35] fftools/ffmpeg_mux: do not call exit_program() in print_sdp() Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 32/35] fftools/ffmpeg: stop using av_stream_get_end_pts() Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 33/35] fftools/ffmpeg: depend on threads Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 34/35] fftools: add a multistream thread-safe queue Anton Khirnov
2022-06-16 19:55 ` [FFmpeg-devel] [PATCH 35/35] fftools/ffmpeg: move each muxer to a separate thread Anton Khirnov
2022-06-17 10:27 ` [FFmpeg-devel] [PATCH 01/35] fftools/ffmpeg_mux: add private muxer context Anton Khirnov
2022-07-08 16:58 ` Michael Niedermayer
2022-07-13 10:58 ` Anton Khirnov [this message]
2022-07-13 22:12 ` Michael Niedermayer
2022-07-14 5:37 ` Anton Khirnov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=165770993479.25016.10678999447718569031@lain.khirnov.net \
--to=anton@khirnov.net \
--cc=ffmpeg-devel@ffmpeg.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git