переменные Ссылки между двумя текстовыми файлами

Поведение выбора потока по умолчанию выбирает только один поток для каждого типа потока, поэтому входы с несколькими аудиопотоками будут создавать выход с одним аудиопотоком. Чтобы отключить это поведение и вручную выбрать нужные потоки, используйте опцию -map.

В этих примерах используется -c copy для stream copy (re-mux) со входа на выход. Повторное кодирование не происходит.

Stream copy all streams

ffmpeg -i input -map 0 -c copy output

1-й видеопоток, 2-й аудиопоток, все субтитры

ffmpeg -i input -map 0:v:0 -map 0:a:1 -map 0:s -c copy output

3-й видеопоток, все аудиопотоки, без субтитров

В этом примере используется 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

3
13.09.2018, 22:14
4 ответа

Ваша оболочка не знает английского языка, поэтому автоматическая генерация прописанных -чисел с правильными суффиксами для произвольного числа потребовала бы некоторых дополнительных усилий. Используя только цифры для нумерации и дополнительное предположение, что 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
1
27.01.2020, 21:13

Вы можете добиться того, чего хотите, используя структуру 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
1
27.01.2020, 21:13

Я удивлен, что никто не предложил использовать массивы. Вот моя грубая попытка (с использованием идеи 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

Код нужно немного почистить, но он иллюстрирует суть.

0
27.01.2020, 21:13

С 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, если у нас закончатся английские числа ).

4
27.01.2020, 21:13

Теги

Похожие вопросы