M BUZZ CRAZE NEWS
// general

FFMPEG - Transcoding webm to mp4 - wrong duration

By Mia Morrison

I have a webm file that I want to convert to a mp4 file. The result is a mp4 file with a different duration than the webm (much longer).

  • Webm file (via WeTransfer, example.webm, 421kb)

About the webm file

I'm creating the webm file using the browser's media recorder api. When playing, it shows a 4 seconds clip (as it should).

ffprobe -v error -show_format -show_streams example.webm

Output:

[STREAM]
index=0
codec_name=vp8
codec_long_name=On2 VP8
profile=0
codec_type=video
codec_time_base=0/1
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
width=960
height=540
coded_width=960
coded_height=540
closed_captions=0
has_b_frames=0
sample_aspect_ratio=1:1
display_aspect_ratio=16:9
pix_fmt=yuv420p
level=-99
color_range=unknown
color_space=unknown
color_transfer=unknown
color_primaries=unknown
chroma_location=unspecified
field_order=progressive
timecode=N/A
refs=1
id=N/A
r_frame_rate=1000/1
avg_frame_rate=0/0
time_base=1/1000
start_pts=0
start_time=0.000000
duration_ts=N/A
duration=N/A
bit_rate=N/A
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=1
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
TAG:language=eng
TAG:alpha_mode=1
[/STREAM]
[FORMAT]
filename=example.webm
nb_streams=1
nb_programs=0
format_name=matroska,webm
format_long_name=Matroska / WebM
start_time=0.000000
duration=N/A <------------ Noticed it
size=431167
bit_rate=N/A <------------ Noticed it
probe_score=100
TAG:encoder=Chrome
[/FORMAT]

Noticed that the duration is N/A so after browsing on the superuser community I saw a thread about a bug in that api regarding the duration but also found a solution in the answers that said simply to run ffmpeg on the file.

So I ran the following command:

ffmpeg -i example.webm example-n.webm

Output:

 libavutil 56. 51.100 / 56. 51.100 libavcodec 58. 91.100 / 58. 91.100 libavformat 58. 45.100 / 58. 45.100 libavdevice 58. 10.100 / 58. 10.100 libavfilter 7. 85.100 / 7. 85.100 libswscale 5. 7.100 / 5. 7.100 libswresample 3. 7.100 / 3. 7.100 libpostproc 55. 7.100 / 55. 7.100
Input #0, matroska,webm, from 'example.webm': Metadata: encoder : Chrome Duration: N/A, start: 0.000000, bitrate: N/A Stream #0:0(eng): Video: vp8, yuv420p(progressive), 960x540, SAR 1:1 DAR 16:9, 1k tbr, 1k tbn, 1k tbc (default) Metadata: alpha_mode : 1
Stream mapping: Stream #0:0 -> #0:0 (vp8 (native) -> vp9 (libvpx-vp9))
Press [q] to stop, [?] for help
[libvpx-vp9 @ 0x7fb3a501dc00] v1.8.2-217-gbf3fe26f7
[libvpx-vp9 @ 0x7fb3a501dc00] Neither bitrate nor constrained quality specified, using default CRF of 32
Output #0, webm, to 'example-n.webm': Metadata: encoder : Lavf58.45.100 Stream #0:0(eng): Video: vp9 (libvpx-vp9), yuv420p, 960x540 [SAR 1:1 DAR 16:9], q=-1--1, 1k fps, 1k tbn, 1k tbc (default) Metadata: alpha_mode : 1 encoder : Lavc58.91.100 libvpx-vp9 Side data: cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame= 34 fps=0.0 q=0.0 size= 1kB time=00:00:00.31 bitrate= 13.2kbits/s
frame= 45 fps= 43 q=0.0 size= 1kB time=00:00:00.70 bitrate= 5.9kbits/s
frame= 56 fps= 36 q=0.0 size= 1kB time=00:00:01.09 bitrate= 3.8kbits/s
frame= 67 fps= 32 q=0.0 size= 1kB time=00:00:01.47 bitrate= 2.8kbits/s
frame= 78 fps= 30 q=0.0 size= 1kB time=00:00:01.88 bitrate= 2.2kbits/s
frame= 89 fps= 29 q=0.0 size= 1kB time=00:00:02.29 bitrate= 1.8kbits/s
frame= 100 fps= 28 q=0.0 size= 1kB time=00:00:02.67 bitrate= 1.6kbits/s
frame= 111 fps= 27 q=0.0 size= 1kB time=00:00:03.05 bitrate= 1.4kbits/s
frame= 113 fps= 21 q=0.0 Lsize= 58kB time=00:00:03.97 bitrate= 119.8kbits/s speed=0.727x
video:57kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.312099%

Running the same ffprobe command for the new webm file:

[FORMAT]
filename=example-n.webm
nb_streams=1
nb_programs=0
format_name=matroska,webm
format_long_name=Matroska / WebM
start_time=0.000000
duration=3.972000 <--- NOT N/A. 4 seconds - looks better.
size=59473
bit_rate=119784
probe_score=100
TAG:ENCODER=Lavf58.45.100
[/FORMAT]

Edit: but on the [STREAM] it still:

duration_ts=N/A
duration=N/A
bit_rate=N/A

Converting to mp4

Running the command:

ffmpeg -i example.webm example-1.mp4

