1

У меня есть видео, записанное с gopro, которое разбито на 3 части, так как максимальный размер файла достигается примерно через 17 минут, и gopro автоматически разбивает его на несколько частей. У меня также есть запись моего рабочего стола в camstudio.

Мне нужно объединить 3 видео gopro, а также наложить запись camstudio как изображение в виде вида.

Т.е. в конечном итоге это будет так, как показано ниже, где 9 - оверлей, а 1,2,3 - видео gopro.

999999999999999

111111222222333

Я должен выполнять это на регулярной основе (и несколько видео), поэтому хочу написать пакетный файл для генерации желаемого результата в формате, воспроизводимом проигрывателем Windows Media без загруженных кодеков. Также было бы полезно уменьшить максимальный размер файла примерно до 1 ГБ /45 минут.

Кто-нибудь может предложить способ сделать это в FFmpeg или libav? Я могу сделать конкатенацию ИЛИ оверлей в FFmpeg, но не могу получить оба. Может быть, мне просто нужно сначала выполнить конкатенацию во временный файл, а затем использовать его в качестве входных данных для наложения?

В настоящее время я использую следующие 2 команды в ffmpeg для достижения этой цели, но размер файла огромен, а качество не велико, плюс это занимает много времени. В настоящее время вывод составляет около 1 ГБ в течение 7 минут, но мои видео могут занимать до 45 минут, поэтому мне действительно нужно сократить размер файла, желательно до 1-2 ГБ в течение 45 минут.

ffmpeg -i concat:1.mp4|2.mp4|3.mp4" -an -q:v 9 -preset veryslow -crf 28 -vcodec wmv2 temp.wmv
ffmpeg -i temp.wmv -an -vf"movie=overlay.avi, scale=iw:ih; [in][small] overlay =0:0 [out]" -q:v 9 -preset veryslow -crf 28 -vcodec wmv2 output.wmv

Выходные данные ffmpeg concat:

>ffmpeg -i "concat:GOPR0133.mp4|GP010133.mp4|GP020133.mp4" -an -q:v 9 -vcodec wm
v2 70-70KMtemp.wmv
ffmpeg version N-61191-gea9399f Copyright (c) 2000-2014 the FFmpeg developers
  built on Mar  8 2014 22:01:33 with gcc 4.8.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetyp
e --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --ena
ble-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-l
ibopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libsp
eex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aa
cenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavp
ack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable
-zlib
  libavutil      52. 66.101 / 52. 66.101
  libavcodec     55. 52.102 / 55. 52.102
  libavformat    55. 34.100 / 55. 34.100
  libavdevice    55. 11.100 / 55. 11.100
  libavfilter     4.  3.100 /  4.  3.100
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 18.100 /  0. 18.100
  libpostproc    52.  3.100 / 52.  3.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 027c29c0] Found duplicated MOOV Atom. Skipped it
    Last message repeated 1 times
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'concat:GOPR0133.mp4|GP010133.mp4|GP0201
33.mp4':
  Metadata:
    creation_time   : 2014-04-17 09:47:21
    minor_version   : 0
    major_brand     : avc1
    compatible_brands: avc1isom
  Duration: 00:17:24.30, start: 0.000000, bitrate: 71321 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709
), 1280x720 [SAR 1:1 DAR 16:9], 30002 kb/s, 100 fps, 100 tbr, 180k tbn, 200 tbc
(default)
    Metadata:
      creation_time   : 2014-04-17 09:47:21
      handler_name    :  GoPro AVC
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 12
8 kb/s (default)
    Metadata:
      creation_time   : 2014-04-17 09:47:21
      handler_name    :  GoPro AAC
[swscaler @ 036088a0] deprecated pixel format used, make sure you did set range
correctly
Output #0, asf, to '70-70KMtemp.wmv':
  Metadata:
    compatible_brands: avc1isom
    minor_version   : 0
    major_brand     : avc1
    WM/EncodingSettings: Lavf55.34.100
    Stream #0:0(eng): Video: wmv2 (WMV2 / 0x32564D57), yuv420p, 1280x720 [SAR 1:
1 DAR 16:9], q=2-31, 200 kb/s, 1k tbn, 100 tbc (default)
    Metadata:
      creation_time   : 2014-04-17 09:47:21
      handler_name    :  GoPro AVC
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> wmv2)
Press [q] to stop, [?] for help
frame=    6 fps=0.0 q=9.0 size=      60kB time=00:00:00.06 bitrate=8195.6kbits/s
frame=   15 fps= 14 q=9.0 size=     132kB time=00:00:00.15 bitrate=7203.6kbits/s
frame=   25 fps= 16 q=9.0 size=     207kB time=00:00:00.25 bitrate=6779.7kbits/s
frame=   33 fps= 16 q=9.0 size=     235kB time=00:00:00.33 bitrate=5834.4kbits/s
frame=   39 fps= 15 q=9.0 size=     294kB time=00:00:00.39 bitrate=6183.9kbits/s
frame=   47 fps= 15 q=9.0 Lsize=     326kB time=00:00:00.47 bitrate=5677.5kbits/
s
etc....

Затем вывод я получаю при выполнении оверлея

