我正在尝试连接两个格式非常相似的视频:
Stream #0:0[0x1](und): Video: hevc (Main 10) (hev1 / 0x31766568), yuv420p10le(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 1037 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
encoder : Lavc60.6.101 libx265
Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 298 kb/s (default)
Metadata:
handler_name : Surround
vendor_id : [0][0][0][0]
和
Stream #0:0[0x1](und): Video: hevc (Main 10) (hev1 / 0x31766568), yuv420p10le(tv), 1920x1080 [SAR 1:1 DAR 16:9], 312 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 224 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
但最终拼接的视频在第一部分(第一个视频播放的地方)就卡住了。音频工作正常,但视频要么显示冻结帧,要么显示一堆损坏的帧。不确定哪里出了问题,因为视频编解码器、像素格式、视频编解码器……似乎都匹配。
我正在使用ffmpeg -f concat -i conc.txt -c copy output.mp4
包含以下内容的 conc.txt 文件:
1.mp4
2.mp4
当我尝试使用此行连接从同一个基础视频中剪切出的两个视频时,它工作正常,所以我猜我的问题与不完全匹配的视频属性有关,但我无法弄清楚是哪一个。
为了澄清我的用例:2.mp4 是没有简介的节目剪辑的一集。1.mp4 是节目的替代简介。我想将简介重新添加到剧集中。我不想在连接每集时重新编码它们,所以我想保留这个-c copy
参数。我可以单独重新编码替代简介 1.mp4,因为我只需要做一次。但我似乎无法重新编码简介以匹配剧集属性,从而使连接工作。
答案1
首先将介绍视频转换为与主视频匹配的视频:
ffmpeg -i 1.mp4 -c:v libx265 -vtag hvc1 -c:a copy 1_.mp4
然后更改 conc.txt 列表以匹配 1_.mp4 或删除 1.mp4 并将 1_.mp4 重命名为 1.mp4....
下一个:
ffmpeg -fflags +genpts -f concat -i conc.txt -c copy out.mp4