1

Мне нужно автоматизировать объединение mp4 на стороне сервера, и я использую FFMPEG. Я получу закачки файлов mp4 и хочу прикрепить к ним файлы Title.mp4 и End.mp4. Я также наложил звуковую дорожку (входное видео не имеет звука). Возможно, существует высокая нагрузка на сервер, поэтому я хотел бы сделать это максимально эффективно, используя демультиплексор concat ffmpeg, чтобы избежать перекодирования видео.

После получения образцов каждого файла я не добился успеха и считаю, что это связано с несовпадающими форматами файлов. Мой результат имеет хороший Title.mp4 и звук, затем, когда предполагается, что воспроизводится сэмпл, загруженный mp4, в верхней половине видео появляются искаженные зеленые / розовые / красные пиксели, тогда End.mp4 воспроизводится нормально. Вот моя команда ffmpeg и выходные данные:

$ ffmpeg -f concat -i <(printf "file '%s'\n" Title.mp4 Sample.mp4 End.mp4) -i SoundTrack.wav -c:v copy -strict -2 -y Out.mp4

ffmpeg version 2.6.1 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.1.2 (GCC) 20080704 (Red Hat 4.1.2-55)
configuration: --prefix=/home/dpmsmobi/ffmpeg_build --extra-cflags=-I/home/dpmsmobi/ffmpeg_build/include --extra-ldflags=-L/home/dpmsmobi/ffmpeg_build/lib --bindir=/home/dpmsmobi/bin --enable-gpl --enable-nonfree --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, concat, from '/dev/fd/63':
  Duration: N/A, start: 0.000000, bitrate: 1810 kb/s
    Stream #0:0: Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv), 768x512 [SAR 1:1 DAR 3:2], 1810 kb/s, 30 fps, 30 tbr, 30k tbn, 60 tbc
Guessed Channel Layout for  Input Stream #1.0 : stereo
Input #1, wav, from 'SoundTrack.wav':
  Metadata:
    encoded_by      : Adobe Premiere Pro CC 2014 (Maci
    encoder         : Adobe Premiere Pro CC 2014 (Macintosh)
    date            : 2015-04-07
    creation_time   : 11:12:10
    time_reference  : 0
  Duration: 00:00:15.06, bitrate: 1551 kb/s
    Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, 2 channels, s16, 1536 kb/s
Output #0, mp4, to 'Out.mp4':
  Metadata:
    encoder         : Lavf56.25.101
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 768x512 [SAR 1:1 DAR 3:2], q=2-31, 1810 kb/s, 30 fps, 30 tbr, 30k tbn, 30k tbc
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, 128 kb/s
    Metadata:
      encoder         : Lavc56.26.100 aac
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (native))
Press [q] to stop, [?] for help
[concat @ 0x1dedc20] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[concat @ 0x1dedc20] DTS 69750 < 91000 out of order
[mp4 @ 0x1f75060] Non-monotonous DTS in output stream 0:0; previous: 91000, current: 69750; changing to 91001. This may result in incorrect timestamps in the output file.

<----- many more Non-monotonous DTS messages omitted here ---->

frame=  427 fps=0.0 q=-1.0 Lsize=    4123kB time=00:00:15.06 bitrate=2242.5kbits/s    
video:3873kB audio:236kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.344173%

Я могу успешно объединить Title.mp4 в End.mp4 и успешно объединить два файла Sample.mp4, поэтому я знаю, что у меня есть команда ffmpeg. Я также могу успешно конкатировать файлы, используя следующую команду ffmpeg с filter_complex вместо concat demuxer (это занимает значительно больше времени из-за перекодирования):

ffmpeg -i Title.mp4 -i Sample.mp4 -i End.mp4 -i SoundTrack.wav -filter_complex '[0:0] [1:0] [2:0] concat=n=3:v=1 [v]' -map '[v]' -map 3:0 -crf 20 -strict -2 -y Out2.mp4 

Вот вывод MediaInfo для каждого типа файла mp4:

$ mediainfo Title.mp4
General
Complete name                            : Title.mp4
Format                                   : MPEG-4
Format profile                           : Base Media / Version 2
Codec ID                                 : mp42
File size                                : 693 KiB
Duration                                 : 3s 100ms
Overall bit rate mode                    : Variable
Overall bit rate                         : 1 831 Kbps
Encoded date                             : UTC 2015-04-07 19:15:03
Tagged date                              : UTC 2015-04-07 19:15:03
©TIM                                     : 00:00:00:00
©TSC                                     : 30
©TSZ                                     : 1

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : Main@L3.1
Format settings, CABAC                   : Yes
Format settings, ReFrames                : 3 frames
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 3s 100ms
Bit rate mode                            : Variable
Bit rate                                 : 1 811 Kbps
Maximum bit rate                         : 3 000 Kbps
Width                                    : 768 pixels
Height                                   : 512 pixels
Display aspect ratio                     : 3:2
Frame rate mode                          : Constant
Frame rate                               : 30.000 fps
Standard                                 : NTSC
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.154
Stream size                              : 685 KiB (99%)
Language                                 : English
Encoded date                             : UTC 2015-04-07 19:15:03
Tagged date                              : UTC 2015-04-07 19:15:03
Color range                              : Limited

$ mediainfo Sample.mp4
General
Complete name                            : Sample.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom
File size                                : 2.93 MiB
Duration                                 : 7s 9ms
Overall bit rate                         : 3 505 Kbps
Encoded date                             : UTC 1970-01-01 00:00:00
Tagged date                              : UTC 1970-01-01 00:00:00
Writing application                      : Lavf52.64.2

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : Baseline@L3.1
Format settings, CABAC                   : No
Format settings, ReFrames                : 1 frame
Format settings, GOP                     : M=1, N=30
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 7s 9ms
Bit rate                                 : 3 500 Kbps
Width                                    : 768 pixels
Height                                   : 512 pixels
Display aspect ratio                     : 3:2
Frame rate mode                          : Variable
Frame rate                               : 30.250 fps
Minimum frame rate                       : 23.462 fps
Maximum frame rate                       : 296.053 fps
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.294
Stream size                              : 2.92 MiB (100%)
Language                                 : English
Encoded date                             : UTC 1970-01-01 00:00:00
Tagged date                              : UTC 1970-01-01 00:00:00

Я почти уверен, что это mp42 против идентификаторов кодека isom и, возможно, постоянная или переменная частота кадров. Я не могу изменить входные mp4, но я знаю, что их формат останется прежним. Как я могу переформатировать заголовок и конец mp4, чтобы они соответствовали входным файлам mp4, чтобы я мог использовать ffmpeg concat demux?

0