FFmpeg concat mp4-Korruption

686
Ethan SK

Wenn ich renne

ffmpeg -f concat -i resizedvideolist.txt -c copy concatenated_time.mp4 2>&1 

Es verkettet alle Videos im TXT-Format, aber es gibt ein Video in der Mitte, in dem Störungen auftreten. Das Audiomaterial wird für dieses Video einfach nicht abgespielt, es wird jedoch beim nächsten Video abgespielt, sodass es verzögert wurde. Dann hat irgendwo das Audio aufgeholt und ist wieder synchron. Es scheint, als würde hier eine schwere Korruption vor sich gehen.

Ich weiß nicht, wie ich das beheben kann, da der Codec der gleiche ist wie alle anderen Videos, H.264, es ist ein mp4 wie die anderen. Die einzelne Videodatei läuft einwandfrei und ist bereits in derselben Zeitspanne, da vor diesem Befehl ffmpeg ausgeführt wurde

ffmpeg -i ./tempDownloadedMemes/$videoFileName -filter_complex 'scale=1080:-1,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:0x2F2F2F' -video_track_timescale 15360 ./resizedVideos/resized_videoFileName 2>&1 

Um ehrlich zu sein, ich weiß nicht mal was Zeit ist, aber ich habe gelesen, dass es gleich sein muss, damit es funktioniert. Ich habe das Video aus der Liste gelöscht, den gleichen Befehl ausprobiert, und das Problem war zur gleichen Zeit in dem Video verschwunden, als wäre es aufgetreten. Es scheint, als hätte es etwas mit dieser einen Datei zu tun. Bekannte Probleme / Problemumgehungen bei Concat-Fehlern? Das ist mir sehr wichtig. Vielen Dank.

2
Sie müssen Informationen zu jeder Eingabe anzeigen. `ffmpeg -i input0 -i input1 -i input2` LordNeckbeard vor 7 Jahren 1
Ich habe gerade diese [Antwort auf SO] gefunden (https://stackoverflow.com/a/42820847/3703716). Das Problem könnte der Aufruf von `shell_exec` sein, der dazu führt, dass ffmpeg den Speicher nicht bereinigt und somit die Videodatei beschädigt. mab vor 5 Jahren 0

1 Antwort auf die Frage

1
Ethan SK

meh, ich fand eine sehr harte Workaround mit einer anderen concat-Methode.

$resizedVideoList = file('resizedVideoList.txt', FILE_IGNORE_NEW_LINES); $inputStringForConcat = ""; $concatString = ""; $concateNvalue = 0; foreach ($resizedVideoList as $key => $value) { //$limiter++; //if ($limiter > 2)break; $inputStringForConcat .= " -i ".$value; $concatString .= "[$key:0][$key:1]"; $concateNvalue++; } $concatString .= " concat=n=$concateNvalue:v=1:a=1[v][a]"; echo ("<pre>"); print_r($inputStringForConcat); print_r($concatString);   echo shell_exec("./ffmpeg $inputStringForConcat -filter_complex '$concatString' -map '[v]' -map '[a]' concatenated_time.mp4 2>&1");