Câu trả lời:
Đầu tiên chạy ffmpeg -i file.mp4
để xem luồng nào tồn tại trong tệp của bạn. Bạn sẽ thấy một cái gì đó như thế này:
Stream #0.0: Video: mpeg4, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 23.98 tbr, 23.98 tbn, 23.98 tbc
Stream #0.1: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
Sau đó chạy ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
để sao chép luồng video và luồng âm thanh thứ 2 sang new_file.mp4
.
Option map (set input stream mapping) cannot be applied to input file file.mp4 new_file.mp4 -- you are trying to apply an input option to an output file or vice versa. Move this option before the file it belongs to.
: để sửa lỗi, chỉ cần thay đổi thứ tự của các đối số:ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
-c copy
để có các luồng giống hệt nhau cho âm thanh, video nhưng cũng có phụ đề : ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4
.
Vấn đề liên quan Việc xóa tất cả các bản âm thanh khỏi tệp mp4 có thể được thực hiện như vậy:
ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4
The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.
Nhưng tôi đã thêm những lá cờ đó và nó vẫn giống nhau ...?
Xác định số luồng:
$ ffmpeg -i in.mp4
...
Stream #0:0: Video: ...
Stream #0:1: Audio: ...
Stream #0:2: Audio: ...
Sử dụng -map _file_:_stream_
để chọn luồng nào cần xử lý và đầu ra
$ ffmpeg -i in.mp4 -map 0:0 -map 0:2 -vcodec copy -acodec copy out.mp4
Bạn có thể thử avidemux
chỉ xử lý một tệp âm thanh bên trong (và do đó buộc bạn phải chọn một bản nhạc cụ thể). Tôi chưa bao giờ thử nó với .mp4 nhưng nó hoạt động với các định dạng khác.
Tôi đã sử dụng Avidemux (GUI) nhiều lần và ffmpeg (console).
Trong Avidemux, bạn chọn "Âm thanh" -> "Chọn bản nhạc" trong menu chính; sau đó lưu video của bạn dưới dạng tệp mới.
Thật thú vị, trong một số trường hợp, Avidemux tạo ra đầu ra "tốt hơn" so với ffmpeg.
chỉ trong trường hợp, Avidemux và ffmpeg có trong kho Fedora Linux tiêu chuẩn. (Tôi chắc chắn rằng chúng cũng là tiêu chuẩn trong các hương vị Linux khác.)
-vn
hoặc -an
sẽ xóa tất cả các bản nhạc hoặc video. Cung cấp -vn -acodec copy
sẽ loại bỏ video; -an -vcodec copy
sẽ loại bỏ tất cả âm thanh.
-vcodec copy
chỉ định rằng ffmpeg nên sao chép thẳng đoạn video hiện có (và không thực hiện bất kỳ xử lý / mã hóa nào của nó). Nếu bạn không chỉ định nó, thì nó vẫn hoạt động nhưng ffmpeg có thể mã hóa lại đoạn video hiện có và hoạt động sẽ sử dụng nhiều CPU hơn và có thể mất nhiều thời gian hơn.
Sử dụng avidemux trong dòng lệnh.
(Trong GUI Avidemux, như đã được giải mã trong https://unix.stackexchange.com/a/85834/4319 ở trên, bạn chỉ cần chọn / bỏ chọn các bản âm thanh và lưu tệp. (Mọi thứ được sao chép vào AVI mới.))
Tôi đã xem loại dự án nào được lưu dưới dạng các chương trình SpiderMonkey hoặc TinyPy cho các hành động của mình và hóa ra dự án SpiderMonkey (JavaScript) thiếu các hành động lựa chọn theo dõi âm thanh mà tôi cần, nhưng dự án TinyPy (Python) đã làm họ
Tôi đã xóa mọi thứ không liên quan (hàng tá dòng không cần thiết) và đây là những gì tôi nhận được trong some_series.py
:
#PY <- Needed to identify #
#--automatically built--
adm = Avidemux()
adm.audioClearTracks()
adm.audioAddTrack(1)
Nó rời khỏi track 1, nhưng giảm track 0.
Sau đó, tôi đã chạy một chuyển đổi hàng loạt của nhiều tệp với một lệnh như thế này:
for f in *.avi; do avidemux3_cli --nogui --load "$f" --run ../some_series.py --save ../some_series/"${f%%.rus.eng.avi}".eng.avi --quit; done
Nó sao chép tất cả mọi thứ, nhưng bỏ tất cả trừ đoạn âm thanh cần thiết.
Cách chạy avidemux từ dòng lệnh được tôi học từ https://www.avidemux.org/admWiki/doku.php?id=tutorial:batch_ Processing , mặc dù họ không đề cập đến các tập lệnh Python, chỉ có các tập lệnh JS ( mà không làm việc cho tôi).
Các ffmpeg
chương trình đã được thay thế bằng avconv
. avconv
có cách sử dụng rất giống với ffmpeg
, do đó tất cả các lệnh trong bài viết này có thể giống như:
avconv <old ffpmeg command line options>
Theo liên kết này để cài đặt avconv
nếu bạn đang trên Ubuntu.
FFMPEG có thể là một giải pháp hữu ích cho bạn.
$ man ffmpeg