Não tenho certeza se o problema com o vídeo específico ou com os comandos incorretos. Eu testei com o mais recente ffmpeg 4/4/2016 build e mais antigo v2.8.6.
O Sample.avi é gravado por uma câmera PTZ.
Para cortar e mesclar um arquivo de vídeo, usei os comandos dessa postagem .
# skip 30 seconds and re-mux a 60 seconds segment
ffmpeg -ss 30 -t 60 -i D:\VideoCutting\Sample.avi -c:v copy -c:a copy -bsf:v h264_mp4toannexb D:\VideoCutting\Segment1.ts
# skip 3600 seconds and re-mux a 60 seconds segment
ffmpeg -ss 3600 -t 60 -i D:\VideoCutting\Sample.avi -c:v copy -c:a copy -bsf:v h264_mp4toannexb D:\VideoCutting\Segment2.ts
A saída:
Input #0, avi, from 'D:\VideoCutting\Sample.avi':
Duration: 06:05:07.14, start: 0.000000, bitrate: 2479 kb/s
Stream #0:0: Video: h264 (High) (H264 / 0x34363248), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 2476 kb/s, 14.98 fps, 14.99 tbr, 14.98 tbn, 59.94 tbc
Output #0, mpegts, to 'D:\VideoCutting\Segment1.ts':
Metadata:
encoder : Lavf57.29.101
Stream #0:0: Video: h264 (H264 / 0x34363248), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 2476 kb/s, 14.98 fps, 14.99 tbr, 90k tbn, 14.98 tbc
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Erro:
[NULL @ 05149480] Packet header is not contained in global extradata, corrupted stream or invalid MP4/AVCC bitstream
[NULL @ 05149480] Failed to open bitstream filter h264_mp4toannexb for stream 0 with codec copy: Invalid argument
[mpegts @ 051c8420] Timestamps are unset in a packet for stream 0. This is depre cated and will stop working in the future. Fix your code to set the timestamps properly
Os segmentos de vídeo foram criados e podem ser reproduzidos.
No entanto, quando eu participo dos segmentos, o vídeo mesclado não pode mais ser reproduzido:
# merge the segments and re-mux them as mp4
ffmpeg -i "concat:D:\VideoCutting\Segment1.ts|D:\VideoCutting\Segment2.ts" -c:v copy -c:a copy -movflags empty_moov -flags global_header -bsf:v dump_extra Merged.mp4
Resultado:
Input #0, mpegts, from 'concat:D:\VideoCutting\Segment1.ts|D:\VideoCutting\Segme
nt2.ts':
Duration: 00:01:00.15, start: 1.400000, bitrate: 7610 kb/s
Program 1
Metadata:
service_name : Service01
service_provider: FFmpeg
Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 19
20x1080 [SAR 1:1 DAR 16:9], 29.97 fps, 14.99 tbr, 90k tbn, 59.94 tbc
Output #0, mp4, to 'Merged.mp4':
Metadata:
encoder : Lavf57.29.101
Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1920x1080 [SAR 1
:1 DAR 16:9], q=2-31, 29.97 fps, 14.99 tbr, 90k tbn, 90k tbc
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
[mpegts @ 0003ca60] DTS 126000 < 5539218 out of order
frame= 1803 fps=0.0 q=-1.0 Lsize= 51655kB time=00:02:00.26 bitrate=3518.7kbits
/s speed= 601x
video:51633kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing
overhead: 0.042451%
Erro:
[mpegts @ 0003ca60] DTS 126000 < 5539218 fora de ordem
De outras postagens, posso adivinhar que o problema está no arquivo de vídeo que não está formatado corretamente. Posso cortar e mesclar sem recodificar ou preciso consertar o arquivo de vídeo primeiro?