首页 > 解决方案 > 如何让 ffmpeg 编码一次并复用两次,以及选项?

问题描述

我已经阅读了-f tee,但我无法理解如何做我想做的事。

我想读入一个音频文件,编码一次,然后转储一个 mp3 文件以及 mp3 HLS 段。换句话说,单独的命令将是:

$ cat file.wav | ffmpeg -y -i pipe:0 -c:a libmp3lame -q:a 0 -map 0:0 -f segment -segment_time 10 -segment_list /tmp/segments.m3u8 -segment_format mpegts -vn /tmp/segment_%03d.ts

$ cat file.wav | ffmpeg -y -i pipe:0 -c:a libmp3lame -q:a 1 /tmp/working.mp3

(注意第二个命令中不同的 qscale 值)

我不太清楚如何对每个输出应用不同的命令行选项。

编辑:我更接近解决方案,我认为:

$ ffmpeg -y -i pipe:0 -c:a libmp3lame -map 0:0 -f tee -vn '[q\:a=1]/tmp/working.mp3|[q\:a=0:f=segment:segment_time=10:segment_list=/tmp/segments.m3u8:segment_format=mpegts]/tmp/segment_%03d.ts'

但是通过转义q\:a不起作用:

[tee @ 0x7fe897815600] No option found near "q:a=1]/tmp/working.mp3"
[tee @ 0x7fe897815600] Slave muxer #0 failed: Invalid argument, continuing with 1/2 slaves.
[tee @ 0x7fe897815600] No option found near "q:a=0:f=segment:segment_time=10:segment_list=/tmp/segments.m3u8:segment_format=mpegts]/tmp/segment_%03d.ts"
[tee @ 0x7fe897815600] All tee outputs failed.
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:0 --
Conversion failed!

标签: ffmpeg

解决方案


如果你编码一次,你不能有两个 q:a 值——只有一个编码实例。您可以简单地编码两次并在一个命令中复用两个输出。

$ cat file.wav | ffmpeg -y -i pipe:0 -c:a libmp3lame -q:a 0 -map 0:0 -f segment -segment_time 10 -segment_list /tmp/segments.m3u8 -segment_format mpegts -vn /tmp/segment_%03d.ts -c:a libmp3lame -q:a 1 /tmp/working.mp3


推荐阅读