FFMPEG - Transcoding webm to mp4 - wrong duration
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.webmOutput:
[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.webmOutput:
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/AConverting to mp4
Running the command:
ffmpeg -i example.webm example-1.mp4Output:
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.19Problem: 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 defaultKnow someone who can answer? Share a link to this question via email, Twitter, or Facebook.
More in general
"Zoraya ter Beek, age 29, just died by assisted suicide in the Netherlands. She was physically healthy, but psychologically depressed. It's an abomination that an entire society would actively facilitate, even encourage, someone ending their own life because they had no hope. Th…"