Błąd podczas scalania dwóch plików wideo MP4 z ffmpeg

0

Mam kilka plików wideo MP4, które chcę scalić.

Korzystam z tych poleceń, aby przekonwertować .mp4 na .ts, a następnie scalić je ze sobą. odniesienie

ffmpeg -i part1.mp4  -bsf:v h264_mp4toannexb -f mpegts -y part1.ts # executes successfully

ffmpeg -i part2.mp4  -bsf:v h264_mp4toannexb -f mpegts -y part2.ts # executes successfully

ffmpeg -i "concat:part1.ts|part2.ts"  -bsf:a aac_adtstoasc -y full.mp4 # Error

Błąd: (ale wykonywanie nadal trwa) pakiety wejściowe są zbyt małe błąd nakładania filtrów strumienia bitów na pakiet wyjściowy dla strumienia nr 0: czas przeszły 0,999992 za duży

scalenie 2 plików zajmuje więcej niż godziny, ale nie zajmuje się innymi plikami wideo (myślę, że jest problem z part2.mp4, ale nie wiem jak go rozwiązać)

Oto informacje o filmie

part1.mp4

 C:\Users\JAGZ\Desktop\vid>ffmpeg -i part1.mp4
ffmpeg version 3.2.4 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 6.3.0 (GCC)
  configuration: --enable-gpl --enable-version3 --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-b
zlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcac
a --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb
--enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsnappy --enable-libsoxr
--enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --e
nable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enab
le-zlib
  libavutil      55. 34.101 / 55. 34.101
  libavcodec     57. 64.101 / 57. 64.101
  libavformat    57. 56.101 / 57. 56.101
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'part1.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.66.104
  Duration: 00:00:07.21, start: 0.000000, bitrate: 2355 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt470bg), 720x576 [SAR 128:117 DAR 160:117], 2034 kb/s, 25 fps, 2
5 tbr, 90k tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
At least one output file must be specified

part2.mp4

C:\Users\JAGZ\Desktop\vid>ffmpeg -i part2.mp4
ffmpeg version 3.2.4 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 6.3.0 (GCC)
  configuration: --enable-gpl --enable-version3 --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-b
zlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcac
a --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb
--enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsnappy --enable-libsoxr
--enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --e
nable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enab
le-zlib
  libavutil      55. 34.101 / 55. 34.101
  libavcodec     57. 64.101 / 57. 64.101
  libavformat    57. 56.101 / 57. 56.101
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 003075c0] stream 0, timescale not set
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'part2.mp4':
  Metadata:
    major_brand     : M4V
    minor_version   : 1
    compatible_brands: M4V M4A mp42isom
    creation_time   : 2016-03-07T16:01:20.000000Z
    title           : 2006/14 Coke Crisis
    media_type      : 9
    network         : A/V Input
    date            : 2016-03-07
    iTunMOVI        : <?xml version="1.0" encoding="UTF-8"?>
                    : <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                    : <plist version="1.0">
                    : <dict>
                    :   <key>asset-info</key>
                    :   <dict>
                    :           <key>file-size</key>
                    :           <integer>837215671</integer>
                    :           <key>flavor</key>
                    :           <string>4:640x480</string>
                    :           <key>high-definition</key>
                    :           <false/>
                    :           <key>screen-format</key>
                    :           <string>standard</string>
                    :           <key>soundtrack</key>
                    :           <string>LC</string>
                    :   </dict>
                    :   <key>cast</key>
                    :   <array/>
                    :   <key>codirectors</key>
                    :   <array/>
                    :   <key>copy-warning</key>
                    :   <string></string>
                    :   <key>directors</key>
                    :   <array/>
                    :   <key>producers</key>
                    :   <array/>
                    :   <key>screenwriters</key>
                    :   <array/>
                    :   <key>studio</key>
                    :   <string></string>
                    : </dict>
                    : </plist>
                    :
  Duration: 01:09:03.08, start: 0.000000, bitrate: 1616 kb/s
    Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(tv), 640x480 [SAR 1:1 DAR 4:3], 1485 kb/s, 24.99 fps, 25 tbr, 25k
 tbn, 50 tbc (default)
    Metadata:
      creation_time   : 2016-03-07T16:01:20.000000Z
      handler_name    : ?Apple Video Media Handler
      encoder         : H.264/AVC
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default)
    Metadata:
      creation_time   : 2016-03-07T16:01:20.000000Z
      handler_name    : ?Apple Sound Media Handler
    Stream #0:2: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 512x748 [SAR 72:72 DAR 128:187], 90k tbr, 90k tbn, 90k tbc
