Chuyển đổi hàng loạt H.265 sang H.264
Những ví dụ này đã được viết cho gần đây ffmpeg
. Tự cứu mình một số rắc rối và tải về một phiên bản gần đây. Sau đó đặt ffmpeg
nhị phân vào ~/bin
hoặc /usr/local/bin
(bạn có thể phải đăng xuất sau đó đăng nhập để được chú ý).
Đầu ra Matroska
mkdir h264vids
for f in *.mp4; do ffmpeg -i "$f" -map 0 -c copy -c:v libx264 -crf 23 -preset medium h264vids/"${f%.*}.mkv"; done
Ví dụ này sẽ xuất ra một thư mục có tên h264vids
.
Ví dụ này giả định đầu vào của bạn là .mp4
. Nếu không, hãy thay đổi .mp4
thể hiện trong ví dụ thành loại tệp đầu vào của bạn hoặc chỉ sử dụng *
chính nó.
Điều chỉnh -crf
chất lượng và -preset
tốc độ / hiệu quả mã hóa. Hoặc chỉ cần loại bỏ các tùy chọn này và sử dụng các giá trị mặc định khá tốt và đủ cho hầu hết (ví dụ này là sử dụng các giá trị mặc định cho các tùy chọn này). Xem FFmpeg Wiki: H.264 để biết thêm thông tin về các tùy chọn này.
Đầu ra MP4
Cái này phức tạp hơn một chút. Điều này sẽ thực hiện mã hóa có điều kiện tùy thuộc vào âm thanh đầu vào có phải là AAC hay không. Nếu âm thanh đầu vào là AAC thì âm thanh sẽ được sao chép luồng (được trộn lại) như hiện tại và không cần mã hóa lại. Nếu âm thanh đầu vào không phải là AAC thì nó sẽ được mã hóa lại thành AAC.
Đây là một kịch bản đơn giản chỉ ra cách làm điều này bằng cách sử dụng ffprobe
và ffmpeg
. Sao chép và lưu nó vào thư mục chứa các video của bạn sẽ được chuyển đổi, cấp cho nó quyền thực thi chmod +x yourscriptname
, sau đó chạy nó với ./yourscriptname
.
#!/bin/bash
mkdir h264vids
for f in *.mkv
do
audioformat=$(ffprobe -loglevel error -select_streams a:0 -show_entries stream=codec_name -of default=nw=1:nk=1 "$f")
if [ "$audioformat" = "aac" ]; then
ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium -c:a copy -movflags +faststart h264vids/"${f%.*}.mp4"
else
ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium -c:a aac -movflags +faststart h264vids/"${f%.*}.mp4"
fi
done
Ví dụ này sẽ xuất ra một thư mục có tên h264vids
.
Ví dụ này giả định đầu vào của bạn là .mkv
. Nếu không, hãy thay đổi .mkv
thể hiện trong ví dụ thành loại tệp đầu vào của bạn hoặc chỉ sử dụng *
chính nó.
Xem lưu ý ở trên liên quan -crf
và -preset
.
Bạn có thể tạm dừng mã hóa bằng ctrl+ zvà tiếp tục với fg
.
sleep 3
này là không cần thiết (nhưng có thể hữu ích để chấm dứt vòng lặp) vàINPUT=$1
vô nghĩa vì bạn đang chạy nó trực tiếp trong một vỏ tương tác.