Điểm:2

Làm cách nào để hợp nhất nhiều tệp video với các codec khác nhau? MP4/H.265

lá cờ cn

tôi có rất rất rất kịch bản xấu xí để hợp nhất nhiều tệp trò chơi bóng đá của tôi (tôi có 10 máy quay một trận) và bây giờ tôi bắt đầu tạo điểm nhấn cho mỗi trận đấu. Nhưng một số máy ảnh có tốc độ khung hình khác nhau và sử dụng các codec khác nhau. Vì vậy, bây giờ tôi hoàn toàn không biết làm thế nào để những thứ này hoạt động trong linux. Tôi sẽ ổn với GUI hoặc một số phần mềm chỉnh sửa video khác nếu đó là những gì nó cần.

Kịch bản xấu xí (đối với ngữ cảnh)

#!/bin/bash

#filesList=""
#đối với tệp trong $(ls -1v *.MP4);do #liệt kê tệp được đánh số chẵn
# filesList="${filesList}${file}|"
#xong
#filesList=${filesList%?} # xóa đường dẫn cuối
#ffmpeg -i "concat:$filesList" -c copy ../$(date +%Y%m%d_%H%M%S)_merged.mp4
# tùy chỉnh với của riêng bạn.


đơn giảnCopy(){    
    printf "Bạn có muốn có một hình thu nhỏ:\n"
    chọn câu trả lời trong Có Không Mkv
    làm
        nghỉ;
    xong
}

checkFolders(){ 
    d=$(zenity --file-selection --title="Chọn một thư mục và hợp nhất tất cả các tệp .MP4 bên trong thư mục" --directory)
}

đơn giảnSao chép
thư mục kiểm tra

cd "$d"
tiếng vang $(pwd)
howManyFolders=$(ls -l -tr "$(pwd)" | grep -c ^d)

nếu [ $howManyFolders -gt 1 ] 
sau đó
    thư mục kiểm tra
fi

currentDate=$(date +'%m.%d.%Y_%H.%M')
safeVideoName="${d/ /_}"
safeVideoName="${safeVideoName////}"
tiếng vang "safeVideoName: ${safeVideoName}"
videoName="../${safeVideoName}_${currentDate}_merged"


nếu [ "$answer" = "Có" ] 
    sau đó
        numberOfVideos=0
        bộ lọc video=""
        filesList=""
        cho tệp trong $(ls -1v | grep -i mp4);do 
            filesList="${filesList} -i ${file}"
            videoFilter="${videoFilter}[${numberOfVideos}:v][${numberOfVideos}:a]"
            
            hãy để "numberOfVideos=numberOfVideos+1"
        xong
        tiếng vang "videoFilter: ${videoFilter}"
        ffmpeg $filesList -vf "transpose=2,transpose=2,transpose=2" -filter_complex "${videoFilter}concat=n=${numberOfVideos}:v=1:a=1[vv][a];[vv ]overlay=main_w-overlay_w-5:main_h-overlay_h-5[v]:" -map "[v]" -map "[a]" ${videoName%/}.mp4
    yêu tinh [ "$answer" = "Mkv" ]
    sau đó
        ffmpeg -safe 0 -f concat -i <(find . -type f -name '*.MP4' -printf "file '$PWD/%p'\n" | sort) -c copy ${videoName%/}. mkv
    khác
        ls -1v -tr | grep -i mp4 | perl -ne '$_ =~ s/\n$//; in "tệp '"'"'$_'"'"'\n"' | ffmpeg -safe 0 -protocol_whitelist file,tcp,http,pipe -f concat -i - -c copy "${videoName%/}.mp4"
fi

Khi tôi hợp nhất các tệp, các tệp H.265 phát tốt, nhưng khi chuyển sang MP4, nó chỉ có khung hình cuối cùng từ các tệp H.265 và âm thanh từ MP4.

nhìn thấy lỗi khi hợp nhất

