Не удается объединить видео ffmpeg

843
Paul

У меня есть растровое изображение, которое я хотел бы объединить в начале многих видео в качестве экрана заголовка или экрана отказа от ответственности.

Я пытаюсь превратить его в видео с теми же атрибутами, что и остальная часть видео. Итак, сначала я анализирую видео:

ffmpeg version 2.2.1 Copyright (c) 2000-2014 the FFmpeg developers built on Apr 11 2014 22:50:38 with Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn) configuration: --prefix=/usr/local/Cellar/ffmpeg/2.2.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid libavutil 52. 66.100 / 52. 66.100 libavcodec 55. 52.102 / 55. 52.102 libavformat 55. 33.100 / 55. 33.100 libavdevice 55. 10.100 / 55. 10.100 libavfilter 4. 2.100 / 4. 2.100 libavresample 1. 2. 0 / 1. 2. 0 libswscale 2. 5.102 / 2. 5.102 libswresample 0. 18.100 / 0. 18.100 libpostproc 52. 3.100 / 52. 3.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'EO1.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 creation_time : 1970-01-01 00:00:00 encoder : Lavf52.78.3 Duration: 00:00:17.77, start: 0.000000, bitrate: 582 kb/s Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 584x328 [SAR 1:1 DAR 73:41], 512 kb/s, 23.98 fps, 23.98 tbr, 1199 tbn, 47.96 tbc (default) Metadata: creation_time : 1970-01-01 00:00:00 handler_name : VideoHandler Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 64 kb/s (default) Metadata: creation_time : 1970-01-01 00:00:00 handler_name : SoundHandler 

Затем я пытаюсь создать похожий файл:

/usr/local/Cellar/ffmpeg/2.2.1/bin/ffmpeg -y -loop 1 -i Disclaimer.png -c: v libx264 -r 23.98 -t 5 -pix_fmt yuv420p -profile: v main disclaimer.mp4

Кажется, все в порядке. Воспроизведение видео, которое я ожидаю. Атрибуты получаются очень похожими. Вот разница:

< Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'disclaimer.mp4': --- > Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'EO1.mp4': 18,20c18,21 < encoder : Lavf55.33.100 < Duration: 00:00:05.01, start: 0.000000, bitrate: 21 kb/s < Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 584x328 [SAR 1:1 DAR 73:41], 17 kb/s, 23.98 fps, 23.98 tbr, 19184 tbn, 47.96 tbc (default) --- > creation_time : 1970-01-01 00:00:00 > encoder : Lavf52.78.3 > Duration: 00:00:17.77, start: 0.000000, bitrate: 582 kb/s > Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 584x328 [SAR 1:1 DAR 73:41], 512 kb/s, 23.98 fps, 23.98 tbr, 1199 tbn, 47.96 tbc (default) 21a23 22a25,28 > Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 64 kb/s (default) > Metadata: > handler_name : SoundHandler 

Но когда я пытаюсь объединить, я получаю ошибки.

> $ cat temporary.txt   file disclaimer.mp4 file EO1.mp4 

/usr/local/Cellar/ffmpeg/2.2.1/bin/ffmpeg -y -f concat -i временный.txt -c копировать output.mp4

[concat @ 0x7fd880806600] Estimating duration from bitrate, this may be inaccurate Input #0, concat, from 'temporary.txt': Duration: 00:00:00.02, start: 0.000000, bitrate: 17 kb/s Stream #0:0: Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 584x328 [SAR 1:1 DAR 73:41], 17 kb/s, 23.98 fps, 23.98 tbr, 19184 tbn, 47.96 tbc Output #0, mp4, to 'output.mp4': Metadata: encoder : Lavf55.33.100 Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 584x328 [SAR 1:1 DAR 73:41], q=2-31, 17 kb/s, 23.98 fps, 19184 tbn, 19184 tbc Stream mapping: Stream #0:0 -> #0:0 (copy) Press [q] to stop, [?] for help [mp4 @ 0x7fd880829a00] Non-monotonous DTS in output stream 0:0; previous: 93600, current: 5951; changing to 93601. This may result in incorrect timestamps in the output file. [concat @ 0x7fd880806600] Invalid stream index 1 [mp4 @ 0x7fd880829a00] Non-monotonous DTS in output stream 0:0; previous: 93601, current: 6001; changing to 93602. This may result in incorrect timestamps in the output file. [concat @ 0x7fd880806600] Invalid stream index 1 [mp4 @ 0x7fd880829a00] Non-monotonous DTS in output stream 0:0; previous: 93602, current: 6051; changing to 93603. This may result in incorrect timestamps in the output file. 

...

frame= 546 fps=0.0 q=-1.0 Lsize= 1127kB time=00:00:04.90 bitrate=1882.9kbits/s  video:1123kB audio:0kB subtitle:0 data:0 global headers:0kB muxing overhead 0.349865% 

Вывод выглядит так, как будто в нем содержится только мой файл с отказом от ответственности, а не остальная часть видео.

Я также запутался, почему мне нужно что-то «оценить». Он знает входной FPS и длительность ввода. Я не уверен, если это проблема или нет. Может быть, это просто ошибка.

Другой вариант - использовать «фильтр concat», но это транскод с потерями, верно? Я предпочел бы, чтобы второе видео было таким же после конкатенации, как и раньше.

Изменить: в конечном итоге попытался использовать concat «протокол», который является третьим вариантом. Документы не рекомендуют использовать его, но он работает лучше, чем другие два (демультиплексатор Concat и фильтр Concat).

9
Любопытно - почему твое время создания показывает 1970? Rajib 10 лет назад 1
Обратите внимание, что вместо `-r 23.98` вы должны использовать` -r 24000 / 1001` или `-r ntsc-film` (если, конечно, другое видео не было создано с` -r 23.98`). Это не может решить текущую проблему, хотя. LordNeckbeard 9 лет назад 0
Если вы используете свою собственную сборку, вы можете попробовать создать еще одну значимую версию ... uprego 9 лет назад 0

2 ответа на вопрос

1
Mrbios

Я знаю, что это, вероятно, не тот ответ, который вы ищете, но почему бы не использовать программное обеспечение для редактирования видео? Редактирование видео может принимать различные частоты кадров, кодеки и т. Д. И объединять их в целевой формат, и оно будет воспроизводиться обычным программным обеспечением. Ряд программ предлагает пакетный режим, если вам нужно добавить отказ от ответственности в кучу видео.

Есть бесплатные видеоредакторы с открытым исходным кодом и проприетарные. Я думаю, что вы делаете далеко за пределами того, для чего была создана конкатенация, которая в основном объединяет файлы одного типа и формата.

0
Theunis

The two videos must be exactly the same coding as far as - frame scale size, Aspect ratio, Frames per second and bitrate is concerned.

Try using eRrightSofts Super(c) converter. It is a very extensive GUI for ffmpeg. It also has "MediaInfo" embedded in it, so you can check your movies to see if they are exactly the same.

The authors do not claim authorship except for the GUI and give full credit to ffmpeg etc.

It should do what you require and much, much more, It is freeware.

I have personally used it to join files, extract video or audio, recode videos to various formats. The name says Super and it is.