Ich habe erfolglos versucht, einige MP4-Dateien mit unterschiedlichen Bildraten zusammenzuführen. Wenn ich die Dateien zusammenführe, scheint es immer ein Problem mit der Ausgabe zu geben. Meistens ist der Ton nicht mit dem Video synchron. Ich habe versucht, die Bildrate der Videos zu ändern (30 zu 60 oder 60 zu 30), aber die Qualität wird dadurch zu stark reduziert.
Um die Dateien zusammenzuführen, habe ich alle Lösungen in diesem Beitrag verwendet
beim Ausprobieren dieser Methode:
:: Create File List
echo file file1.mp4 > mylist.txt
echo file file2.mp4 >> mylist.txt
echo file file3.mp4 >> mylist.txt
:: Concatenate Files
ffmpeg -f concat -i mylist.txt -c copy output.mp4
Audio und Video sind nicht mehr synchron und das Video friert manchmal ein.
Wenn Sie "mp4 zu mpg und dann zusammenführen" versuchen:
ffmpeg -i 1.mp4 -qscale 0 1.mpg
ffmpeg -i 2.mp4 -qscale 0 2.mpg
cat 1.mpg 2.mpg | ffmpeg -f mpeg -i - -qscale 0 -vcodec mpeg4 output.mp4
Ich verliere das Audio in den 60-FPS-Dateien, zu diesem Zeitpunkt dachte ich, es sei ein Audioproblem, also habe ich versucht, den Audio-Codec aller mp4-Dateien wie folgt zu "vereinheitlichen":
ffmpeg -i input.mp4 -acodec SOME_AUDIO_TYPE -vcodec copy out.mp4
Die Zusammenführung erfolgt ohne Fehler, aber der Ton ist immer noch nicht synchronisiert
Also habe ich bei meinem letzten Versuch versucht, die fps-Rate meiner Dateien wie folgt zu ändern:
ffmpeg -y -i source.mp4 -r FPS -s RESOLUTION -c:v libx264 -b:v 3M -strict -2 -movflags faststart destination.mp4
Aber das Ergebnis mindert die Qualität zu sehr.
Es gibt die ffprobe der beiden Dateien:
libavutil 55. 57.100 / 55. 57.100
libavcodec 57. 88.100 / 57. 88.100
libavformat 57. 70.100 / 57. 70.100
libavdevice 57. 5.100 / 57. 5.100
libavfilter 6. 81.100 / 6. 81.100
libswscale 4. 5.100 / 4. 5.100
libswresample 2. 6.100 / 2. 6.100
libpostproc 54. 4.100 / 54. 4.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.63.100
Duration: 00:00:32.00, start: 0.000000, bitrate: 3120 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709/bt709/iec61966-2-1), 1280x720, 2981 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default)
Metadata:
handler_name : SoundHandler
libavutil 55. 57.100 / 55. 57.100
libavcodec 57. 88.100 / 57. 88.100
libavformat 57. 70.100 / 57. 70.100
libavdevice 57. 5.100 / 57. 5.100
libavfilter 6. 81.100 / 6. 81.100
libswscale 4. 5.100 / 4. 5.100
libswresample 2. 6.100 / 2. 6.100
libpostproc 54. 4.100 / 54. 4.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.63.100
Duration: 00:00:23.01, start: 0.000000, bitrate: 2585 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720, 2412 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 159 kb/s (default)
Metadata:
handler_name : SoundHandler
Wenn ich die 2 Dateien mit der ersten Methode zusammenführe, bekomme ich Folgendes:
[mp4 @ 0xbc5a340] Non-monotonous DTS in output stream 0:0; previous: 2872466, current: 843279; changing to 2872467. This may result in incorrect timestamps in the output file.
[mp4 @ 0xbc5a340] Non-monotonous DTS in output stream 0:0; previous: 2872467, current: 843535; changing to 2872468. This may result in incorrect timestamps in the output file.
[mp4 @ 0xbc5a340] Non-monotonous DTS in output stream 0:0; previous: 2872468, current: 843791; changing to 2872469. This may result in incorrect timestamps in the output file.
[mp4 @ 0xbc5a340] Non-monotonous DTS in output stream 0:0; previous: 2872469, current: 844047; changing to 2872470. This may result in incorrect timestamps in the output file.
frame= 2340 fps=0.0 q=-1.0 Lsize= 19428kB time=00:00:50.53 bitrate=3149.8kbits/s speed=58.7x
video:18420kB audio:949kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.304418%
Gibt es eine Lösung für dieses Problem?
Das Audio muss mit derselben Abtastrate neu codiert werden, wenn es in den Dateien unterschiedlich ist. Das Video muss nicht neu kodiert werden, aber es muss die gleiche Zeitskala haben.
ffmpeg -i input.mp4 -c:a aac -ar 48000 -ac 2 -c:v copy -video_track_timescale 600 out.mp4
Wenn das Audio einer Datei bereits 48-kHz-Stereo-AAC-LC ist, können Sie die Audiocodierung überspringen und einfach verwenden-c:a copy
Führen Sie concat mit den verarbeiteten Dateien aus.
Main
Profil für Videos. Die Pastebin-Sonde zeigt Hoch an. Hast du die Videos neu kodiert?ffmpeg -i 1.mp4 -c:v copy output.mp4
(nur um die Datei zu überprüfen), ist die Ausgabe beschädigt (gleiche Ausgabe wie der Gyazo). Ich vermute, es ist ein Fehler in den Dateien? Ich lade sie einfach von twitch.tv herunter, was meiner Meinung nach eine zuverlässige Quelle istVerwandeln Sie im aktuellen Ordner alle mp4-Dateien in TS. Verwenden Sie dann den Windows-Befehl „Kopieren“, um jeden TS zusammenzuführen. Wenn Sie dann ein einzelnes ts haben, transmuxen Sie ohne Neucodierung in mp4.
for %i in (*.mp4) do ffmpeg -i "%i" -c copy -bsf:v h264_mp4toannexb "%~ni.ts"
copy /b *.ts all.ts
ffmpeg -i all.ts -c copy all.mp4
Michael Liebmann
TyLO
Logan
ffmpeg -i file1.mp4 -i file2.mp3 -i file3.mp4