// cmd - echo ls -1v -tr | grep -i mp4 | perl -ne '$_ =~ s/\n$//; in "tệp '"'"'$_'"'"'\n"' | ffmpeg -safe 0 -protocol_whitelist file,tcp,http,pipe -f concat -i - -c copy "${videoName%/}.mp4"

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55f528e4d3c0] Tự động chèn bộ lọc luồng bit h264_mp4toannexb
[mp4 @ 0x55f528e4fb40] DTS không đơn điệu trong luồng đầu ra 0:1; trước đây: 655360, hiện tại: 626560; thay đổi thành 655361. Điều này có thể dẫn đến dấu thời gian không chính xác trong tệp đầu ra.
[concat @ 0x55f528e436c0] DTS 1116270 < 1167534 không đúng thứ tự
[mp4 @ 0x55f528e4fb40] DTS không đơn điệu trong luồng đầu ra 0:0; trước đây: 1226574, hiện tại: 1175310; thay đổi thành 1226575. Điều này có thể dẫn đến dấu thời gian không chính xác trong tệp đầu ra.
[mp4 @ 0x55f528e4fb40] DTS không đơn điệu trong luồng đầu ra 0:1; trước đây: 655361, hiện tại: 627584; thay đổi thành 655362. Điều này có thể dẫn đến dấu thời gian không chính xác trong tệp đầu ra.
[mp4 @ 0x55f528e4fb40] DTS không đơn điệu trong luồng đầu ra 0:0; trước đây: 1226575, hiện tại: 1178313; thay đổi thành 1226576. Điều này có thể dẫn đến dấu thời gian không chính xác trong tệp đầu ra.
[mp4 @ 0x55f528e4fb40] DTS không đơn điệu trong luồng đầu ra 0:1; trước đây: 655362, hiện tại: 628608; thay đổi thành 655363. Điều này có thể dẫn đến dấu thời gian không chính xác trong tệp đầu ra.

nhập mô tả hình ảnh ở đây

Tôi có thể cung cấp các clip ví dụ nếu được yêu cầu :)

raj avatar
lá cờ cn
raj
Tập lệnh của bạn sử dụng `ffmpeg` để hợp nhất các tệp chỉ bằng cách sử dụng `copy` pseudo-codec. Nếu các tệp được mã hóa khác nhau, bạn phải thực hiện mã hóa lại với `ffmpeg`, tức là.bạn phải cung cấp một số tên codec đầu ra thực tế thay vì `copy`. Sau đó, `ffmpeg` sẽ mã hóa lại tất cả các clip thành định dạng bạn chỉ định. Bạn có thể cần thêm một số tham số bổ sung chỉ định chi tiết mã hóa, vì `ffmpeg` là một phần mềm phức tạp, bạn phải thử nghiệm và kiểm tra xem tùy chọn nào cho kết quả tốt nhất.
raj avatar
lá cờ cn
raj
Ngoài ra, bạn cũng có thể cần cung cấp một số định dạng đầu ra thực tế thay vì `concat`.
lá cờ cn
À thật thú vị. Vì vậy, nó sẽ mất nhiều thời gian hơn, nhưng nó sẽ hoạt động. Tôi tự hỏi liệu tôi có thể mã hóa lại các tệp MP4 chứ không phải 265 không? Tôi đoán bạn có thể thực hiện kiểm tra trong `ffmpeg` để kiểm tra xem tệp đó là gì?
raj avatar
lá cờ cn
raj
Tôi không nghĩ rằng `ffmpeg` có một tham số có thể cho nó biết "nếu định dạng giống nhau, thì đừng mã hóa lại". Nếu bạn không bảo nó `sao chép`, thì nó luôn mã hóa lại, thậm chí từ cùng một định dạng. Vì vậy, trước tiên bạn có thể mã hóa lại các clip H265 thành MP4 (cũng sử dụng `ffmpeg`) và sau đó hợp nhất tất cả các tệp MP4 bằng tập lệnh của bạn. Nhưng bạn phải đảm bảo rằng bạn chuyển đổi chúng thành MP4 với các thông số chính xác giống như (codec, tốc độ khung hình, kích thước, v.v.) như MP4 bạn đã có.
raj avatar
lá cờ cn
raj
Nhưng bạn có thể nói rõ ràng với `ffmpeg` để `sao chép` các tệp đã là MP4 và mã hóa lại các tệp khác. Nhưng trước tiên bạn phải xác định cái nào là cái nào. Bạn có thể sử dụng `ffprobe` đi kèm với `ffmpeg` để xác định các tệp video.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.