【问题标题】:Grep Result filter double resultGrep Result 过滤双重结果
【发布时间】:2020-01-14 09:52:24
【问题描述】:

我只需要从 grep 中提取第一个 Ita 音频:

ffprobe -i La.casa.nera.1991.FULL.HD.1080p.DTS+AC3.ITAENG.SUB.LFi.mkv 2>&1 | grep "Stream" | grep -v "Video" | grep -v "Subtitle"  | grep  "ac3" | egrep "(Ita)|(ita)|Italian|Italiano|italian|italiano|Eng|eng|English|english"

结果:

Stream #0:2(ita): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s
Stream #0:4(ita): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s
Stream #0:6(eng): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s

我只需要像这样的第一个 ita 音频:

Stream #0:2(ita): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s
Stream #0:6(eng): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s

可以帮忙,最好的问候

【问题讨论】:

  • 请在您的帖子中发布输入和预期输出示例,这可以通过单个sedawk 等来完成。让我们知道。
  • 旁注:egrep 有 -i 所以你不需要两个 Ita|ita (假设你不必避免像 iTa 这样的东西)

标签: bash ffprobe


【解决方案1】:

| head -1 添加到您的命令中,
或将-m1 标志添加到您的grep

来自grep手册:

-m num, --max-count=num # Stop reading the file after num matches.

【讨论】:

    【解决方案2】:

    如果您只需要意大利语,我会建议您这样做:

    ffprobe -i La.casa.nera.1991.FULL.HD.1080p.DTS+AC3.ITAENG.SUB.LFi.mkv 2>&1 | grep "Stream" | grep -v "Video" | grep -v "Subtitle"  | grep  "ac3" | egrep "(Ita)|(ita)|Italian|Italiano|italian|italiano" | head -1
    

    删除英文并添加| head -1如果你想要第一个或| tail -1如果你想要最后一个

    【讨论】:

    • 我只需要一个意大利语和一个英语
    【解决方案3】:

    这只是一个例子,有许多 mkv 文件的循环,只需要选择一首意大利语曲目和一首英文曲目。在这种情况下有 2 个音频

    这是调试信息:

    电影名称:La.casa.nera.1991.FULL.HD.1080p.DTS+AC3.ITAENG.SUB.LFi.mkv Trovate 3 跟踪 DTS e 3 跟踪 AC3:

    计数 DTS 曲目:3 计数 AC3 曲目:3

    Stream #0:1(ita): Audio: dts (DTS), 48000 Hz, stereo, fltp, 1536 kb/s (default)
    Stream #0:2(ita): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s
    Stream #0:3(ita): Audio: dts (DTS), 48000 Hz, stereo, fltp, 1536 kb/s
    Stream #0:4(ita): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s
    Stream #0:5(eng): Audio: dts (DTS), 48000 Hz, stereo, fltp, 1536 kb/s
    Stream #0:6(eng): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s
    

    Preferenza sorgente audio selezionata : ac3 音频 ID ITA:2 4 音频 ID ENG : 6

    问题是音频 ID ITA 给我 2 个结果,命令 ffmpeg 不起作用。

    $FFMPEG_BIN -y \
            -i $MOVIE_INPUT"/"$FILE_NAME \
            -i /home/mich/Eagle-Horror.png \
            -filter_complex "color=s=1920x1080:c=black [base] ; \
            [base][0:v] overlay=x=(main_w-overlay_w)/2:y=(main_h-overlay_h)/2, drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf: text='%{pts \: hms}': x=20: y=h-(2*lh): fontcolor=white: box=0: boxcolor=0x00000000@1: fontsize=12, drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf: text='$MOVIE_NAME - $FILM_TIME - Disponibile in multilingua': x=25: y=h-(2*lh)-20: fontcolor=white: box=0 [over];\
            [over][1:v] overlay=main_w-overlay_w-40:40" \
            -pix_fmt yuv420p \
            -vsync 1 \
            -threads 0 \
            -map 0:0 -c:v h264_nvenc -profile:v high -preset:v slow -level 4.1 -vb 4500k -maxrate 4700k -bufsize 6000k -r 23.976 -map_metadata -1 -map_chapters -1 -t $FILM_DURATION -metadata:s:v:0 language=ita \
            -map 0:"$AUDIO_ID_ITA" -c:a aac -ab 640k -ac 5 -metadata:s:a:0 language=ita \
            -map 0:"$AUDIO_ID_ENG" -c:a aac -ab 640k -ac 5 -metadata:s:a:1 language=eng \
            $MOVIE_OUTPUT"/"$FILE_NAME-new.mp4
    

    【讨论】:

    • 这不应该是答案,应该添加到问题中
    【解决方案4】:

    不清楚你在问什么。对于您拥有的示例,uniq -s12 可以解决问题:

    ffprobe -i La.casa.nera.1991.FULL.HD.1080p.DTS+AC3.ITAENG.SUB.LFi.mkv 2>&1 | grep "Stream" | grep -v "Video" | grep -v "Subtitle"  | grep  "ac3" | egrep "(Ita)|(ita)|Italian|Italiano|italian|italiano|Eng|eng|English|english" | uniq -s12
    
    Stream #0:2(ita): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s
    Stream #0:6(eng): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s
    

    解释:

    • -s 指示 uniq 跳过前 12 个字符,因此 uniqnes 将仅用于 (ita): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s

    但是,如果 2 个意大利流具有不同的频率或其他属性,则可能需要 awk 命令:

    awk  '!a[substr($2,6,length($2)-7)]++'
    Stream #0:2(ita): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s
    Stream #0:6(eng): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s
    

    解释:

    • $2 选择第二个字段#0:2(ita) 为例
    • substr 提取 ita 部分(由于我不确定命令输出,我假设 ita 可能具有可变长度
    • !a[..] - 仅在 a 字典还没有条目时打印

    【讨论】:

      猜你喜欢
      • 2017-04-07
      • 2013-08-05
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多