direct_play_nice 0.1.0-beta.1

CLI program that converts video files to direct-play-compatible formats.
Documentation
pub mod app;
pub mod ffmpeg_diagnostics;
pub mod h264;
pub mod helpers;
pub mod pipeline;
pub mod quality;

pub(crate) mod prelude {
    pub(crate) use anyhow::{anyhow, bail, Context, Result};
    pub(crate) use clap::{ArgMatches, ValueEnum};
    pub(crate) use libc::EINVAL;
    pub(crate) use log::{debug, error, info, trace, warn, Level};
    pub(crate) use rsmpeg::avcodec::{AVCodec, AVCodecContext, AVCodecRef, AVPacket};
    pub(crate) use rsmpeg::avformat::{
        AVFormatContextInput, AVFormatContextOutput, AVStreamMut, AVStreamRef,
    };
    pub(crate) use rsmpeg::avutil::{
        ra, AVAudioFifo, AVChannelLayout, AVDictionary, AVFrame, AVSamples,
    };
    pub(crate) use rsmpeg::error::RsmpegError;
    pub(crate) use rsmpeg::ffi::{self};
    pub(crate) use rsmpeg::swresample::SwrContext;
    pub(crate) use rsmpeg::swscale::SwsContext;
    pub(crate) use serde::Deserialize;
    pub(crate) use std::{
        collections::HashSet,
        convert::TryFrom,
        env,
        ffi::{c_char, CStr, CString},
        fs,
        os::raw::c_void,
        path::{Path, PathBuf},
        ptr,
        sync::atomic::{AtomicI64, Ordering},
    };

    pub(crate) use crate::config;
    pub(crate) use crate::devices;
    pub(crate) use crate::devices::{
        ContainerFormat, H264Level, H264Profile, Resolution, StreamingDevice,
    };
    pub(crate) use crate::ffmpeg_utils::*;
    pub(crate) use crate::gpu::*;
    pub(crate) use crate::logging::log_relevant_env;
    pub(crate) use crate::main_probe::{gather_streams_info_json, print_streams_info};
    pub(crate) use crate::main_retry::{
        cleanup_partial_output, handle_hw_encoder_init_error, handle_hw_profile_mismatch,
        retry_with_software_encoder, select_primary_video_stream_index,
    };
    pub(crate) use crate::main_sidecar::*;
    pub(crate) use crate::plex;
    pub(crate) use crate::servarr;
    pub(crate) use crate::servarr::{
        ArgsView as ServeArrArgsView, IntegrationPreparation, ReplacePlan,
    };
    pub(crate) use crate::subtitle_ocr;
    pub(crate) use crate::throttle::acquire_slot;
    pub(crate) use crate::transcoder::app::app_convert::{convert_video_file, ConversionParams};
    pub(crate) use crate::transcoder::ffmpeg_diagnostics::*;
    pub(crate) use crate::transcoder::h264::*;
    pub(crate) use crate::transcoder::helpers::*;
    pub(crate) use crate::transcoder::pipeline::*;
    pub(crate) use crate::transcoder::quality::*;
    pub(crate) use crate::types::*;
}

pub(crate) use app::app_convert::convert_video_file;
pub(crate) use app::app_entry::run;
pub(crate) use ffmpeg_diagnostics::configure_ffmpeg_logging;
pub(crate) use h264::*;
pub(crate) use pipeline::*;
pub(crate) use quality::{AudioQuality, VideoCodecPreference, VideoQuality};