Я пытался создать приложение php, которое более или менее действует как видеоредактор. Я бы хотел, чтобы мои пользователи вставляли изображения и видео, а затем объединяли их в определенном порядке и добавляли musi c. Я решил использовать ffmpeg для этой цели.
Мне удалось создать mp4 из этих изображений и добавить musi c к mp4s с помощью следующих команд
$ ffmpeg -r 0.1 -i %05d.morph.jpg output.mp4
$ ffmpeg -i output.mp4 -i audio.mp3 -c:v copy -c:a aac -b:a 128k final.mp4
This дает достойные результаты. Но именно здесь начинаются проблемы.
Я пытался объединить эти созданные mp4s (БЕЗ musi c), но, похоже, не могу этого сделать. Я также не могу сопоставить их с дубликатом себя. (Я использовал демультиплексор concat, как указано в этой ссылке: Как объединить два файла MP4 с помощью FFmpeg? )
$ cat mylist.txt
file 'output.mp4'
file 'vid1.mp4'
file 'output2.mp4'
$ ffmpeg -f concat -safe 0 -i mylist.txt -c copy outputSemi.mp4
В результате получилось видео (соответствующей длины). ), однако воспроизводится только первое видео и повторяется снова и снова, часто с зелеными экранами, смешивающимися между кадрами.
Любая помощь будет полезна.
Рисунок I должен включать результат команды concat
ffmpeg version 4.2.1 Copyright (c) 2000-2019 the FFmpeg developers
built with Apple clang version 11.0.0 (clang-1100.0.33.8)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.1_2 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fc70f00bc00] Auto-inserting h264_mp4toannexb bitstream filter
Input #0, concat, from 'mylist.txt':
Duration: N/A, start: 0.000000, bitrate: 1507 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 4864x3648 [SAR 1:1 DAR 4:3], 1507 kb/s, 0.10 fps, 0.10 tbr, 16384 tbn, 0.20 tbc
Metadata:
handler_name : VideoHandler
File 'outputFFMPEG.mp4' already exists. Overwrite ? [y/N] y
Output #0, mp4, to 'outputFFMPEG.mp4':
Metadata:
encoder : Lavf58.29.100
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 4864x3648 [SAR 1:1 DAR 4:3], q=2-31, 1507 kb/s, 0.10 fps, 0.10 tbr, 16384 tbn, 16384 tbc
Metadata:
handler_name : VideoHandler
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fc70e80b600] Auto-inserting h264_mp4toannexb bitstream filter
frame= 5 fps=0.0 q=-1.0 Lsize= 9543kB time=00:00:40.00 bitrate=1954.4kbits/s speed= 169x
video:9542kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.009467%