FFmpeg concat mp4の破損


2

走るとき

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

txt内のすべてのビデオを連結しますが、途中で1つのビデオがグリッチされます。オーディオはそのビデオでは再生されませんが、次のビデオで再生が開始されるため、遅延しています。その後、どこかでオーディオが追いついて同期に戻りました。ここで起こっているいくつかの大きな破損のようです。

コーデックは他のすべてのビデオ、H.264と同じであり、他のコーデックと同様のmp4であるため、これを修正する方法はわかりません。このffmpegコマンドの前に、私は実行したので、個々のビデオファイルはそのままで正常に実行され、既に同じタイムスケールにあります

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

正直に言うと、タイムスケールが何であるかさえ知りませんが、それが機能するためには同じである必要があると読みました。リストからビデオを削除し、この同じコマンドを試してみたところ、ビデオが表示されるはずだった問題が同時になくなりました。その1つのファイル自体と関係があるようです。連結バグに関する既知の問題/回避策はありますか?これは私にとって非常に重要です。ありがとう。


1
各入力に関する情報を表示する必要があります。ffmpeg -i input0 -i input1 -i input2
-llogan

SOでこの答えを見つけました。問題shell_execは、ffmpegがメモリをクリーンアップせずにビデオファイルを破損する可能性のある呼び出しである可能性があります。
mab

回答:


1

まあ、私は別の連結方法を使用して本当にハッキングの回避策を見つけました。

$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");
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.