![Объединение файлов из rawvideo](https://rvso.com/image/1645724/%D0%9E%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%20%D0%B8%D0%B7%20rawvideo.png)
Я использовал Adobe After Effects для создания базового ~10-секундного outro для видео и экспортировал его в формат AVI без потерь ( rawvideo
). Насколько мне известно, в After Effects нет способа придать видео пустой аудиопоток, а concat demuxer FFmpeg требует, чтобы каждый видеопоток имел аудиопоток, поэтому я запустил следующее, чтобы добавить немного тишины и перекодировать rawvideo
в h264
/ opus
:
ffmpeg -i "YouTube Outro.avi" -f lavfi -i aevalsrc=0 -map 0 -map 1 -shortest -c:v libx264 -c:a libopus "Outro.mkv"
Проблемы возникают, когда я пытаюсь объединить этот файл с моим оригинальным видео. У меня в файле есть следующее:
file Original.mkv
file 'YouTube Outro.mkv'
Информация об этих входах:
Input #0, matroska,webm, from 'Original.mkv':
Metadata:
ENCODER : Lavf58.65.100
Duration: 00:42:45.54, start: -0.007000, bitrate: 2521 kb/s
Stream #0:0(eng): Video: h264 (High), yuv420p(tv, bt709/unknown/unknown, progressive), 1920x1080 [SAR
1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn, 50 tbc (default)
Metadata:
ENCODER : Lavc58.115.102 libx264
DURATION : 00:42:45.541000000
Stream #0:1: Audio: opus, 48000 Hz, stereo, fltp (default)
Metadata:
HANDLER_NAME : SoundHandler
VENDOR_ID : [0][0][0][0]
ENCODER : Lavc58.115.102 libopus
DURATION : 00:42:45.368000000
Input #1, matroska,webm, from 'YouTube Outro.mkv':
Metadata:
DATE : 2021-03-10T23:13:19.647059
ENCODER : Lavf58.65.100
Duration: 00:00:08.97, start: -0.007000, bitrate: 74 kb/s
Stream #1:0: Video: h264 (High 4:4:4 Predictive), yuv444p(tv, progressive), 1920x1080, 29.97 fps, 29.
97 tbr, 1k tbn, 59.94 tbc (default)
Metadata:
ENCODER : Lavc58.115.102 libx264
DURATION : 00:00:08.949000000
Stream #1:1: Audio: opus, 48000 Hz, mono, fltp (default)
Metadata:
ENCODER : Lavc58.115.102 libopus
DURATION : 00:00:08.968000000
At least one output file must be specified
...и используем concat
демультиплексор для их объединения:
ffmpeg -f concat -safe 0 -i list.txt -c copy Final.mkv
Полученный файл содержит все исходное видео, а его временная метка отражает добавленные 10 секунд, но по достижении этой временной метки ничего не отображается — фактически, видео замирает на несколько кадров до окончания исходного видео и остается на этом кадре до конца видео.
Что я делаю не так, что так сложно объединить эти h264
/ opus
файлы?
решение1
Атрибуты должны быть одинаковымидля правильной конкатенации сдемультиплексор concat. Формат пикселей, профиль и расположение каналов различаются в зависимости от ваших входов. Сделайте их соответствующими Original.mkv
:
ffmpeg -i "YouTube Outro.avi" -f lavfi -i anullsrc=cl=stereo:r=48000 -map 0 -map 1 -c:v libx264 -crf 18 -vf format=yuv420p -c:a libopus -shortest "Outro.mkv"