#audio #ffmpeg #bitrate
#Аудио #ffmpeg #битрейт
Вопрос:
У меня есть три клипа, которые я извлек из более длинного видео. Когда я объединяю их вместе, все работает нормально, как и следовало ожидать, поскольку все они получены из одного источника.
Теперь я хочу добавить карточку заголовка в начало объединенного видео.
Я сгенерировал изображение в GIMP с теми же размерами, что и видеокадры, а затем использовал ffmpeg для создания из него 5-секундного видео. Когда я объединил его перед тремя другими, я столкнулся с проблемами.
Сегмент карточки заголовка воспроизводится правильно, а затем остальные сегменты (как видео, так и аудио) в замедленном режиме. Также таблица титров работает дольше 5 секунд, и аудио основного сегмента начинается перед соответствующим видео.
Я знаю, что проблема связана с генерацией клипа карточки заголовка, но пока я не могу понять, чего мне не хватает. Очевидно, что мои битрейты неверны, но как мне заставить их совпадать?
что у меня есть до сих пор:
мой сценарий генерации:
#!/bin/bash
ffmpeg -y -ss 0:03:33 -t 0:0:33.5 -i seg1.vob -filter:a "volume=4" seg1.mp4
ffmpeg -y -ss 0:13:25.5 -t 0:0:57 -i seg1.vob -filter:a "volume=4" seg2.mp4
ffmpeg -y -ss 0:16:25.5 -t 0:0:43 -i seg1.vob -filter:a "volume=4" seg3.mp4
ffmpeg -y -ss 0:7:10 -t 0:0:10 -i seg1.vob -filter:a "volume=4" -vn -b:a 394k title.mp3
ffmpeg -y -loop 1 -i title.png -t 0:0:5 -i title.mp3 -c:a aac -b:a 394k -shortest title.mp4
ffmpeg -y -f concat -safe 0 -i contents.txt -c copy merged.mp4
и contents.txt:
file 'title.mp4'
file 'seg1.mp4'
file 'seg2.mp4'
file 'seg3.mp4'
ffprobe на сегменте 1.mp4:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'seg1.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf58.20.100
Duration: 00:00:33.52, start: 0.000000, bitrate: 677 kb/s
Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 720x480 [SAR 32:27 DAR 16:9], 275 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 30k tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 6 channels, fltp, 394 kb/s (default)
Metadata:
handler_name : SoundHandler
и для title.mp4:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'title.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf58.20.100
Duration: 00:00:05.02, start: 0.000000, bitrate: 1290 kb/s
Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 720x480 [SAR 191:194 DAR 573:388], 898 kb/s, 25 fps, 25 tbr, 12800 tbn, 25 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 389 kb/s (default)
Metadata:
handler_name : SoundHandler
Ответ №1:
Для правильного объединения все входные данные должны иметь одинаковые атрибуты.
Ваши варианты различаются по частоте кадров, временной базе, SAR / DAR и расположению аудиоканалов.
Поскольку вы все равно фильтруете и перекодируете каждый сегмент, вы можете сделать все это одной командой:
ffmpeg -loop 1 -t 5 -framerate 30000/1001 -i title.png -ss 0:7:10 -t 0:0:10 -i seg1.vob -ss 0:03:33 -t 0:0:33.5 -i seg1.vob -ss 0:13:25.5 -t 0:0:57 -i seg1.vob -ss 0:16:25.5 -t 0:0:43 -i seg1.vob -filter_complex "[0:v]setsar=32/27[title];[title][1:a][2:v][2:a][3:v][3:a][4:v][4:a]concat=n=4:v=1:a=1[v][aud];[aud]volume=4[a]" -map "[v]" -map "[a]" output.mp4
Комментарии:
1. Да, это работает! Спасибо. Теперь мне нужно просмотреть документы, чтобы я понял, почему 🙂