it-swarm-vi.com

Làm cách nào để xóa đoạn âm thanh khỏi tệp video mp4?

Tôi có một tập tin video mp4 với nhiều bản nhạc. Tôi muốn loại bỏ phần còn lại của các bài hát và chỉ giữ lại một. Làm thế nào để tôi làm điều này?

107
tshepang

Lần chạy đầu tiên 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.

122
gelraen

Vấn đề liên quan tất cả theo dõi âm thanh từ một tập tin mp4 có thể được thực hiện như vậy:

ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4
106
Greg Marks

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 sẽ xử lý và xuất

$ ffmpeg -i in.mp4 -map 0:0 -map 0:2 -vcodec copy -acodec copy out.mp4

xem: https://ffmpeg.org/ffmpeg.html#Advified-options

8
jgr

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.

4
wag

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.)

3
Maxim

-vn hoặc là -an sẽ xóa tất cả các bản nhạc hoặc video. Cung cấp -vn -acodec copy sẽ xóa video; -an -vcodec copy sẽ xóa tất cả âm thanh.

-vcodec copy chỉ định rằng ffmpeg nên sao chép trực tiếp đ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.

1
lots of crisps

Chương trình ffmpeg đã đượ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 đăng này có thể giống như:

avconv <old ffpmeg command line options>

Theo dõi liên kết này để cài đặt avconv nếu bạn đang sử dụng Ubuntu.

0
SmallChess

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 tới AVI mới.))

Tôi đã xem loại dự án nào được lưu dưới dạng SpiderMonkey hoặc TinyPy projetcs cho 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 = Python script, chỉ các tập lệnh JS (không hoạt động với tôi).

0