Output:

 libavutil 56. 51.100 / 56. 51.100 libavcodec 58. 91.100 / 58. 91.100 libavformat 58. 45.100 / 58. 45.100 libavdevice 58. 10.100 / 58. 10.100 libavfilter 7. 85.100 / 7. 85.100 libswscale 5. 7.100 / 5. 7.100 libswresample 3. 7.100 / 3. 7.100 libpostproc 55. 7.100 / 55. 7.100
Input #0, matroska,webm, from 'example.webm': Metadata: encoder : Chrome Duration: N/A, start: 0.000000, bitrate: N/A Stream #0:0(eng): Video: vp8, yuv420p(progressive), 960x540, SAR 1:1 DAR 16:9, 1k tbr, 1k tbn, 1k tbc (default) Metadata: alpha_mode : 1
Stream mapping: Stream #0:0 -> #0:0 (vp8 (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x7fbb0f80b600] using SAR=1/1
[libx264 @ 0x7fbb0f80b600] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x7fbb0f80b600] profile High, level 5.2, 4:2:0, 8-bit
[libx264 @ 0x7fbb0f80b600] 264 - core 161 r3015 4c2aafd - H.264/MPEG-4 AVC codec - Copyleft 2003-2020 - - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'example-1.mp4': Metadata: encoder : Lavf58.45.100 Stream #0:0(eng): Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 960x540 [SAR 1:1 DAR 16:9], q=-1--1, 1k fps, 16k tbn, 1k tbc (default) Metadata: alpha_mode : 1 encoder : Lavc58.91.100 libx264 Side data: cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame= 316 fps=0.0 q=33.0 size= 0kB time=00:00:00.25 bitrate= 1.5kbits/
frame= 672 fps=658 q=33.0 size= 0kB time=00:00:00.61 bitrate= 0.6kbits/
More than 1000 frames duplicated
frame= 1060 fps=679 q=33.0 size= 0kB time=00:00:01.00 bitrate= 0.4kbits/
frame= 1442 fps=687 q=33.0 size= 0kB time=00:00:01.38 bitrate= 0.3kbits/
frame= 1816 fps=695 q=33.0 size= 0kB time=00:00:01.75 bitrate= 0.2kbits/
frame= 2195 fps=698 q=33.0 size= 256kB time=00:00:02.13 bitrate= 982.0kbits/
frame= 2572 fps=703 q=33.0 size= 256kB time=00:00:02.51 bitrate= 834.7kbits/
frame= 2948 fps=705 q=33.0 size= 256kB time=00:00:02.88 bitrate= 726.0kbits/
frame= 3332 fps=705 q=33.0 size= 256kB time=00:00:03.27 bitrate= 640.8kbits/
frame= 3692 fps=703 q=33.0 size= 256kB time=00:00:03.63 bitrate= 577.3kbits/
frame= 4006 fps=692 q=-1.0 Lsize= 545kB time=00:00:04.00 bitrate=1116.0kbits/s dup=3893 drop=0 speed=0.692x
video:498kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 9.589657%
[libx264 @ 0x7fbb0f80b600] frame I:17 Avg QP:19.61 size: 13978
[libx264 @ 0x7fbb0f80b600] frame P:1010 Avg QP:18.45 size: 156
[libx264 @ 0x7fbb0f80b600] frame B:2979 Avg QP:22.92 size: 38
[libx264 @ 0x7fbb0f80b600] consecutive B-frames: 0.8% 0.0% 0.0% 99.2%
[libx264 @ 0x7fbb0f80b600] mb I I16..4: 18.6% 64.7% 16.7%
[libx264 @ 0x7fbb0f80b600] mb P I16..4: 0.2% 0.3% 0.0% P16..4: 1.6% 0.2% 0.1% 0.0% 0.0% skip:97.5%
[libx264 @ 0x7fbb0f80b600] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 0.7% 0.0% 0.0% direct: 0.0% skip:99.3% L0:52.4% L1:47.5% BI: 0.0%
[libx264 @ 0x7fbb0f80b600] 8x8 transform intra:62.0% inter:74.2%
[libx264 @ 0x7fbb0f80b600] coded y,uvDC,uvAC intra: 10.8% 18.8% 13.6% inter: 0.0% 0.1% 0.0%
[libx264 @ 0x7fbb0f80b600] i16 v,h,dc,p: 34% 54% 11% 2%
[libx264 @ 0x7fbb0f80b600] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 63% 11% 24% 0% 0% 0% 0% 0% 0%
[libx264 @ 0x7fbb0f80b600] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 44% 22% 14% 4% 4% 3% 4% 3% 3%
[libx264 @ 0x7fbb0f80b600] i8c dc,h,v,p: 70% 19% 9% 1%
[libx264 @ 0x7fbb0f80b600] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7fbb0f80b600] ref P L0: 91.8% 2.4% 5.0% 0.8%
[libx264 @ 0x7fbb0f80b600] ref B L0: 69.0% 30.4% 0.6%
[libx264 @ 0x7fbb0f80b600] ref B L1: 97.2% 2.8%
[libx264 @ 0x7fbb0f80b600] kb/s:1016.19

Problem: The mp4 file output, when playing, the player says its duration is 21 seconds. while it should be 4 seconds. For the 1st second the clip looks great but after that, for the rest of the 20 seconds, the clip seems to move in "slow-motion".

3 Reset to default

Know someone who can answer? Share a link to this question via email, Twitter, or Facebook.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy