Поведение выбора потока по умолчанию выбирает только один поток для каждого типа потока, поэтому входы с несколькими аудиопотоками будут создавать выход с одним аудиопотоком. Чтобы отключить это поведение и вручную выбрать нужные потоки, используйте опцию -map
.
В этих примерах используется -c copy
для stream copy (re-mux) со входа на выход. Повторное кодирование не происходит.
ffmpeg -i input -map 0 -c copy output
ffmpeg -i input -map 0:v:0 -map 0:a:1 -map 0:s -c copy output
В этом примере используется negative mapping для исключения субтитров.
ffmpeg -i input -map 0:v:2 -map 0:a -map -0:s -c copy output
Все видео с входа 0, все аудио с входа 1:
ffmpeg -i input0 -i input1 -map 0:v -map 1:a -c copy output
Ваша оболочка не знает английского языка, поэтому автоматическая генерация прописанных -чисел с правильными суффиксами для произвольного числа потребовала бы некоторых дополнительных усилий. Используя только цифры для нумерации и дополнительное предположение, что log1.txt является более длинным файлом, попробуйте следующее:
#!/bin/bash
log1_length=$(wc -l <log1.txt)
log2_length=$(wc -l <log2.txt)
for i in $(seq $log1_length); do
arg1=$(head -$i <log1.txt | tail -1)
arg2=$(head -$(((i-1) % log2_length + 1)) <log2.txt | tail -1)
echo "Color No. $i $arg1 is $arg2."
done
Вы можете добиться того, чего хотите, используя структуру case control следующим образом:
#!/bin/bash
log1_length=$(wc -l <log1.txt)
log2_length=$(wc -l <log2.txt)
for i in $(seq $log1_length); do
arg1="$(head -$i <log1.txt | tail -1)"
arg2="$(head -$(((i-1) % log2_length + 1)) <log2.txt | tail -1)"
# Case control structure to replace digit equivalent in words
case ${i} in
1) echo -n "The first color ";;
2) echo -n "The second color ";;
3) echo -n "The third color ";;
4) echo -n "The fourth color ";;
5) echo -n "The fifth color ";;
6) echo -n "The sixth color ";;
7) echo -n "The seventh color ";;
8) echo -n "The eighth color ";;
9) echo -n "The ninth color ";;
10) echo -n "The tenth color ";;
11) echo -n "The eleventh color ";;
esac
echo ${i}"$i${arg1} is ${arg2}" | tr -d '0123456789'
done
Вывод выглядит следующим образом:
The first color Black is Ugly
The second color Blue is Nice
The third color Brown is cool
The fourth color Copper is pretty
The fifth color Cyan is Ugly
The sixth color Gold is Nice
The seventh color Gray is cool
The eighth color Green is pretty
Я удивлен, что никто не предложил использовать массивы. Вот моя грубая попытка (с использованием идеи log3.txt
от @Stephane выше.
#!/bin/bash
nl1=$( wc -l < log1.txt )
nl2=$( wc -l < log2.txt )
nlnums=$( wc -l < nums.txt )
declare -a arr1[$nl1]
declare -a arr2[$nl2]
declare -a nums[$nlnums]
for (( i=0; i < $nl1; i++ ))
do
read arr1[$i]
done < log1.txt
for (( i=0; i < $nl2; i++ ))
do
read arr2[$i]
done < log2.txt
for (( i=0; i < $nlnums; i++ ))
do
read nums[$i]
done < nums.txt
j=0
for (( i=0; i < $nl1; i++ ))
do
echo "The ${nums[$i]} color ${arr1[$i]} is ${arr2[$j]}"
j=$(( (j+1) % $nl2 ))
done
Файл nums.txt
выглядит следующим образом:
first
second
third
fourth
fifth
sixth
seventh
eighth
ninth
tenth
Код нужно немного почистить, но он иллюстрирует суть.
С zsh
и с libnumbertext-tools
с spellout
в Debian:
#! /bin/zsh -
colors=(${(f)"$(<log1.txt)"})
adjectives=(${(f)"$(head -n ${#colors} <log2.txt)"})
/usr/lib/libnumbertext/spellout -l /usr/share/libnumbertext/en \
-p ordinal 1-$#colors |
for color adjective in ${colors:^^adjectives}; do
read num &&
print -r The $num color $color is $adjective
done
(обратите внимание, что это американский -английский язык. Например, за 101 вы получите сто первый вместо сто первый )
.Если вы не можете установить zsh
или какое-либо программное обеспечение, которое расшифровывает числа, но имеет список английских порядковых номеров в третьем log3.txt
файле, вы можете сделать это в большинстве оболочек, включаяbash
(Bourne -, например, rc -типа, рыбу хоть):
#! /bin/sh -
awk '
BEGIN {while ((getline a < "log2.txt") > 0) adjective[na++] = a}
{
if ((getline num < "log3.txt") <= 0) num = NR "th"
print "The "num" color "$0" is "adjective[(NR-1)%na]
}' log1.txt
(вернуться к <digits>th
, если у нас закончатся английские числа ).