FFMPEG Âm thanh không đồng bộ khi concat


0

Tôi đang xử lý tải video để ghép lại với nhau bằng Java trên máy chủ Linux.

Đầu tiên, tôi trộn một đoạn âm thanh với quá trình này, tùy thuộc vào việc video đã có âm thanh hay chưa.

ffmpeg -y -i video.mp4 -i  audio.mp3
 -filter_complex "[0:a]aresample=async=1,volume=1.0[a0]; 
 [1:a]aresample=async=1,volume=1.0[a1]; 
[a0][a1]amix=inputs=2[a] -map 0:v -map "[a]" -c:v copy
-c:a aac -strict -2 -shortest output.mp4

Hoặc nếu không có âm thanh hiện có

ffmpeg -y -i video.mp4 -i  audio.mp3 -af apad 
-map 0:v -map 1:a -c:v copy -shortest output.mp4

Với mã dưới đây trong ứng dụng Java

        if(getVideoAttribute(video, "a:0", "duration") != null)
        pb = new ProcessBuilder(
                "ffmpeg", "-y", "-i", video.getAbsolutePath(),
                "-i", audio.getAbsolutePath(),
                "-filter_complex", "[0:a]aresample=async=1,volume=" + videoVolume + "[a0]; [1:a]aresample=async=1,volume=" + audioVolume + "[a1]; [a0][a1]amix=inputs=2[a]", "-map", "0:v", "-map", "[a]", "-c:v", "copy", "-c:a", "aac", "-strict", "-2", "-shortest",
                outFile.getAbsolutePath()
        );
    else
        pb = new ProcessBuilder(
                "ffmpeg", "-y", "-i", video.getAbsolutePath(),
                "-i", audio.getAbsolutePath(),
                "-af", "apad", "-map", "0:v", "-map", "1:a", "-c:v", "copy", "-shortest",
                outFile.getAbsolutePath()
        );

Sau đó tôi thêm tất cả các tệp video vào một tệp văn bản và nối tệp văn bản đó bằng cách sử dụng

 ffmpeg -f concat -i list.txt -safe 0
            -c:v copy -c:a aac -strict experimental output.mp4

Sử dụng Java dưới đây

    ProcessBuilder pb = new ProcessBuilder(
            "ffmpeg", "-f",
            "concat", "-i", Constants.TEMP_DIR_PATH + listFile.getName(),
            "-safe", "0",
            "-c:v","copy","-c:a","aac","-strict","experimental",
            Constants.TEMP_DIR_PATH + out.getName()
    );

Trong đầu ra cuối cùng, âm thanh hơi không đồng bộ, tức là âm thanh từ một video chạy qua video tiếp theo, v.v.

Tôi đã kiểm tra thời lượng âm thanh / video cho mỗi video và chúng thực sự hơi khác nhau (thời lượng video là số đầu tiên, theo dõi âm thanh thứ hai)

6.480000
6.528000
0e9e449b-f53e-473b-a91a-72e38ecfc789_3840.mp4
12.760000
12.736000
06bd1e70-b9aa-4c26-86d2-98fc421f6729_3840.mp4
17.520000
17.493000
f2dc7fc0-d4ac-4a82-88cb-777a16a1f818_3840.mp4
7.880000
7.850000
03681d53-4532-48e0-b3e4-cc1e7170ae65_3840.mp4
6.625000
6.592000
219d174d-9df6-41ec-b95e-2ec4137e07a4_3840.mp4
14.541992
14.485000

Mà tôi cho là nguyên nhân của vấn đề.

Bất cứ ai có thể giúp tôi thay đổi cách tôi trộn chúng để video và âm thanh luôn có cùng độ dài hoặc chỉ cho tôi cách sử dụng concat để nó thêm khoảng lặng ở cuối âm thanh để chúng có cùng độ dài?


Vui lòng không hiển thị nội dung Java, nhưng các dòng lệnh ffmpeg thực tế đang được chạy cũng như đầu ra dòng lệnh từ thiết bị đầu cuối.
slhck

OK đã trích xuất các lệnh FFMPEG
beek

Máy và đầu ra dòng lệnh từ thiết bị đầu cuối.
slhck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.