我正在尝试使用concat demuxer连接视频,但在使用一个视频时它不起作用(下面的“video2.mp4”)。通过不起作用,我的意思是播放播放器上的连接视频将一直工作,直到第二个视频部分开始(它再也无法读取视频)。它适用于concat过滤器。它们都是mp4视频,所以我认为这是因为时间基准?我可以使用concat demuxer连接其他视频,它工作正常(即使具有不同的分辨率/比特率)。只有在尝试连接“video2.mp4”时才会发生。
此外,我有很多这样的警告/错误,可能是当ffmpeg开始连接第二个视频时:
@model WebApplication1.Models.FileUploadModel
@using (Html.BeginForm("PostForm", "FileUploadDemo", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="panel">
<div class="panel-body">
<div class="form-group row">
<div class="col-md-2 form-label">
<label>Name:</label>
</div>
<div class="col-md-6">
@Html.TextAreaFor(x => x.Name, new { @class = "form-control" })
</div>
</div>
<div class="form-group row">
<div class="col-md-2 form-label">
<label>Date</label>
</div>
<div class="col-md-6">
@Html.TextAreaFor(x => x.ValidFromDate, new { @class = "form-control" })
</div>
</div>
<div class="col-md-10">
<div class="form-group row">
<div class="col-md-2 form-label">
<label>Select File<i class="required-field">*</i>:</label>
</div>
<div class="col-md-8">
<input type="file" class="file-upload" style="margin: 0px;" hidden="hidden" accept=".xlsx" name="file" id="file" />
</div>
</div>
</div>
<div class="form-group row">
<div class="col-md-3 pull-right text-right">
<button class="btn btn-primary" id="process-submission" type="submit"
>Submit</button>
</div>
</div>
</div>
</div>
}
获得最短连续时间的最佳方法是什么?我真的需要使用concat过滤器,还是可以更改“video1.mp4”的时基,如果它确实是问题?
任何帮助将不胜感激,谢谢!
视频1:
[mp4 @ 0x7f847a814800] Non-monotonous DTS in output stream 0:0; previous: 906906, current: 302359; changing to 906907. This may result in incorrect timestamps in the output file.
视频2:
ffprobe version 3.2.2 Copyright (c) 2007-2016 the FFmpeg developers
built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
libavutil 55. 34.100 / 55. 34.100
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.100 / 57. 56.100
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libavresample 3. 1. 0 / 3. 1. 0
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video1.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2016-08-17T22:50:35.000000Z
Duration: 00:00:10.11, start: 0.000000, bitrate: 38018 kb/s
Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 1696x848, 37832 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 180k tbc (default)
Metadata:
creation_time : 2016-08-18T00:02:24.000000Z
handler_name : VideoHandle
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 189 kb/s (default)
Metadata:
creation_time : 2016-08-18T00:02:24.000000Z
handler_name : SoundHandle
FFMpeg命令:
ffprobe version 3.2.2 Copyright (c) 2007-2016 the FFmpeg developers
built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
libavutil 55. 34.100 / 55. 34.100
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.100 / 57. 56.100
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libavresample 3. 1. 0 / 3. 1. 0
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video2.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41
creation_time : 2017-01-06T22:30:23.000000Z
Duration: 00:00:08.19, start: 0.000000, bitrate: 101474 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 4096x2048 [SAR 1:1 DAR 2:1], 101549 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
creation_time : 2017-01-06T22:30:23.000000Z
handler_name : ?Mainconcept Video Media Handler
encoder : AVC Coding
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 125 kb/s (default)
Metadata:
creation_time : 2017-01-06T22:30:23.000000Z
handler_name : #Mainconcept MP4 Sound Media Handler
concat.txt:
ffmpeg -f concat -safe 0 -i concat.txt -c copy result.mp4
命令结果:
file '/path/to/video1.mp4'
file '/path/to/video2.mp4'
提前谢谢!
答案 0 :(得分:2)
在video2.mp4
中有关于H.264比特流的问题以下步骤(适用一次)为我解决了这个问题,最终结果可以与ffplay,Potplayer,VLC,WMP,Chrome和Firefox一起使用。
#1 转换视频2以匹配视频1
ffmpeg -i video2.mp4 -vf scale=1696x848 -profile:v baseline -c:a copy v2.mp4
#2 提取到原始比特流
ffmpeg -i v2.mp4 -c copy -f h264 v2.h264
#3 将其与新容器混合
ffmpeg -i v2.h264 -i v2.mp4 -c copy -video_track_timescale 90000 -map 0 -map 1:a v2-ok.mp4
现在,您可以使用video1.mp4
连接v2-ok.mp4答案 1 :(得分:0)
我认为,问题的关键在于,在检查上述两个视频时,它们显然具有截然不同的比特率。与其他因素不同,这是一个只能通过重新编码才能解决的问题。
根据用户发布的数据,视频1的视频比特率为37,832 kb / s,而视频2的不同视频比特率则为101,549 kb / s。
无论采取任何其他措施(例如匹配帧大小),视频播放器都将在连接点处暂停,因为它必须调整以(低)初始比特率累积和显示数据,然后开始以新的(更高)比特率显示修改后的图像。
有趣的是,如果问题是通过另一种方式向播放器造成的,则情况可能并非如此(即可能不会引起注意):如果视频1已以高比特率编码,然后合并的文件已丢弃降低比特率。在那种情况下,对于电影的两半来说,缓冲的初始水平将绰绰有余,因为后半部分将需要较少的缓冲。根据我的经验,回放的暂停是由于必须提高连接点的缓冲速率(需要缓冲更多数据的时间)的结果,而如果降低缓冲速率则不会发生。
此外,我还要指出差异的极端性质。比特率增加了200%,新的比特率是每秒初始大小的3倍。对于玩家来说,这确实是一个极大的挑战,玩家一直在以一种速率陶醉,然后遇到比特率的瞬时(永久)三倍增长。如果跳转是适度的,则可能根本无法察觉到播放的暂停。但是,如果比特率增加了两倍,而没有发出警告,则初始视频缓冲区几乎没有机会使其平滑,并且势必需要时间来缓冲其他数据。甚至不是数据速率的峰值,而是永久的增长。
难怪有些玩家会崩溃。它对于任何视频软件播放器的健壮性都说很多,它只是在遇到这种情况时会暂停或停顿。总体而言,如果增加幅度不到初始比特率的50%,我不会期望停顿,但是增加200%只是在乞求麻烦。
很明显,如果您不均衡图像的帧大小,即使缓冲完全足够,更改也会非常明显。我要说的是,即使视频1和视频2的图像大小相同,只要比特率在连接点跃升到更高的值,回放仍然会出现暂停。
答案 2 :(得分:0)
问题是时基。 Ffmpeg在第二个流中添加了偏移量,但是即使应该也不会更改其时间戳。
我从来没有获得任何与时基相关的选项来执行任何操作。对我有用的是:复制到mkv,该视频源具有视频流的1/1000时基(ffmpeg将其报告为“ 1k tbn”)。这使所有时间戳保持一致。然后concat。
出于正常目的,webm和mkv本质上是同一件事,但是mkv接受H.264,而webm当前不接受。
请注意,由于舍入而产生的任何轻微抖动的时间戳,都可能导致丢帧或重复帧,而这些帧的fps更改滤波器设计不良。
如果仍然存在间隙(但没有速度变化或错误消息),请确保音频的长度不比视频流稍长,并在必要时进行修剪;您可以使用“ ffmpeg -i video1.mp4 -i video1.mp4 -c复制-map 0:v -map 1:a -shortest trimmed.mp4”自动执行此操作。
我将这个答案粘贴到两个问题上,不知道是否允许这样做。