Попытка объединить 11 секунд черного видео в конце 5-минутного видео. Получение немонотонной ошибки DTS в выходном потоке - PullRequest
0 голосов
/ 15 января 2020

У меня есть видео с моего смартфона, которое 3840x2160@57.74. Изначально оно длилось ровно 5 минут. Я заменил звук на файл musi c, который составляет 5 минут и 11 секунд, используя ffmpeg -i video.mp4 -i audio.mp3 -c copy -map 0:v:0 -map 1:a:0 output.mp4. В конце я ожидал 11 секунд черного цвета, но вместо этого вывод видео останавливается на последнем кадре на 11 секунд. Там определенно что-то происходит, потому что, когда я пытаюсь загрузить на YouTube, он видит только первые 5 минут. Последние 10 секунд звука пропадают.

Я попытался сделать второй черный клип с ffmpeg -f lavfi -i color=c=black:s=uhd2160:r=57.74 -t 11 -pix_fmt yuv420p blk2.mp4. Когда я пытаюсь объединить два файла с ffmpeg -f concat -safe 0 -i list.txt -c copy teacup6.mp4, я получаю огромный список ошибок, таких как [mp4 @ 00000166fda994c0] Non-monotonous DTS in output stream 0:0; previous: 27002920, current: 3728954; changing to 27002921. This may result in incorrect timestamps in the output file., для кадров, которые кажутся примерно на 11 секунд, так что в основном весь 11-секундный черный клип. Когда я играю его в VL C, он становится черным, но я подозреваю, что на самом деле он не обрабатывает / не воспроизводит 11 секунд хорошего черного видео, потому что, если я щелкну по временной шкале трека, на холсте начнутся визуальные глюки.

Вот то, что ffmpeg сообщает мне о моих входах и выходах в отношении частоты кадров, формата пикселов и т. Д. c.

[mov,mp4,m4a,3gp,3g2,mj2 @ 00000239e6cb2880] Auto-inserting h264_mp4toannexb bitstream filter Input #0, concat, from 'list.txt': Duration: N/A, start: -0.023021, bitrate: 72244 kb/s Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 3840x2160, 71994 kb/s, SAR 1:1 DAR 16:9, 57.74 fps, 59 tbr, 90k tbn, 180k tbc Metadata: handler_name : VideoHandle Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 250 kb/s Metadata: handler_name : SoundHandler Output #0, mp4, to 'teacup5.mp4': Metadata: encoder : Lavf58.35.102 Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 3840x2160 [SAR 1:1 DAR 16:9], q=2-31, 71994 kb/s, 57.74 fps, 59 tbr, 90k tbn, 90k tbc Metadata: handler_name : VideoHandle Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 250 kb/s Metadata: handler_name : SoundHandler Stream mapping: Stream #0:0 -> #0:0 (copy) Stream #0:1 -> #0:1 (copy) Press [q] to stop, [?] for help

В качестве альтернативы я попытался создать черный 3840x2160 png. файл и создать 11-секундное слайд-шоу. Ничего лучше не получилось. Я пробовал одно изображение в течение 11 секунд при 57,74 к / с, я также пробовал циклическое слайд-шоу этого одного изображения с циклом на каждом кадре со скоростью 57,74 к / с. Я должен отметить, что во время слайд-шоу или цветового генератора размер файла за 11 секунд черного достигает примерно 160 КБ. На мой взгляд, странно мало, но я использовал хороший алгоритм сжатия.

Вместо этого я попытался сделать это в Da Vinci Resolve 16.1, и видео не воспроизводилось. Я также не смог найти способ сохранить ту же необычную частоту кадров 57,74 с бесплатной версией, так что это было нежелательно в любом случае. Я попытался повторно обработать, используя Ручной тормоз, но это бросило ошибку. Вывод обработанного видеофайла с ручным тормозом также застревает в последнем кадре видео, вместо того, чтобы переходить в черный цвет.

1 Ответ

1 голос
/ 15 января 2020

Фильтр tpad является самым простым методом:

ffmpeg -i video.mp4 -i audio.mp3 -filter_complex "[0:v]tpad=stop=-1[v]" -map "[v]" -map 1:a -c:a copy -shortest output.mp4

Дополнительные ссылки, например, как изменить цвет пустых кадров или повторить последний кадр, см. По ссылке выше. вместо создания solid цвета.

...