[FFmpeg-user] No video during playback after concatinating files
Garrick Mason
gtm.mason at gmail.com
Sat Feb 11 07:14:07 EET 2017
I am trying to combine a set of approximately 40 videos into a single
file with as little re-encoding as possible. Most of these videos are
from the same source (an Elgato capture card), but 4 clips are from a
different source and therefore have different video stream properties
such as video codec, aspect ratio, frame rate, etc. (these clips are
meant to signify scene transitions in the final file, so I will refer to
them as the transition clips)
I have made copies of the transition clips that are just the raw AV data
(pcm for audio and an x264 video stream with 0 crf and keyframe
interval) in an .mov container. After doing that, I transcoded the raw
files using settings that match those of the video clips coming from the
capture card. So the result is that I have all 40 videos in the same
container format with the same audio and the same video settings
(although I noticed something peculiar about the capture card clips
which I'll point out when I get to ffmpeg's output), meaning
concatinating them should be no issue.
After all the files have been combined, I tested playback using MPC-HC
and VLC and while I do recieve video for the clips coming from the
capture card, no video appears for the transition clips. I eventually
found that the issue is present even when combining only two capture
card clips and a transition clip between them, and since that's easier
to deal with than a single 5 hour video and the 40 videos making it up,
those are what I will be providing.
DL for video clips (and ffmpeg's report when merging):
https://mega.nz/#F!EV1j2KYK!Rfyj9uhCltqfXU6b_pRP2w
06.mp4 & 07.mp4 - Clips originating from the capture card
20mins.mp4 - The transition clip
out.mp4 - The file generated from ffmpeg
This is the command I ran to merge the files:
ffmpeg -report -f concat -i "New Text Document.txt" -c:v copy -c:a
copy out.mp4
Below is ffmpeg's output on the metadata of each clip when they're
passed as input
D:\home\Desktop\vidstuff\New folder\tst>ffmpeg -i 06.mp4 -i 07.mp4
-i 20mins.mp4
ffmpeg version N-79209-gb3eda69 Copyright (c) 2000-2016 the FFmpeg
developers
built with gcc 5.3.0 (GCC)
...
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '06.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
title : Stealth Who?
date : 2014-07-05
encoder : Lavf57.29.101
Duration: 00:00:07.20, start: 0.142159, bitrate: 6055 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661),
yuv420p(tv, smpte1
70m/smpte170m/bt709), 720x480 [SAR 40:33 DAR 20:11], 5888 kb/s, SAR
32:27 DAR 16
:9, 59.94 fps, 59.94 tbr, 59940 tbn, 119.88 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000
Hz, stereo, flt
p, 219 kb/s (default)
Metadata:
handler_name : SoundHandler
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '07.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
title : Stealth Who?
date : 2014-07-05
encoder : Lavf57.29.101
Duration: 00:00:05.31, start: 0.245245, bitrate: 6363 kb/s
Stream #1:0(eng): Video: h264 (High) (avc1 / 0x31637661),
yuv420p(tv, smpte1
70m/smpte170m/bt709), 720x480 [SAR 40:33 DAR 20:11], 6135 kb/s, SAR
32:27 DAR 16
:9, 59.94 fps, 59.94 tbr, 59940 tbn, 119.88 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #1:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000
Hz, stereo, flt
p, 221 kb/s (default)
Metadata:
handler_name : SoundHandler
Input #2, mov,mp4,m4a,3gp,3g2,mj2, from '20mins.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.29.101
Duration: 00:00:01.92, start: 0.000000, bitrate: 554 kb/s
Stream #2:0(eng): Video: h264 (High) (avc1 / 0x31637661),
yuv420p, 720x480 [
SAR 32:27 DAR 16:9], 407 kb/s, 59.94 fps, 59.94 tbr, 11988 tbn,
119.88 tbc (defa
ult)
Metadata:
handler_name : VideoHandler
Stream #2:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000
Hz, stereo, flt
p, 133 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
This is the command I used to transcode the transition clip from the raw
mov format to mp4
ffmpeg -ss 2.6 -i RAW20mins.mov -filter:v
"scale=w=720:h=480,setsar=32:27" -r 59.94 -t 1.9 -r 59.94 "20mins.mp4"
What's interesting is that for both capture card clips, ffmpeg reports
two different SAR & DAR pairs for one video stream. Am I correct in
assuming the first pair (in the square brackets) are just inferred
values that aren't actually found within the input file?
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '06.mp4':
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661),
yuv420p(tv, smpte1
70m/smpte170m/bt709), 720x480 [SAR 40:33 DAR 20:11], 5888 kb/s, SAR
32:27 DAR 16
:9, 59.94 fps, 59.94 tbr, 59940 tbn, 119.88 tbc (default)
...
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '07.mp4':
Stream #1:0(eng): Video: h264 (High) (avc1 / 0x31637661),
yuv420p(tv, smpte1
70m/smpte170m/bt709), 720x480 [SAR 40:33 DAR 20:11], 6135 kb/s, SAR
32:27 DAR 16
:9, 59.94 fps, 59.94 tbr, 59940 tbn, 119.88 tbc (default)
I have tried using the concat _filter_ instead of the demuxer to
generate the final file and originally I generated the transcition clip
using the first SAR (40:33). This however generated the following error:
D:\home\Desktop\vidstuff\New folder\tst\New folder>ffmpeg -i 06.mp4
-i 20mins.mp
4 -i 07.mp4 -filter_complex
"[0:0][0:1][1:0][1:1][2:0][2:1]concat=n=3:v=1:a=1[v]
[a]" -map "[v]" -map "[a]" out.mp4
....
[Parsed_concat_0 @ 0000000002a43640] Input link in1:v0 parameters
(size 720x480,
SAR 40:33) do not match the corresponding output link in0:v0
parameters (720x48
0, SAR 32:27)
[Parsed_concat_0 @ 0000000002a43640] Failed to configure output pad
on Parsed_co
ncat_0
Error configuring complex filters.
Invalid argument
When I generated the transition clip using the second SAR (32:27), there
was no such error and ffmpeg went on it's merry way generating the final
file.
Using the concat filter as I have described above results in a file that
/does/ display video during playback, including the transition clips,
meaning it is a workaround for the issue at hand. However, since this
will trigger a re-encoding of the entire video stream, I only want to
use that as a last resort (and also because I am curious about what is
causing the issue during playback).
P.S. I am on a windows 7 computer using a windows build of ffmpeg
P.S.S. I just noticed during the writing of this that if I seek directly
to the transition clip portion of the final video during playback, the
video will appear (this happens for MPC-HC, but not for VLC). It is only
during normal, uninterrupted playback that the video does not appear.
I'm just spitballing here, but can I force ffmpeg to set a keyframe in
the final file at the points matching up with the start of each input
video stream?
More information about the ffmpeg-user
mailing list