At least one output file must be specified

czy ktoś może mi zasugerować, jaką zmianę wprowadzę, aby połączyć te filmy?

JAGGADAKU
źródło
Podaj pełne, nieocięte dane wyjściowe wiersza poleceń z pierwszych trzech poleceń.
slhck
@slhck zaktualizował szczegóły z pełną wydajnością
JAGGADAKU
Nie można połączyć tych dwóch plików bez ponownego kodowania. Mają różne profile H264 i inną rozdzielczość.
Daniel B
@DanielB Technicznie możliwe jest dołączenie do nich, ale wyjście nie będzie wyglądać zgodnie z oczekiwaniami lub może nie zostać odtworzone.
slhck
@JAGGADAKU Zapytałem o dane wyjściowe trzech uruchomionych poleceń, a nie o dane wyjściowe ffmpeg -i part1.mp4. (Musisz wyłączyć -v quiet.)
slhck

Odpowiedzi:

1

Wystąpił problem z wprowadzonymi danymi: Twoje wejściowe filmy wideo mają różne wymiary klatki (720 × 576 vs. 640 × 480). W takim przypadku nie można po prostu połączyć surowych strumieni bitów. Cóż, możesz, ale wtedy odtwarzanie nie będzie obsługiwać zmiany rozdzielczości - pokaże się tylko w rozdzielczości pierwszego wideo wejściowego lub może spowodować awarię niektórych odtwarzaczy.

Zamiast tego prawdopodobnie powinieneś zdekodować filmy i doprowadzić je do wspólnego formatu (wymiary klatki, liczba klatek na sekundę, przestrzeń kolorów, proporcje pikseli,…), a następnie ponownie zakodować.

Powyższe można osiągnąć za pomocą concatfiltra, ale najpierw musisz przeskalować / wstawić jedno z tych wejść, np. Przez zwiększenie part2.mp4do 720 × 576 (z wypełnieniem):

ffmpeg -i part1.mp4 -i part2.mp4 -filter_complex "\
[0:v]setsar=1[0v]; \
[1:v]scale=720:576:force_original_aspect_ratio=decrease,setsar=1,\
     pad=720:576:(ow-iw)/2:(oh-ih)/2[1v]; \
[0v][0:a][1v][1:a]concat=n=2:v=1:a=1[outv][outa] \
" -map "[outv]" -map "[outa]" \
-c:v libx264 -crf 23 \
output.mp4

Zobacz ten post i Wiki FFmpeg, aby uzyskać więcej informacji na temat skalowania i konkatenacji. I przeczytaj przewodnik kodowania H.264 na temat ustawiania jakości wydruku.

slhck
źródło
Dziękujemy za odpowiedź ...... ale powyższe polecenie mówi, że korzystam No such filter: 'force_original_aspect_ratio' Error initializing complex filters. Invalid argumentz systemu Windows
JAGGADAKU,
Niestety, wystąpiła literówka, spróbuj ponownie.
slhck
[Parsed_concat_2 @ 04930620] Input link in1:v0 parameters (size 720x576, SAR 1:1) do not match the corresponding output link in0:v0 paramet ers (720x576, SAR 128:117) [Parsed_concat_2 @ 04930620] Failed to configure output pad on Parsed_concat_2 Error configuring complex filters. Invalid argumentTo jest problem ... przepraszam, ale nie mam pojęcia, jak działa ten kompleks filtrów
JAGGADAKU,
To prawda, że ​​proporcje pikseli są również różne dla obu plików, więc musisz również zmienić to na 1. Złożony filtr jest trochę skomplikowany do zrozumienia, tak. Udostępnienie plików wejściowych i żądanych danych wyjściowych pomogłoby (ed).
slhck
inne pytanie. Mam już włączoną bibliotekę libx264 na moim ffmpeg, więc dlaczego tak jest napisane[NULL @ 047eb220] Unable to find a suitable output format for 'libx264' libx264: Invalid argument
JAGGADAKU