>ffmpeg -i GOPR0131.mp4 -an -vf "movie=20140417_0930_55.avi, scale=iw:ih [small]
; [in][small] overlay =0:0 [out]" -q:v 9 -preset veryslow -crf 28 37-38KM.wmv
ffmpeg version N-61191-gea9399f Copyright (c) 2000-2014 the FFmpeg developers
  built on Mar  8 2014 22:01:33 with gcc 4.8.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetyp
e --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --ena
ble-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-l
ibopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libsp
eex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aa
cenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavp
ack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable
-zlib
  libavutil      52. 66.101 / 52. 66.101
  libavcodec     55. 52.102 / 55. 52.102
  libavformat    55. 34.100 / 55. 34.100
  libavdevice    55. 11.100 / 55. 11.100
  libavfilter     4.  3.100 /  4.  3.100
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 18.100 /  0. 18.100
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'GOPR0131.mp4':
  Metadata:
    major_brand     : avc1
    minor_version   : 0
    compatible_brands: avc1isom
    creation_time   : 2014-04-17 09:29:13
  Duration: 00:11:59.29, start: 0.000000, bitrate: 30160 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709
), 1280x720 [SAR 1:1 DAR 16:9], 30005 kb/s, 100 fps, 100 tbr, 180k tbn, 200 tbc
(default)
    Metadata:
      creation_time   : 2014-04-17 09:29:13
      handler_name    :  GoPro AVC
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 12
8 kb/s (default)
    Metadata:
      creation_time   : 2014-04-17 09:29:13
      handler_name    :  GoPro AAC
Codec AVOption preset (Set the encoding preset (cf. x264 --fullhelp)) specified
for output file #0 (37-38KM.wmv) has not been used for any stream. The most like
ly reason is either wrong type (e.g. a video option with no video streams) or th
at it is a private option of some encoder which was not actually used for any st
ream.
Codec AVOption crf (Select the quality for constant quality mode) specified for
output file #0 (37-38KM.wmv) has not been used for any stream. The most likely r
eason is either wrong type (e.g. a video option with no video streams) or that i
t is a private option of some encoder which was not actually used for any stream
.
[swscaler @ 0401a560] deprecated pixel format used, make sure you did set range
correctly
Output #0, asf, to '37-38KM.wmv':
  Metadata:
    major_brand     : avc1
    minor_version   : 0
    compatible_brands: avc1isom
    WM/EncodingSettings: Lavf55.34.100
    Stream #0:0(eng): Video: msmpeg4v3 (msmpeg4) (MP43 / 0x3334504D), yuv420p, 1
280x720 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 1k tbn, 100 tbc (default)
    Metadata:
      creation_time   : 2014-04-17 09:29:13
      handler_name    :  GoPro AVC
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> msmpeg4)
Press [q] to stop, [?] for help
frame=    6 fps=0.0 q=9.0 size=      23kB time=00:00:00.06 bitrate=3075.9kbits/s
frame=   16 fps= 15 q=9.0 size=      57kB time=00:00:00.16 bitrate=2913.4kbits/s
frame=   25 fps= 16 q=9.0 size=      91kB time=00:00:00.25 bitrate=2991.0kbits/s
frame=   32 fps= 15 q=9.0 Lsize=     113kB time=00:00:00.32 bitrate=2898.9kbits/
s
etc...

1 ответ1

2

Вы можете использовать setpts, scale, concat, overlay и format . Я предполагаю, что все входные данные имеют размер 1280x720, поскольку размер файла, который вы хотите наложить, в настоящее время неизвестен.

пример

ffmpeg -i gopro0.mp4 -i gopro1.mp4 -i gopro2.mp4 -i over.avi -filter_complex \
"[0:v]setpts=PTS-STARTPTS[v0]; \
 [1:v]setpts=PTS-STARTPTS[v1]; \
 [2:v]setpts=PTS-STARTPTS[v2]; \
 [3:v]setpts=PTS-STARTPTS,scale=iw/4:-2[fg]; \
 [v0][v1][v2]concat=n=3:v=1:a=1[bg][a]; \
 [bg][fg]overlay=W-w-10:10,format=yuv420p[v]"
-map "[v]" -map "[a]" output.mp4

Что делает каждый фильтр

  • setpts заставляет временные метки начинаться с 0, что рекомендуется concat и overlay .

  • scale сделает over.avi меньшим размером кадра.

  • concat каждый вход.

  • overlay поместит масштабированный over.avi в верхний правый угол с отступом 10 пикселей. Обратитесь к документации overlay для дополнительных опций относительно входов, которые имеют различную длительность (shortest и eof_action частности).

  • format будет гарантировать, что ваш вывод использует схему подвыборки цветности, совместимую со всеми проигрывателями (при условии, что вы используете кодировщик libx264 который используется по умолчанию для MP4, если он поддерживается сборкой ffmpeg ).

Заметки

  • Если вы хотите, чтобы вывод имел меньший размер кадра, добавьте еще один scale:

    [bg][fg]overlay=W-w-10:10,scale=640:-2,format=yuv420p[v]"
    
  • В настоящее время я не смог протестировать эти примеры, поэтому оставьте комментарий, если что-то не работает, как ожидается, и я посмотрю его в воскресенье, если другие не предоставят дополнительную помощь.

  • Типы файлов, поддерживаемые Windows Media Center (Windows 7) , практически бесполезны, так как они не предоставляют подробностей, поэтому вам, возможно, придется поэкспериментировать, или другие, более знакомые с Windows 7, могут редактировать этот ответ.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .