FFMPEG Dropping all frames - ffmpeg

I have a raw H264 video which i am trying to convert into MP4 by the command:
ffmpeg -i 'Camera 4(172.16.2.12_554)_1_2014_07_16_15_20_08.h264' 'Camera
4(172.16.2.12_554)_1_2014_07_16_15_20_08.mp4'
FFMPEG keeps dropping all frames. Not even 1 frame is encoded.
Please see the output below:
Seems stream 0 codec frame rate differs from container frame rate:
2400000.00 (2400000/1) -> 24.00 (24/1)
Input #0, h264, from 'Camera 4(172.16.2.12_554)_1_2014_07_16_15_20_08.h264':
Duration: N/A, bitrate: N/A
Stream #0.0: Video: h264 (Baseline), yuv420p, 1280x960 [PAR 1:1 DAR
4:3], 24 fps, 24 tbr, 1200k tbn, 2400k tbc
[buffer # 0x820c140] w:1280 h:960 pixfmt:yuv420p
Output #0, mp4, to 'Camera 4(172.16.2.12_554)_1_2014_07_16_15_20_08.mp4':
Metadata:
encoder : Lavf53.21.1
Stream #0.0: Video: mpeg4, yuv420p, 1280x960 [PAR 1:1 DAR 4:3], q=2-31,
200 kb/s, 24 tbn, 24 tbc
Stream mapping:
Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
^Zame= 2 fps= 1 q=2.0 size= 225kB time=0.08 bitrate=22147.4kbits/s
dup=0 drop=842

You can try tell to ffmpeg the fps that you desire on output file:
just type the following:
ffmpeg -r "24" -i 'Camera 4(172.16.2.12_554)_1_2014_07_16_15_20_08.h264' 'Camera
4(172.16.2.12_554)_1_2014_07_16_15_20_08.mp4'

Related

With FFmpeg yuv encoded into H264 and encapsulated into ts, ts video found the length of time shorter?

With FFmpeg the mov directly into yuv, then yuv encoded into H264 and encapsulated into ts, ts video found less than the length of time the length of the mov video time. I want to know how to modify the FFmpeg command to solve the video time length shorter problem
The ffmpeg command is as follows:
ffmpeg-i 00.mov 01.yuv
ffmpeg-s 1920x800-pix_fmt yuv420p-i 01.yuv-vcodec libx264-x264-params fps=24 02.h264.
ffmpeg-i 02.h264 03.ts
Use ffprobe to view the 00.mov details are as follows:
Duration: 00: 12: 14.17, start: 0.000000, bitrate: 6361 kb/s
Stream #0:0 (eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x800 [SAR 1: 1 DAR 12: 5], 6162 kb/s, 24 fps, 24 tbr, 24 tbn, 48 tbc (default)
Metadata:
handler_name: VideoHandler
encoder: libx264
Stream # 0:1 (eng): Audio: mp3 (. mp3 / 0x33706D2E), 44100 Hz, stereo, fltp, 191 kb/s (default)
Metadata:
handler_name: SoundHandler
Use ffprobe to view the 03.ts details are as follows:
Duration: 00:11:44.80, start: 1.440000, bitrate: 2242 kb/s
Program 1
Metadata:
service_name: Service01
service_provider: FFmpeg
Stream #0:0 [0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p (tv, progressive), 1920x800 [SAR 1:1 DAR 12: 5], 25 fps, 25 tbr, 90k tbn, 50 tbc
How to modify the ffmpeg command to make the ts video duration equal to the duration of the mov video
In the 2nd command, add -framerate 24 for the input. The x264 fps signaling only affects ratecontrol and not any framerate metadata in the raw .264 output.
Also, add -c copy in the 3rd comand to avoid re-encoding.

Why does FFMPEG SSIM produce different comparison results depending on which of these uncompressed videos goes first/second?

ffmpeg's ssim instructions say the reference should go second, and when I compare these videos in that order, (where 'copy.avi' should be lossless H.264 copy of 'original.avi') SSIM and PSNR return lossless results. But if I reverse the order the performance isn't lossless.
Why is this happening?
Copy first, original second
> ffmpeg -hide_banner -i copy.avi -i original.avi -lavfi "ssim;[0:v][1:v]psnr" -f null –
[avi # 0x7ffdee002000] decoding for stream 0 failed
Input #0, avi, from 'copy.avi':
Metadata:
encoder : Lavf58.20.100
Duration: 00:00:10.67, start: 0.000000, bitrate: 644937 kb/s
Stream #0:0: Video: h264 (High 4:4:4 Predictive) (H264 / 0x34363248), yuv420p(progressive), 2048x1536, 645930 kb/s, 60 fps, 60 tbr, 60 tbn, 120 tbc
Input #1, avi, from 'original.avi':
Metadata:
encoder : Lavf54.35.100
Duration: 00:00:10.67, start: 0.000000, bitrate: 1509965 kb/s
Stream #1:0: Video: rawvideo (Y800 / 0x30303859), gray, 2048x1536, 1512312 kb/s, 60 fps, 60 tbr, 60 tbn, 60 tbc
Stream mapping:
Stream #0:0 (h264) -> ssim:main
Stream #0:0 (h264) -> psnr:main
Stream #1:0 (rawvideo) -> ssim:reference
Stream #1:0 (rawvideo) -> psnr:reference
ssim -> Stream #0:0 (wrapped_avframe)
psnr -> Stream #0:1 (wrapped_avframe)
Press [q] to stop, [?] for help
Output #0, null, to '–':
Metadata:
encoder : Lavf58.20.100
Stream #0:0: Video: wrapped_avframe, yuv420p(progressive), 2048x1536, q=2-31, 200 kb/s, 60 fps, 60 tbn, 60 tbc
Metadata:
encoder : Lavc58.35.100 wrapped_avframe
Stream #0:1: Video: wrapped_avframe, yuv420p, 2048x1536, q=2-31, 200 kb/s, 60 fps, 60 tbn, 60 tbc
Metadata:
encoder : Lavc58.35.100 wrapped_avframe
frame= 640 fps= 72 q=-0.0 Lq=-0.0 size=N/A time=00:00:10.66 bitrate=N/A speed=1.21x
video:670kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[Parsed_ssim_0 # 0x7ffdef8024c0] SSIM Y:1.000000 (inf) U:1.000000 (inf) V:1.000000 (inf) All:1.000000 (inf)
[Parsed_psnr_1 # 0x7ffdef802940] PSNR y:inf u:inf v:inf average:inf min:inf max:inf
Original first, copy second
> ffmpeg -hide_banner -i original.avi -i copy.avi -lavfi "ssim;[0:v][1:v]psnr" -f null –
Input #0, avi, from 'original.avi':
Metadata:
encoder : Lavf54.35.100
Duration: 00:00:10.67, start: 0.000000, bitrate: 1509965 kb/s
Stream #0:0: Video: rawvideo (Y800 / 0x30303859), gray, 2048x1536, 1512312 kb/s, 60 fps, 60 tbr, 60 tbn, 60 tbc
[avi # 0x7fb74680d600] decoding for stream 0 failed
Input #1, avi, from 'copy.avi':
Metadata:
encoder : Lavf58.20.100
Duration: 00:00:10.67, start: 0.000000, bitrate: 644937 kb/s
Stream #1:0: Video: h264 (High 4:4:4 Predictive) (H264 / 0x34363248), yuv420p(progressive), 2048x1536, 645930 kb/s, 60 fps, 60 tbr, 60 tbn, 120 tbc
Stream mapping:
Stream #0:0 (rawvideo) -> ssim:main
Stream #0:0 (rawvideo) -> psnr:main
Stream #1:0 (h264) -> ssim:reference
Stream #1:0 (h264) -> psnr:reference
ssim -> Stream #0:0 (wrapped_avframe)
psnr -> Stream #0:1 (wrapped_avframe)
Press [q] to stop, [?] for help
Output #0, null, to '–':
Metadata:
encoder : Lavf58.20.100
Stream #0:0: Video: wrapped_avframe, gray(progressive), 2048x1536, q=2-31, 200 kb/s, 60 fps, 60 tbn, 60 tbc
Metadata:
encoder : Lavc58.35.100 wrapped_avframe
Stream #0:1: Video: wrapped_avframe, gray, 2048x1536, q=2-31, 200 kb/s, 60 fps, 60 tbn, 60 tbc
Metadata:
encoder : Lavc58.35.100 wrapped_avframe
frame= 640 fps= 72 q=-0.0 Lq=-0.0 size=N/A time=00:00:10.66 bitrate=N/A speed=1.19x
video:670kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[Parsed_ssim_0 # 0x7fb748101780] SSIM Y:0.998296 (27.684975) All:0.998296 (27.684975)
[Parsed_psnr_1 # 0x7fb748101c40] PSNR y:56.840774 average:56.840774 min:56.812125 max:56.871584
One format is yuv420p and another is gray. So for comparing them, one either convert gray to yuv420p or yuv420p to gray. As you noticed this operation is not always lossless. To compare only Y plane use extractplanes=y filter before calling psnr/ssim.

ffmpeg. Concatenate two webm files with transparency

Could you help me to find my mistake. I am trying to concatenate two files (webm) which have transparent background. I do the following:
ffmpeg -i 1.webm -i 2.webm -filter_complex "[0:v:0] 1:v:0]concat=n=2:v=1[outv]" -map "[outv]" 3.webm
I get the concatenate video as i I expect. However the transparent background disappears. Instead the background is black. How to keep the transparency when i concatenate two videos?
The output of the above command is:
ffmpeg version 3.3.4-2 Copyright (c) 2000-2017 the FFmpeg developers built with gcc 7 (Ubuntu 7.2.0-8ubuntu2)
Input #0, matroska,webm, from '1.webm':
Metadata:
encoder : Lavf57.71.100
Duration: 00:00:04.35, start: 0.000000, bitrate: 293 kb/s
Stream #0:0(eng): Video: vp9 (Profile 0), yuv420p(tv, progressive), 799x770, SAR 1:1 DAR 799:770, 23 fps, 23 tbr, 1k tbn, 1k tbc (default)
Metadata:
alpha_mode : 1
Input #1, matroska,webm, from '2.webm':
Metadata:
encoder : Lavf57.71.100
Duration: 00:00:04.35, start: 0.000000, bitrate: 303 kb/s
Stream #1:0(eng): Video: vp9 (Profile 0), yuv420p(tv, progressive), 799x770, SAR 1:1 DAR 799:770, 23 fps, 23 tbr, 1k tbn, 1k tbc (default)
Metadata:
alpha_mode : 1
File '3.webm' already exists. Overwrite ? [y/N] y
Stream mapping:
Stream #0:0 (vp9) -> concat:in0:v0
Stream #1:0 (vp9) -> concat:in1:v0
concat -> Stream #0:0 (libvpx-vp9)
Press [q] to stop, [?] for help
[libvpx-vp9 # 0x55f58406a540] v1.6.1
Output #0, webm, to '3.webm':
Metadata:
encoder : Lavf57.71.100
Stream #0:0: Video: vp9 (libvpx-vp9), yuv420p, 799x770 [SAR 1:1 DAR 799:770], q=-1--1, 200 kb/s, 23 fps, 1k tbn, 23 tbc (default)
Metadata:
encoder : Lavc57.89.100 libvpx-vp9
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
frame= 200 fps=8.4 q=0.0 Lsize= 187kB time=00:00:08.65 bitrate= 176.8kbits/s speed=0.365x
video:185kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.011632%
`
I thought this had been fixed, but apparently the native VPx decoders still don't decode alpha, so you have to use the libvpx decoders.
ffmpeg -c:v libvpx-vp9 -i 1.webm -c:v libvpx-vp9 -i 2.webm -filter_complex "[0:v:0] 1:v:0]concat=n=2:v=1[outv]" -map "[outv]" 3.webm

Moving an overlay smoothly

I have a sliding video overlay on top of a background screen and move it from point a to point b.
The resulting video produces choppy movement. The overlay moves a step at a time instead of in one continous motion.
Here's an example of the code:
ffmpeg -y -stream_loop -1 -i b.mpg -i bg.jpg -filter_complex "
[0:v]scale=320:240[vid];[1][vid]overlay=x='(180+(30-180)*(t-
0)/60)*between(t,0,60)+(30+(290-30)*(t-60)/60)*between(t,60,120)':y='(120+
(120-120)*(t-0)/60)*between(t,0,60)+(120+(30-120)*(t-
60)/60)*between(t,60,120)'[out]" -map "[out]" -r 29.97 -aspect 4:3 -b:v
4000k -minrate 4000k -maxrate 4000k -bufsize 2000k -t 64 t.mpg
Input #0, mpegvideo, from 'b.mpg':
Duration: 00:00:32.34, bitrate: 4000 kb/s
Stream #0:0: Video: mpeg2video (Main), yuv420p(tv, progressive), 720x480
[SAR 32:27 DAR 16:9], 4000 kb/s, 29.97 fps, 29.97 tbr, 1200k tbn, 59.94 tbc
Input #1, image2, from 'bg.jpg':
Duration: 00:00:00.04, start: 0.000000, bitrate: 19637 kb/s
Stream #1:0: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 640x480,
25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 (mpeg2video) -> scale
Stream #1:0 (mjpeg) -> overlay:main
overlay -> Stream #0:0 (mpeg1video)
Press [q] to stop, [?] for help
[swscaler # 0000000002adc740] deprecated pixel format used, make sure you
did set range correctly
Output #0, mpeg, to 't.mpg':
Metadata:
encoder : Lavf57.73.100
Stream #0:0: Video: mpeg1video, yuv420p, 640x480 [SAR 1:1 DAR 4:3], q=2-31,
4000 kb/s, 29.97 fps, 90k tbn, 29.97 tbc (default)
Metadata:
encoder : Lavc57.99.100 mpeg1video
Side data:
cpb: bitrate max/min/avg: 4000000/4000000/4000000 buffer size: 2000000
vbv_delay: -1
warning, clipping 1 dct coefficients to -255..255repeated 2 timesnter
Link to video here: https://youtu.be/EE_hrjy4ilg

Changing container from mkv to m2v - audio doesn't transfer

Am converting a DVD extraction from an MKV container to an MPEG2 file. This is the command I am using:
ffmpeg -i title04.mkv -c:v copy -c:a copy title04.m2v
It creates the file but with no audio. Am not sure what I am missing as it isn't throwing any error (and usually if a stream isn't compatible with a container it complains).
Here is the output. Any ideas?
Guessed Channel Layout for Input Stream #0.1 : stereo
Input #0, matroska,webm, from 'title04.mkv':
Metadata:
encoder : libmakemkv v1.8.12 (1.3.0/1.4.1) darwin(x86-release)
creation_time : 2014-08-28 19:36:24
Duration: 00:00:11.34, start: 0.000000, bitrate: 4979 kb/s
Stream #0:0(eng): Video: mpeg2video (Main), yuv420p(tv), 720x480 [SAR 8:9 DAR 4:3], max. 7500 kb/s, 29.97 fps, 29.97 tbr, 1k tbn, 59.94 tbc
Stream #0:1(eng): Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s (default)
Metadata:
title : Stereo
Stream #0:2(eng): Subtitle: dvd_subtitle, 720x480 (default)
Output #0, mpeg2video, to 'title04.m2v':
Metadata:
encoder : Lavf55.48.100
Stream #0:0(eng): Video: mpeg2video, yuv420p, 720x480 [SAR 8:9 DAR 4:3], q=2-31, max. 7500 kb/s, 29.97 fps, 29.97 tbn, 29.97 tbc
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
frame= 340 fps=0.0 q=-1.0 Lsize= 4738kB time=00:00:11.31 bitrate=3431.4kbits/s
video:4738kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
m2v (mpeg 2 video) is a video only container. The audio stream is not included.
You should use .mpg or .mpeg as container format.

Resources