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.
Tôi có thể cung cấp các clip ví dụ nếu được yêu cầu :)