FFMPEG concat demuxer - mp4 dosya formatlarını uyumlu hale getirme


1

Mp4 bitiştirme sunucusu tarafını otomatikleştirmem gerekiyor ve FFMPEG kullanıyorum. Mp4 dosyalarını yükleyeceğim ve her birine bir Title.mp4 ve End.mp4 eklemek istiyorum. Ayrıca bir film müziğinin üstüne biniyorum (giriş videolarında ses yok) Potansiyel bir yüksek sunucu yükü var, bu yüzden videoyu yeniden kodlamaktan kaçınmak için ffmpeg'in concat demuxer'ını kullanarak mümkün olduğu kadar verimli yapmak istiyorum.

Her dosyanın örneklerini aldıktan sonra başarılı olamadım ve eşleşmeyen dosya formatları nedeniyle olduğuna inanıyorum. Sonucumda iyi Title.mp4 ve ses var, sonra yüklenen mp4 örneğinin oynatması gerekiyorsa, videonun üst yarısında yeşil / pembe / kırmızı pikseller görülüyor, ardından End.mp4 iyi oynuyor. İşte benim ffmpeg komut ve çıktı:

$ 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 ile başarılı bir şekilde birleştirebilir ve iki Sample.mp4 dosyasını başarıyla birleştirebilirim, böylece ffmpeg komutunun doğru olduğunu biliyorum. Concat demuxer yerine filter_complex ile aşağıdaki ffmpeg komutunu kullanarak dosyaları başarıyla dağıtabilirim (yeniden kodlama nedeniyle bu oldukça uzun sürer):

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 

Her tür mp4 dosyası için MediaInfo çıktısı:

$ 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

Eminim mp42 vs isom Codec ID'ler ve potansiyel olarak sabit vs değişken kare hızlarıdır. Mp4'ün girişini değiştiremiyorum ancak formatlarının aynı kalacağını biliyorum. Fpmpeg concat demux'u kullanabilmem için mp4'lerin giriş mp4 dosyalarıyla eşleşecek şekilde nasıl yeniden biçimlendirilebilir?


Başlık ve Son ffmpeg -i Title.mp4 -profile:v baseline Title2.mp4
mp4'leri

Ayrıca Title & End mp4 dosyasını değişken kare hızı yapmanın bir yolunu buldum ancak concat demux dosyasını düzeltmedi
user206481

Bu yorumu FFMPEG kullanıcı forumunda bir yerde buldum : concat demuxer değişken kare hızını destekleyebilir, ancak şu anda tüm dosyaların karşılık gelen dosyalar için aynı zaman tabanına sahip olmasını gerektirir Bu yüzden şimdi zaman tabanlarını araştırıyorum.
user206481

Muhtemelen concat demuxer'ı kullanmak ve concat filtresine bağlı kalmak istemezsiniz. Başka bir olasılıkla senkronizasyon sorunlarıyla karşılaşacaksınız ve ekstra dönüşüm adımından tasarruf edeceksiniz.
slhck

1
Eşleşecek tbn değerlerini almak için -video_track_timescale kullanabileceğimi düşündüm. Bu, tüm DTS hatalarından kurtuldu ancak ortaya çıkan video hala işe yaramadı. Başlık ve Bitiş kartları görüntülendi ve müzik çalındı, ancak ortada giriş videosu oynatılmadı. Tbc değerlerini eşleştirmenin bir yolunu bulamadınız. Yerleşim süzgeci kullanılarak denenmiş ancak bunun bir etkisi olmadığı görülmüştür.
user206481
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.